您的位置:首页 > 移动开发 > Unity3D

unity学习之角色控制器

2014-12-19 22:39 567 查看
欢迎来到unity学习unity培训

这里有很多U3D资源U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌

角色控制器



    定义:第三人称或第一人称游戏主角控制使用角色控制器,而不用刚体物理效果。使用角色控制器可以实现非常好的控制效果。

    手动添加角色控制器:给游戏对象添加角色控制器,在选中对象后使用菜单Component→Physics→Character Controller

    第一人称

    第一人称好比整个游戏中主角的眼睛,游戏中的画面一切好像自己眼睛中看到的一样。第一人称视角的控制原理是控制Scene视图中摄像机对象的移动,所以显示的永远都是主角的正前方,比如CS就是第一人称视角的游戏

    第二人称:

    在游戏中包括主角对象和摄像机对象,主角移动后,摄像机永远在跟着主角在运动,所以在Game视图中可以看到主角的运动,第三人称可以更为清晰的显示玩家在控制人物角色的效果

    角色控制器属性:

属    性

说    明

Slope Limit

坡度限制,角色控制器只能爬小于等于该值的斜坡

Step Offset

台阶高度,角色可以迈上的最大台阶高度

Skin width

皮肤厚度,皮肤厚度决定了两个碰撞器可以互

相渗入的深度。较大的皮肤厚值度会导致颤抖,

小的皮肤厚度值会导致角色被卡住。一个合理的

设定是使该值等于半径(Radius)的10%

Min Move Distance

最小移动距离,如果角色移动的距离小于该值,

那角色就不会移动。这可以避免颤抖现象。

大部分情况下该值被设为0

Center

中心,该值决定角色控制器在世界空间中的

位置,并不影响角色的行动

Radius

半径,角色控制器胶囊半径

Height

高度,角色控制器胶囊高度

脚本添加角色控制器:



     代码:

     //角色控制器对象

     private CharacterController controller=null;

     private float moveSpeed=30.0f;//角色移动的速度

     void Start () {

          //获取角色控制器对象

         
controller = GetComponent<CharacterController>();

     }

     void Update{

          if (Input.GetKeyDown(KeyCode.W)) {

              
controller.SimpleMove(Vector3.forward*moveSpeed);

          }

          if (Input.GetKeyDown(KeyCode.S)) {

              
controller.SimpleMove(Vector3.forward*-moveSpeed);

          }

          if (Input.GetKeyDown(KeyCode.A)) {

              
controller.SimpleMove(Vector3.right*-moveSpeed);

          }

          if (Input.GetKeyDown(KeyCode.D)) {

              
controller.SimpleMove(Vector3.right*moveSpeed);

          }

     移动与飞行效果:



     原理:

     角色控制器组件可以实现飞行与降落的功能,这可以通过Move()方法来实现,其中该方法的参数为飞行的角度。与SimpleMove()方法只适合用于平面中的移动(也就是x轴与z轴的移动)不同,Move()方法使用于所有方向的移动,所以它可以实现游戏对象任意角度的飞行与移动效果。

     代码:

     if (Input.GetKeyDown(KeyCode.W)) {

          Vector3 forward=transform.TransformDirection(Vector3.forward);

          controller.Move(forward*moveSpeed);

     }

      if (Input.GetKeyDown(KeyCode.S)) {

          Vector3 back=transform.TransformDirection(Vector3.forward);

          controller.Move(back*-moveSpeed);

     }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息