1 using UnityEngine; 2 using System.Collections; 3 4 /* 5 *物体移动到鼠标点击位置 6 */ 7 8 public class PlayerMove : MonoBehaviour { 9 10 public float speed = 5; 11 private PlayDir dir; 12 private CubeCS cubeCS; 13 14 void Awake(){ 15 dir = this.GetComponent<PlayDir> (); 16 cubeCS = this.GetComponent<CubeCS> (); 17 } 18 19 // Use this for initialization 20 void Start () { 21 22 } 23 24 // Update is called once per frame 25 void FixedUpdate () 26 { 27 //获取当前物体到目标物体的距离 28 float distance = Vector3.Distance (dir.targetPosition, transform.position); 29 30 //判断是否超出距离 31 if (distance > 0.1f) { 32 cubeCS.rb.velocity = transform.forward * speed * distance; 33 } else{ 34 cubeCS.rb.velocity = transform.forward * 0; 35 } 36 } 37 }
1 using System.Collections; 2 3 /* 4 * 根据鼠标点击位置改变物体朝向 5 */ 6 public class PlayDir : MonoBehaviour { 7 8 public GameObject effect; 9 private bool isMoving = false; //鼠标左键状态 10 public Vector3 targetPosition; 11 12 void Awake(){ 13 //初始化目标位置为当前物体的位置 14 targetPosition = this.transform.position; 15 } 16 17 // Update is called once per frame 18 void Update () { 19 //判断鼠标左键是否按下 20 if (Input.GetMouseButtonDown(0)) { 21 //获取由主摄像机位置到鼠标点击位置的一条射线 22 Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 23 RaycastHit hitInfo; 24 bool isCollider = Physics.Raycast (ray, out hitInfo); 25 //判断射线是否成功发射且是否触发目标物体 26 if (isCollider && hitInfo.collider.tag == Tags.ground) { 27 //参数为目标物体的位置信息 28 ShowClickEffect (hitInfo.point); 29 isMoving = true; 30 LookAtTarget (hitInfo.point); 31 } 32 } 33 34 //判断鼠标左键是否抬起 35 if (Input.GetMouseButtonUp(0)) { 36 isMoving = false; 37 } 38 39 if (isMoving) { 40 //获取由主摄像机位置到鼠标点击位置的一条射线 41 Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 42 RaycastHit hitInfo; 43 bool isCollider = Physics.Raycast (ray, out hitInfo); 44 //判断射线是否成功发射且是否触发目标物体 45 if (isCollider && hitInfo.collider.tag == Tags.ground) { 46 LookAtTarget (hitInfo.point); 47 } 48 } 49 } 50 51 void ShowClickEffect(Vector3 hitPoint){ 52 hitPoint = new Vector3 (hitPoint.x, hitPoint.y + 0.3f, hitPoint.z); 53 GameObject.Instantiate (effect, hitPoint, Quaternion.identity); 54 } 55 56 void LookAtTarget(Vector3 hitPoint){ 57 //获取触发目标物体的位置信息 58 targetPosition = hitPoint; 59 //将目标位置的y轴修改为当前物体的y轴 60 targetPosition = new Vector3 (targetPosition.x, transform.position.y, targetPosition.z); 61 62 //当前物体朝向目标位置 63 this.transform.LookAt (targetPosition); 64 } 65 }
1 using UnityEngine; 2 using System.Collections; 3 4 /* 5 *控制刚体的移动与旋转 6 */ 7 8 public class CubeCS : MonoBehaviour { 9 10 /* 11 * 在场景中创建一个Cube刚体 12 * 将刚体的位置和角度进行坐标约束,位置约束Y,方向约束x z 13 */ 14 public Rigidbody rb; 15 public float speed = 5; 16 public float angularSpeed = 3; 17 // Use this for initialization 18 19 void Awake(){ 20 rb = this.GetComponent<Rigidbody> (); 21 } 22 23 /* 24 void FixedUpdate(){ 25 Move (); 26 } 27 28 void Move(){ 29 //获取垂直数值 30 float v = Input.GetAxis ("Vertical"); 31 //设置刚体速度为 自身前方向*垂直数值*速度 控制刚体移动 32 rb.velocity = this.transform.forward * v * speed; 33 34 //获取水平数值 35 float h = Input.GetAxis ("Horizontal"); 36 //设置刚体角速度为 自身上方向*垂直数值*速度 控制刚体旋转 37 rb.angularVelocity = this.transform.up * h * angularSpeed; 38 } 39 */ 40 }