首先声明,博主使用的是Unity5.3.2(64)
最近几篇关于Unity的博客是博主学习了一个RPG游戏后把一部分功能摘出来做的一个总结,这篇是关于人物移动的。
废话不多说:
using UnityEngine;
using System.Collections;
public class PlayerDirection : MonoBehaviour {
public Vector3 targetPosition = Vector3.zero;
private bool isMoving = false;
private PlayerMove move;
void Start () {
targetPosition = transform.position;
move = GetComponent<PlayerMove> ();
}
void Update () {
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
bool isCollider = Physics.Raycast (ray,out hit);
if (isCollider && hit.collider.tag == Tags.ground) {
isMoving = true;
LookAtTarget (hit.point);
}
}
if (Input.GetMouseButtonUp (0)) {
isMoving = false;
}
if (isMoving) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
bool isCollider = Physics.Raycast (ray, out hit);
if (isCollider && hit.collider.tag == Tags.ground) {
LookAtTarget (hit.point);
}
} else {
if (move.isMove) {
LookAtTarget (targetPosition);
}
}
}
void LookAtTarget(Vector3 hitPoint){
targetPosition = hitPoint;
targetPosition = new Vector3(targetPosition.x,transform.position.y,targetPosition.z);
this.transform.LookAt (targetPosition);
}
}
using UnityEngine;
using System.Collections;
public class PlayerMove : MonoBehaviour {
public float speed = 4;
public bool isMove = false;
private PlayerDirection dir;
private CharacterController controller;
void Start () {
dir = GetComponent<PlayerDirection> ();
controller = GetComponent<CharacterController> ();
}
void Update () {
float distance = Vector3.Distance (dir.targetPosition, transform.position);
if (distance > 0.2f) {
isMove = true;
controller.SimpleMove (transform.forward * speed);
} else {
isMove = false;
}
}
}
public void SimpleMove(Vector3 targetPos){
transform.LookAt (targetPos);
controller.SimpleMove (transform.forward * speed);
}
}