关于Unity3D控制物体移动的常用方法:
首先控制物体移动即控制物体的空间坐标变化。
在这里首先我们要知道Input输入事件:一般大家先想到的都是按一个按键去控制物体移动,Unity里也给我们提供了这种方法—> Input.GetKey(KeyCode.这里填想要的按键);
但是一般使用的是Input.GetAxis(“这里填控制轴的名字”)。这里的控制轴由我们自己定义,如何定义?首先我们进入Unity操作界面,点击面板最上端Edit,选择Project Setting,再选择Input Manager,在这里我们就可以对Axis控制轴进行设置。
通过Input.GetAxis()方法得到的值以float形式在-1到1之间变化。
想控制物体空间坐标的变化我们有以下三种方法:
- 利用Transform组件
以下我以Input.GetAxis()方法介绍,speed是我定义的一个float变量,以此控制移动速度。
首先是transform.Translate()方法
注意:通过第二个参数判断,我们需要相对于世界坐标移动,还是自身的坐标移动!
或者是利用transform.position这个值,来对物体进行坐标变化。
通过不断给原本物体的坐标进行求和计算,来控制物体坐标改变。这里需要注意的是:不可以只控制position的单个X或Y或Z改变,必须要一整个三维坐标改变。
这里顺便提一个transform.position = Vector3.SmoothDamp(),这个方法一般用于控制相机移动。
- 利用Rigidbody组件
严谨来说通过Rigidbody去控制物体移动的代码,要放在FixedUpdate方法中。不过放在Update中也不会报错。
以下的force是我定义的一个float变量,控制力的大小。
首先是通过AddForce()方法,给刚体某个方向一个力。
或者用velocity给刚体某个方向一个速度。
或者利用MovePosition()将刚体移动到某个想要的位置,用法和改变Position相似。
- 利用CharacterController组件
先给需要控制的物体加上CharacterController组件。
利用SimpleMove方法:
以上总结的方法不够全面,但是应该已经足够使用