美文网首页
Unity 之 plane.Raycast 射线检测

Unity 之 plane.Raycast 射线检测

作者: su9257_海澜 | 来源:发表于2018-07-24 11:41 被阅读468次
原来一直用Physics.Raycast或者对应的2D射线检测,今天无意中发一个有趣射线检测,话不多说直接上示例

void Update()

LateUpdate()

示例代码

using UnityEngine;
public class PlaneRayExample : MonoBehaviour
{
    //需要移动的cube的预制
    public GameObject m_Cube;
    //距离射线原点的距离
    public float m_DistanceZ = 10.0f;

    Plane m_Plane;
    Vector3 m_DistanceFromCamera;

    void Start()
    {
        //这是离Plane放置的距离有多远
        m_DistanceFromCamera = new Vector3(Camera.main.transform.position.x, Camera.main.transform.position.y, Camera.main.transform.position.z + m_DistanceZ);
        //在距离m_DistanceFromCamera处,创建一个方向为forward的Plane
        m_Plane = new Plane(Vector3.forward, m_DistanceFromCamera);
    }

    void Update()
    {

        if (Input.GetMouseButton(0))
        {

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            float enter = 0.0f;

            if (m_Plane.Raycast(ray, out enter))
            {
                Debug.DrawRay(ray.origin, ray.direction * enter, Color.green);
                //得到点击的点
                Vector3 hitPoint = ray.GetPoint(enter);
                //将你的方块游戏对象移动到你点击的地方
                m_Cube.transform.position = hitPoint;
            }
            else
            {
                Debug.Log($"enter{enter}");
                Debug.DrawRay(ray.origin, ray.direction * 10, Color.red);
            }
        }
    }

    Plane plane = new Plane(Vector3.up, Vector3.zero);

    private void LateUpdate()
    {
        if (Input.GetMouseButton(0))
        {
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            float ent = 100.0f;
            if (plane.Raycast(ray, out ent))
            {
                Debug.Log("Plane Raycast hit at distance: " + ent);
                var hitPoint = ray.GetPoint(ent);

                var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
                go.transform.position = hitPoint;
                Debug.DrawRay(ray.origin, ray.direction * ent, Color.green);
            }
            else
            {
                Debug.DrawRay(ray.origin, ray.direction * 10, Color.red);
            }

        }
    }

}

相关文章

  • API

    Plane.Raycast Plane 的介绍参考例子 Unity 之 plane.Raycast 射线检测 拷贝...

  • Unity 之 plane.Raycast 射线检测

    原来一直用Physics.Raycast或者对应的2D射线检测,今天无意中发一个有趣射线检测,话不多说直接上示例 ...

  • 射线检测-unity

    与最近物体碰撞取得位置: 与指定层的物体碰撞: 另外collider相当于游戏物体了

  • Unity射线检测

    Physics.RayCast方法发射射线,射线碰撞的信息存在RaycastHit中。 Camera.main.S...

  • Unity Physics.Raycast

    参考Unity - 射线检测[https://www.cnblogs.com/SouthBegonia/p/117...

  • Unity 基础 - 射线

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

  • Unity_拖拽|全方位拖拽物体攻略

    Unity中UGUI控件和3D物体拖拽实现 基本原理 Unity拖拽的基本原理:射线检测,鼠标位置增量转换为统一空...

  • unity 射线检测与对象池

    真正学懂一个知识的时候是要传授给别人这个知识的时候让对方也能轻而易举的理解。 遇到需要频繁加载和销毁的游戏对象(例...

  • 今晚8点直播 | Unity中射线检测详解

    洪流学堂,让你快人几步。 今晚8点,带你搞清楚Unity中的射线检测。直播地点:QQ群 492325637 如果无...

  • Unity 射线

    1,摄像机射线: 2, 物体发射射线: 3, 点击发出射线:

网友评论

      本文标题:Unity 之 plane.Raycast 射线检测

      本文链接:https://www.haomeiwen.com/subject/qeyemftx.html