float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
1、方法1 transform.Translate 平移
transform.Translate(new Vector3(h,0,v)*Time.deltaTime*3, Space.World);
2、方法2 Vector3.Lerp 插值 /Vector3.MoveTowards
float speed = Time.deltaTime * 30;
Vector3 TargetPos;
TargetPos = new Vector3(transform.position.x + h * speed, transform.position.y, transform.position.z + v * speed);
transform.position = Vector3.Lerp(this.transform.position, TargetPos, 0.1f);
3、方法3 Vector3.SmoothDamp 平滑阻尼
float speed = Time.deltaTime * 30;
Vector3 TargetPos;
TargetPos = new Vector3(transform.position.x + h * speed, transform.position.y, transform.position.z + v * speed);
Vector3 vec = Vector3.zero;
transform.position = Vector3.SmoothDamp(this.transform.position, TargetPos, ref vec, 0.02f);
4、方法4 CharacterController.SimpleMove 模拟简单移动 自动应用重力
private float Move_Speed = 6;
private float Rotate_Speed = 25;
private CharacterController player;
void Start()
{
player = transform.GetComponent<CharacterController>();
}
void Update()
{
Vector3 forword = transform.TransformDirection(Vector3.forward);
player.SimpleMove(forword * v * Move_Speed);
transform.Rotate(new Vector3(0, h * Time.deltaTime * Rotate_Speed, 0));
}
5、方法5 CharacterController.Move 模拟复杂移动 代码模拟重力
private Vector3 motion = Vector3.zero;
private float Move_Speed = 6;
private float Jump_Speed = 8;
private float Gravity = 20;
private CharacterController player;
void Start()
{
player = transform.GetComponent<CharacterController>();
}
void Update()
{
if (player.isGrounded)
{
motion = new Vector3(h, 0, v);
motion *= Move_Speed;
if (Input.GetKeyDown(KeyCode.Space))
{
motion.y = Jump_Speed;
}
}
motion.y -= Gravity * Time.deltaTime;
player.Move(motion * Time.deltaTime);
}
6、方法6 Rigidbody.AddForce 模拟物体在外力的作用下的运动状态
Rig.AddForce(new Vector3(h, 0, v) * 5);
7、方法7 Rigidbody.velocity 模拟物体以某个速度向某个方向移动
Rig.velocity = Vector3.up * 3;