常用脚本(十五)Unity_射线_物体跟随鼠标点击位置移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RayTest : MonoBehaviour
{
    private Vector3 target;
    bool b = false;
	void Start ()
    {
        
    }
	
	void Update ()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            //射线检测
            //返回bool值,检测射线与物体是否有交点
            //bool res = Physics.Raycast(ray, out hit);
            //射线检测 第二种
            //  <<  左移运算符    也有 >> 右移运算符      2 << 1
            //  00000001    00000100
            //左移多少位就是乘以2的几次方
            // >> 右移,就是除以2的几次方
            //返回bool值,检测射线与物体是否有交点,检测范围500,只检测第八层(地面那层,不检测墙)
            bool res = Physics.Raycast(ray, out hit,500f,1 << 8);
            // 或 bool res = Physics.Raycast(ray, out hit,500f,1 << LayerMask.NameToLayer("Ground"));
            //想检测两层的话:bool res = Physics.Raycast(ray, out hit,500f,1 << 8|1 << 9);
            // >> 右移 bool res = Physics.Raycast(ray, out hit,500f,~(1 << 8));
            if (res == true)
            {
                target = hit.point;
                target.y = transform.position.y;
                b = true;
            }
        }
        //如果射线交点距离物体本身的距离大于0.3(再移动)
        if (Vector3.Distance(target, transform.position) > 0.3f && b)
        {
            //得到向量
            Vector3 dir = (target - transform.position).normalized;
            //转向这个向量
            transform.rotation = Quaternion.LookRotation(dir);
            //前进
            transform.Translate(Vector3.forward * 2 * Time.deltaTime);
        }
    }
}

 

你可能感兴趣的:(常用脚本(十五)Unity_射线_物体跟随鼠标点击位置移动)