Unity的学习笔记(射线检测)

首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚:

 

接下来是自己使用这个进行测试

 

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

//基本语法:public Ray ScreenPointToRay(Vector3 position);
//其中参数position为屏幕位置参考点。
//功能说明:此方法的作用是可以从Camera的近视口nearClip向前发射一条射线到屏幕上的position点。
//参考点position用实际像素值的方式来决定Ray到屏幕的位置。
//参考点position的X轴分量或Y轴分量从0增长到最大值时,Ray从屏幕一边移动到另一边。
//当Ray未能碰撞到物体时hit.point返回值为Vector3(0,0,0)。参考点position的Z轴分量值无效。



public class PlayerMouseHit : MonoBehaviour {
    Ray camerRay;                       //声明一个射线
    Vector3 mousePos = new Vector3();   //记录将鼠标(因为屏幕坐标没有z,所以下面是将z设为0)
    RaycastHit cameraHit;               //用于记录射线碰撞到的物体

    void Start()
    {

    }
    void Update()
    {
        

        if (Input.GetMouseButtonDown(0))  //思路:当点击鼠标左键的时候,以鼠标在摄像机屏幕位置发射一个射线进行检测
        {
            //这里将屏幕坐标的鼠标位置存入一个vector3里面
            mousePos.x = Input.mousePosition.x;
            mousePos.y = Input.mousePosition.y;
            mousePos.z = 0;

            //Ray ray=Camera.main.ScreenPointToRay(Vector3 Pos):返回一条射线由摄像机近裁面发射经过Pos的射线。
            camerRay = Camera.main.ScreenPointToRay(mousePos);

            //public static bool Raycast(Ray ray, RaycastHit hitInfo, float distance, int layerMask);
            //物理检测射线,out一个RaycastHit类型的 hitInfo 信息,float distance是射线长度,int layerMask需要转换二进制,所以有如下操作
            if (Physics.Raycast(camerRay, out cameraHit, 10, 1 << LayerMask.NameToLayer("Monster")))
            {
               GameObject go = cameraHit.transform.gameObject; //这是检测到的物体
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/takanashi/p/11028786.html

Unity Input System 是 Unity 的一个新输入系统,它提供了一种更现代化和灵活的方式来处理用户输入。在 Unity Input System 中射线检测是一种常见的操作,它用于检测游戏中的物体是否被点击或触摸。以下是使用 Unity Input System 进行射线检测的步骤: 1. 添加 Input System Package。在 Unity 中选择 Window -> Package Manager,搜索并安装 Input System Package。 2. 创建一个 Input Action。在 Unity 中选择 Assets -> Create -> Input Actions,创建一个新的 Input Action。 3. 添加一个按键或触摸手势。在 Input Action 中添加一个按键或触摸手势,这将触发射线检测。 4. 创建一个射线。在场景中创建一个射线,这将是我们的检测器。 5. 创建一个脚本。创建一个新的脚本并将其添加到场景中的物体上。 6. 编写脚本。在脚本中编写代码来执行射线检测。例如: ``` using UnityEngine; using UnityEngine.InputSystem; public class RaycastInput : MonoBehaviour { public Camera mainCamera; public LayerMask layerMask; private void OnClick(InputAction.CallbackContext context) { Ray ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue()); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask)) { // 物体被点击 } } } ``` 在该脚本中,我们首先获取鼠标位置并将其转换为射线。然后使用 Physics.Raycast 函数执行射线检测,如果物体被点击,则在该函数中执行相应的操作。 7. 将 Input Action 与脚本绑定。在 Input Action 中选择要绑定的脚本和函数。 现在,当用户点击或触摸屏幕时,射线将从摄像机位置发射,并检测场景中的物体是否被点击。如果物体被点击,则执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值