文章目录

Unity 中虚拟射线能够检测所碰撞到物体,使用 Physics 类的 Raycast 方法实现色心啊碰撞检测功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour {

//在场景中鼠标点击地面后,角色可以移动到目标位置

// Use this for initialization
void Start () {

}

private Vector3 target; //目标位置
private bool isOver = true; // 移动是否结束
public float speed;//角色移动的速度

// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0)) {
print("----");
//1.获取鼠标点击时的目标位置
// 使用射线实现
// 创建射线
// Ray ray = new Ray();
//获取当前场景的主摄相机,从摄像机发射出一条鼠标当前位置的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// 发射射线
RaycastHit hitInfo = new RaycastHit();

if (Physics.Raycast(ray, out hitInfo)) {
// 获取碰撞点的位置
if (hitInfo.collider.name == "Plane") {
target = hitInfo.point;
target.y = 0.5f;
isOver = false;
}
}
//2.让角色移动到目标位置
MoveTo(target);
}
}

// 让角色移动目标位置
private void MoveTo (Vector3 tar) {
if (!isOver) {
Vector3 v1 = target - transform.position;
transform.position += v1.normalized * speed * Time.deltaTime;
if (Vector3.Distance(tar, transform.position) <= 0.1f) {
isOver = true;
transform.position = tar;
}
}
}

}
文章目录