您的位置:首页 > 移动开发 > Unity3D

Unity实现点击地面控制人物移动

2017-04-02 12:41 931 查看

首先声明,博主使用的是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;//用来执行移动的脚本

// Use this for initialization
void Start () {
targetPosition = transform.position;//初始化目标位置
move = GetComponent<PlayerMove> ();//获取人物的移动脚本
}

// Update is called once per frame
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) {//f发生碰撞,并且是地面
isMoving = true;
LookAtTarget (hit.po
4000
int);//使物体朝向目标点
}
}
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;//角色控制器
// Use this for initialization
void Start () {
dir = GetComponent<PlayerDirection> ();
controller = GetComponent<CharacterController> ();
}

// Update is called once per frame
void Update () {
//获得与目标点的距离
float distance = Vector3.Distance (dir.targetPosition, transform.position);
//距目标点的距离大于0.2才移动
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);//移动
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 人物 移动