Unity 基础 - 射线

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

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;
            }
        }   
    } 
    
}

你可能感兴趣的:(Unity 基础 - 射线)