Unity 射线检测移动物体

 在第三人称游戏中,鼠标点击屏幕,角色移动到指定地点是一个重要的功能。

 这一般是通过射线检测来实现

 原理是:首先从屏幕上的主摄像机发送一条射线,击中地面后,把角色移动到相应的位置

 代码实现如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class XXXXXXXX : MonoBehaviour {
    //设置射线在Plane上的目标点target
    private Vector3 target;
    // Use this for initialization
    void Start () {
        //初始化目标点与自身的点重合
        target = transform.position;
    }
    
    // Update is called once per frame
    void Update () {
        //当点击鼠标左键的时候创建一条射线
        if(Input.GetMouseButton(0))
        {
            //定义射线
            Ray m_ray;
            //保存碰撞信息
            RaycastHit m_hit;
            //创建一条从摄像机发出经过屏幕上的鼠标点的一条射线
            m_ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //判断射线是否碰撞到物体
            if(Physics.Raycast(m_ray,out m_hit))
            {
                //判断碰撞到的是不是Plane
                if(m_hit.transform.name=="Plane")
                {
                    //把目标点target设置为m_hit.point,//并使物体要处于Plane上所以Y轴为0.5f
                    target = new Vector3(m_hit.point.x, 0.5f, m_hit.point.z);
 
                }
            }
        }
        Move(target);
    }
    //移动方法
    void Move(Vector3 target)
    {
        if (Vector3.Distance(transform.position, target) > 0.1f)
        {
            transform.position = Vector3.Lerp(transform.position, target,Time.deltaTime);
        }
        //如果物体的位置和目标点的位置距离小于 0.1时直接等于目标点
        else
            transform.position = target;
    }
}

 

posted @ 2021-02-05 08:58  白兔兔秃~  阅读(445)  评论(0)    收藏  举报
/* */