unity第三人称unity3d角色控制器器怎么添加

下次自动登录
现在的位置:
& 综合 & 正文
Unity手游之路角色控制器
我们要控制角色的移动,可以全部细节都由自己来实现。控制角色模型的移动,同时移动摄影机,改变视角。当然Unity也提供了一些组件,可以让我们做更少的工作,实现我们所期望的功能。今天我们就一起系统来学习相关的内容吧。
(转载请注明原文出处)
Charactor Controller(角色控制器)
"角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体。角色控制器不受力的影响,仅仅当你调用Move函数时才运动。然后它将执行运动,但是受制于碰撞。"(---from unity3d官方文档)
我们通常在人物模型上加上这个组件后,就可以控制模型的移动了。要注意的一点是。加了角色控制器后,他就不受重力影响。所以要自己在move函数中处理重力的情况。即我们要自己出来y轴方向上的速度变化。
两个重要的函数
1.function SimpleMove (speed : Vector3) : bool以一定的速度移动。将忽略Y轴上的速度。单位是m/s。重力被自动应用。建议每帧只调用一次Move或者SimpleMove。返回值是是否着地。例子
2.function Move (motion : Vector3) : CollisionFlags通过动力来移动控制器。动力只受限制于碰撞。它将沿着碰撞器滑动。这个函数不应用任何重力如果只是单纯控制玩家的移动,那么用Character Controller足够了。如果还涉及到视角的切换。Unity提供了相关的组件。在项目中引入Character Controller(Asset-&Import Asset),就可以将角色控制器组件导入我们的项目了。
第一人称控制器
经典的游戏CS就是第一人称视角的,摄像机就是我们的视角。人物的移动,导致视角的移动。(源码first.unity)1.删除默认的摄像机2.新建一个地形Terrain3.从角色控制器组件中引入 First Person Controller到项目中4.拖动First Person Controller到合适的位置我们就可以看到效果了,以第一人称的视角移动,巡视整个场景。鼠标控制整体视角,方向键或者wasd按钮控制摄像机的移动。
第三人称控制器
很多角色扮演游戏(wow,dota)常用到第三人称视角。摄像机离我们的角色保持有一定距离,可以详细看到我们所扮演角色的各种行为动作。(源码third.unity)1.创建一个地形2.引入3rd Person Controller组件到项目中3.修改默认摄像机的Tag为MainCamera4.选中3rd Person Controller组件,将其 Third Person Camera 设置为MainCamera可以看到效果了,可以看到扮演的角色。方向键或者wasd按键可以控制角色的移动,同时可以发现整个视角也会跟着移动
核心代码解读
第一人称控制器脚本FPSInputController.js
[javascript]
第三人称角色控制器ThirdPersonController.js
[javascript]
第三人控制器摄像机脚本ThirdPersonCamera.js
[javascript]
角色控制,可以方便的控制游戏的视角。在很多游戏中,可以直接使用该组件,减少我们的重复开发工作
&&&&推荐文章:
【上篇】【下篇】Unity角色控制器 - LIQIANGEASTSUN的专栏 - CSDN博客
Unity角色控制器
控制角色移动,加上刚体和碰撞盒后经常出现角色被其他物体撞飞或者角色走动过程中经常摔倒等难以控制的现象。
利用角色控制器可以避免角色被撞飞翻到等。
& & & &首先在Hierasrchy视图中选择需要添加角色控制器的游戏对象,具体操作方法是在Unity导航菜单栏中选择“Component”-&“Physics”-&“Character Controller”菜单项即可给对象添加角色控制器。
& & & & 添加完角色控制器组件后,就需要在脚本中控制角色控制器组件,首先创建一个游戏脚本,然后在脚本中使用方法GetComponent&CharacterController&()获取角色控制器组件对象,接着通过调用SimpleMove()方法(其参数为角色移动的方向)来移动该角色。
& & private Transform myT
& & public CharacterC &//定义角色控制器
& & private float moveSpeed = 30.0f; &//定义移动速度
& & public GameObject colliderObj;
void Start ()
& & & & { & &
& & & & & & & &myTransform =
& & & & & & & & //获取角色控制器组件
& & & & & & & &controller = gameObject.GetComponent&CharacterController&();
& & & &void Update ()
& & & & & & & if (Input.GetKeyDown(KeyCode.A))
& & & & & & & {
& & & & & & & & & & myTransform.Rotate(0.0f, - 10.0f,0.0f); &//以y轴为中心旋转
& & & & & & & }
& & & & & & & if (Input.GetKeyDown(KeyCode.D))&
& & & & & & & {
& & & & & & & & & &&myTransform&.Rotate(0.0f,10.0f,0.0f); &//以Y轴为中心旋转
& & & & & & & }
& & & & & & &if (Input.GetKeyDown(KeyCode.W))&
& & & & & & &{
& & & & & & & & & &controller.SimpleMove(Vector3.forward * moveSpeed); &//参数为 移动方向乘以移动速度
& & & & & & &}
& & & & & & &if (Input.GetKeyDown(KeyCode.S))&
& & & & & & &{
& & & & & & & & & &controller.SimpleMove(Vector3.forward * (-moveSpeed));
& & & & & & &}
& & & & & & & if (controller.collisionFlags == CollisionFlags.Sides)
& & & & & & & &{
& & & & & & & & & &if (colliderObj != null)
& & & & & & & & {
& & & & & & & & & & & //碰撞的游戏对象名字 & &&
& & & & & & & & & & &print(&colliderObj.name = &&+colliderObj.name);
& & & & & & & & }
& & & & & &}
//&移动角色时调用此方法CharacterController.Move()移动,下方方法才会被调用,Move()方法Y轴上速度被忽略,速度以米/秒为单位,重力被自动应用,建议你没帧只调用一次Move或者SimpleMove方法
void OnControllerColliderHit(ControllerColliderHit hit)
& & & & //该方法检测与角色控制器碰撞的对象
& & & & colliderObj = hit.gameO//得到碰撞的游戏对象
只有调用CharacterController.Move调用期间,才会触发碰撞方法
//角色控制器组件在与具有Collider组件对象之间的碰撞
& & void OnControllerColliderHit(ControllerColliderHit hit)
& & & & &//判断碰撞的对象是否具备刚体组件
& & & & &GameObject hitObject = hit.collider.gameO
& & & & &Rigidbody rigidbody = hitObject.
& & & & if(rigidbody != null && !rigidbody.isKinematic)
& & & & & & //地面也具备刚体组件,这里判断一下
& & & & & & if(!hitObject.name.Equals(&Terrain&) )
& & & & & & {
& & & & & & & & //给被碰撞的刚体添加一个冲击力
& & & & & & & & rigidbody.AddForce(new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z) * 10);
& & & & & & }
在CharacterController.Move()调用期间,胶囊体的哪个部分与周围环境相碰撞。
controller.isGrounded是否接触地面
&CharacterController controller &= GetComponent(CharacterController);
& if ((controller.collisionFlags & CollisionFlags.Above) != 0) 碰撞体在自身的上方
我的热门文章自学是一个坚持和寂寞的过程,写博客更是一个总结与成长的过程,加油!
角色控制器续
之前学习了角色漫游,但里面有很多效果都不是我想要的。只有自己的动手实践了才能理会其中的奥妙。所以我又琢磨了许久。
为了把文章写的完整。所以把地形到角色控制器一个流程写下了
地形Terrain
1:新建地形&
&新建地形后。可以设置地形的参数,开发前期就要设置好地形配置,开发中期,如果在设置地形的话。地形将会变成初始化状态
2:参数设置&
选择地形对象,在Inspector中可以看到地形菜单栏
单击地形设置,找到下面Resolution选项
3:编辑地形
现在可以拿出自己的艺术细胞。可以尽情的开始涂鸦。几分钟后........
接下来看第二个:编辑地形特定高度
第三个是平滑过渡,可以把地形弄得圆滑些。自己可以试试。就不上图了
第四个是地形贴图。给地形添加一张山漠的贴图,
& unity内置了地形资源。ok,导包
导入完成后。资源包含了贴图,树。花草等等
你会发现这里可以添加多张贴图。第一张默认是地形是整个颜色,如果你想在上面画其他颜色,可以添加第二个贴图,比如现在想画绿色
那么现在在添加一张绿色贴图,然后选中绿色贴图,用画笔在地形中绘制。
当然,你可以删除贴图和编辑贴图。达到你想要的效果。
&第五个是添加树。第六个是添加草,具体添加方法跟上面贴图一样。也不上图了
来看看树的一些参数解释
&草的参数也不上图了。跟上面差不多。然后在给加上天空盒子(上篇博客介绍过怎么使用),最后我的涂药效果。
现在终于到了角色控制器了。
角色控制器
角色控制器组件保存在unity标准资源包中,可以模拟第一人称或者第三人称视角,它不受刚体的限制,ok,既然是资源包,导包呗。
Import Package--&Character Controller 搞定
& 1:第一人称。在第一人称视角中,整个游戏视图好比主角的眼睛,游戏画面中的一切好像好像是从自己眼睛看到的一样,就像CS游戏。
& 2:第三人称。在游戏场景中包含主角和Camera,主角移动后,Camera永远跟着主角移动,所以游戏中一直可以看到主角当前移动的方向。
&看看刚刚导入的角色控制器资源包
选择第一人称或者第三人称拖入Scene视图中,,运行游戏看效果(wsda移动空格键跳跃)
看看效果:你会发现什么问题?
1:当我把第三人称角色控制器拖入sceen视图中的时候。有一半是在地形里面的。这样。你需要把他拖到地形之上,否则会掉小去
2:发现他是不是可以穿过树木,因为树木是地形内置的资源。是没办法解决的。除非你单独导入树模型。然后给模型添加控制器。
现在看到这些。是不是迫不及待的想自己做一个游戏角色来模拟这些效果。
ok。拿之前的"角色漫游"那篇博文来讲解
1:新建地形
2:导入角色
3:我这里导入树模型和石头。这样角色就不可以穿过树或者石头
为了不能穿过石头。所以要把石头和角色都添加碰撞器角色添加刚体,当角色用力撞击石头的时候,你会发现。角色因为刚体的作用会反弹,那么问题来了。
所以这里就需要用到角色控制器组件,对,就是这个组件,角色控制器组件和刚体组件都具备物理引擎功能,他们都需要绑定在游戏对象中,、才能实现物理效果
并且同一个游戏对象中两者只能存在一个。刚体组件可以非常精确的模拟现实世界中模型的一切物理效果,而角色控制器组件则没有刚体那么精确,它更多地受控制器的限制,所以它更适合控制游戏对象
有兴趣的可以去尝试下。今天就写到这里,这里没什么代码是些理论。下一篇在写角色控制器组件,和用代码控制角色
阅读(...) 评论()}

我要回帖

更多关于 unity第三人称控制器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信