public class One : MonoBehaviour {
public GameObject prefab;
private bool isMoving = false;//表示鼠标是否按下
public Vector3 targetPosition = Vector3.zero;
// Use this for initialization
void Start () {
targetPosition = transform.position;//使目标位置默认为角色位置
}
// Update is called once per frame
void Update () {
if(Input.GetMouseButtonDown(0){
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);;//把图上的一个点转换为射线 ScreenPointToRay //屏幕位置转射线 mousePosition//鼠标位置
RaycastHit hitInfo;//碰撞信息
bool isCollider = Physics.Raycast(ray, out hitInfo);//用out 参数保存射线信息,和碰撞信息
if (isCollider && hitInfo.collider.tag == "ground") {
isMoving = true;
ShowClickEffect(hitInfo.point);//hitInfo 鼠标点中的点
LookAtTarget(hitInfo.point);
}
}
if (Input .GetMouseButtonUp(0))
{
isMoving = false;
}
if (isMoving)
{
//得到要移动的目标位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
bool isCollider = Physics.Raycast(ray, out hitInfo);
if (isCollider && hitInfo.collider.tag == Tags.ground)
{
LookAtTarget(hitInfo.point);
}
}
}
//实例化出来点击效果
void ShowClickEffect(Vector3 hitPoint) {
GameObject.Instantiate(effect_click_prefab, hitPoint, Quaternion.identity);
}
//让主角朝向目标位置
void LookAtTarget(Vector3 hitPoint) {
targetPosition = hitPoint;
targetPosition = new Vector3(targetPosition.x, transform.position.y, targetPosition.z);
this.transform.LookAt(targetPosition);
}
}
角色移动
public class PlayerMove : MonoBehaviour {
public float speed = 4;
private PlayerDir dir;
private CharacterController controller;
// Use this for initialization
void Start () {
dir = this.GetComponent<PlayerDir>();
controller = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update () {
float distance = Vector3.Distance(dir.targetPosition,transform.position);//目标位置跟自身位置的一个距离 为 Distance
if (distance > 0.3f)
{
controller.SimpleMove(transform.forward * speed);
}
}
}