角色控制器

本文介绍了游戏开发中角色控制器的定义、手动添加方法及属性设置。详细解释了第一人称、第二人称视角的区别与控制原理。并提供了角色控制器的脚本添加方式,以及如何实现飞行与降落功能。最后,通过示例代码展示了角色移动与飞行的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

色控制器


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


    手动添加角色控制器:给游戏对象添加角色控制器,在选中对象后使用菜单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);

     }

 

 

更多精彩内容请到:http://www.gopedu.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值