关于Unity3D控制物体移动的常用方法:

首先控制物体移动即控制物体的空间坐标变化。

在这里首先我们要知道Input输入事件:一般大家先想到的都是按一个按键去控制物体移动,Unity里也给我们提供了这种方法—> Input.GetKey(KeyCode.这里填想要的按键);

但是一般使用的是Input.GetAxis(“这里填控制轴的名字”)。这里的控制轴由我们自己定义,如何定义?首先我们进入Unity操作界面,点击面板最上端Edit,选择Project Setting,再选择Input Manager,在这里我们就可以对Axis控制轴进行设置。

unity3d charactercontroller wasd控制人物移动和朝向 unity3d控制物体移动_unity

通过Input.GetAxis()方法得到的值以float形式在-1到1之间变化。

想控制物体空间坐标的变化我们有以下三种方法:

  • 利用Transform组件

以下我以Input.GetAxis()方法介绍,speed是我定义的一个float变量,以此控制移动速度。

首先是transform.Translate()方法

unity3d charactercontroller wasd控制人物移动和朝向 unity3d控制物体移动_世界坐标_02

注意:通过第二个参数判断,我们需要相对于世界坐标移动,还是自身的坐标移动!

或者是利用transform.position这个值,来对物体进行坐标变化。

unity3d charactercontroller wasd控制人物移动和朝向 unity3d控制物体移动_ci_03

通过不断给原本物体的坐标进行求和计算,来控制物体坐标改变。这里需要注意的是:不可以只控制position的单个X或Y或Z改变,必须要一整个三维坐标改变。

这里顺便提一个transform.position = Vector3.SmoothDamp(),这个方法一般用于控制相机移动。

  • 利用Rigidbody组件

严谨来说通过Rigidbody去控制物体移动的代码,要放在FixedUpdate方法中。不过放在Update中也不会报错。

以下的force是我定义的一个float变量,控制力的大小。

首先是通过AddForce()方法,给刚体某个方向一个力。

unity3d charactercontroller wasd控制人物移动和朝向 unity3d控制物体移动_ci_04

 

或者用velocity给刚体某个方向一个速度。

unity3d charactercontroller wasd控制人物移动和朝向 unity3d控制物体移动_unity_05

或者利用MovePosition()将刚体移动到某个想要的位置,用法和改变Position相似。

unity3d charactercontroller wasd控制人物移动和朝向 unity3d控制物体移动_unity_06

  • 利用CharacterController组件

先给需要控制的物体加上CharacterController组件。

利用SimpleMove方法:

unity3d charactercontroller wasd控制人物移动和朝向 unity3d控制物体移动_世界坐标_07

以上总结的方法不够全面,但是应该已经足够使用