事件函数执行顺序:

1. 移动


1 public class Test : MonoBehaviour 2 { 3 public float speed; 4 5 void Update() 6 { 7 float hor = Input.GetAxis("Horizontal"); 8 float ver = Input.GetAxis("Vertical"); 9 transform.Translate(new Vector3(hor, 0, ver) * Time.deltaTime * speed); 10 11 //按世界坐标系移动 12 if (Input.GetKey(KeyCode.W)) 13 transform.position += Vector3.forward * Time.deltaTime * speed; 14 if (Input.GetKey(KeyCode.S)) 15 transform.position += Vector3.back * Time.deltaTime * speed; 16 if (Input.GetKey(KeyCode.A)) 17 transform.position += Vector3.left * Time.deltaTime * speed; 18 if (Input.GetKey(KeyCode.D)) 19 transform.position += Vector3.right * Time.deltaTime * speed; 20 21 22 if (Input.GetKey(KeyCode.W)) 23 transform.Translate(Vector3.forward * Time.deltaTime * speed, Space.World); 24 if (Input.GetKey(KeyCode.S)) 25 transform.Translate(Vector3.back * Time.deltaTime * speed, Space.World); 26 if (Input.GetKey(KeyCode.A)) 27 transform.Translate(Vector3.left * Time.deltaTime * speed, Space.World); 28 if (Input.GetKey(KeyCode.D)) 29 transform.Translate(Vector3.right * Time.deltaTime * speed, Space.World); 30 31 32 //按自身坐标系移动 33 if (Input.GetKey(KeyCode.W)) 34 transform.position += transform.forward * Time.deltaTime * speed; 35 if (Input.GetKey(KeyCode.S)) 36 transform.position += -transform.forward * Time.deltaTime * speed; 37 if (Input.GetKey(KeyCode.A)) 38 transform.position += -transform.right * Time.deltaTime * speed; 39 if (Input.GetKey(KeyCode.D)) 40 transform.position += transform.right * Time.deltaTime * speed; 41 42 //默认Space.Self,按自身坐标系移动 43 if (Input.GetKey(KeyCode.W)) 44 transform.Translate(Vector3.forward * Time.deltaTime * speed); 45 if (Input.GetKey(KeyCode.S)) 46 transform.Translate(Vector3.back * Time.deltaTime * speed); 47 if (Input.GetKey(KeyCode.A)) 48 transform.Translate(Vector3.left * Time.deltaTime * speed); 49 if (Input.GetKey(KeyCode.D)) 50 transform.Translate(Vector3.right * Time.deltaTime * speed); 51 } 52 }


1 public class Test : MonoBehaviour 2 { 3 public float force; 4 Rigidbody rd; 5 private void Start() 6 { 7 rd = GetComponent<Rigidbody>(); 8 } 9 10 void Update() 11 { 12 float hor = Input.GetAxis("Horizontal"); 13 float ver = Input.GetAxis("Vertical"); 14 Vector3 direction = new Vector3(hor, 0, ver); 15 rd.AddForce(direction * force); 16 rd.velocity = direction * force; 17 rd.MovePosition(transform.position + direction); 18 } 19 }


1 public class Test : MonoBehaviour 2 { 3 public float speed; 4 CharacterController cc; 5 private void Start() 6 { 7 cc = GetComponent<CharacterController>(); 8 } 9 void Update() 10 { 11 float hor = Input.GetAxis("Horizontal"); 12 float ver = Input.GetAxis("Vertical"); 13 cc.Move(new Vector3(hor, 0, ver) * Time.deltaTime * speed); //不受重力影响,返回值是枚举值表示碰撞信息 14 cc.SimpleMove(new Vector3(hor, 0, ver) * Time.deltaTime * speed); //受重力影响,返回值是布尔值表示角色是否着地 15 } 16 }
2.看向目标并向目标移动(插值运算)


1 public class Test : MonoBehaviour 2 { 3 public float speed; 4 private GameObject target; 5 private void Start() 6 { 7 target = GameObject.FindWithTag("Monster"); 8 } 9 void Update() 10 { 11 //1.看向目标 12 transform.LookAt(target.transform); 13 //2.向目标移动 14 //插值运算 返回值=to*t+(1-t)*from 会一直运算下去,要设置一个结束点 15 float dis = Vector3.Distance(transform.position, target.transform.position); 16 if (dis > 1) 17 transform.position = Vector3.Lerp(transform.position, target.transform.position, Time.deltaTime*speed); 18 } 19 }
















