怎么让鼠标检测点击到的物体并出发事件

用射线检测,以下是代码,挂载到摄像机上并附上物体就可以了运行实现了

using UnityEngine;
using System.Collections;
 
public class aaa : MonoBehaviour {
    public Camera camera1;
    public GameObject cube1;
    public GameObject cube2;
    public GameObject cube3;
    RaycastHit hit=new RaycastHit();
    // Use this for initialization
    void Start () {
     
    }
     
    // Update is called once per frame
    void Update () {
        Ray ray=camera1.ScreenPointToRay(Input.mousePosition);
        Physics.Raycast(ray,out hit,100);
        if(Input.GetMouseButtonDown(0)){(
            if(hit.transform!=null){
            if(hit.collider.name=="Cube1"){
                cube3.transform.Translate(cube1.transform.position.x-cube3.transform.position.x,0,cube1.transform.position.z-cube3.transform.position.z);
                 
                 
            }
            if(hit.collider.name=="Cube2"){
                cube3.transform.Translate(cube2.transform.position.x-cube3.transform.position.x,0,cube2.transform.position.z-cube3.transform.position.z);
                 
            }
        }
        }
         
    }
}



### Unity 中实现射线检测以确定点击物体 在 Unity 游戏开中,射线检测是一种常见的操作方法,用于判断玩家是否点击了特定的游戏对象。下面是一个详细的说明和代码示例来展示如何利用 `Physics.Raycast` 函数执行这一功能。 #### 创建射线射 为了创建一条从摄像机出发经过鼠标的屏幕坐标位置指向场景深处的射线,可以调用 `Camera.ScreenPointToRay()` 方法[^3]: ```csharp Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); ``` 这段代码会基于当前鼠标的位置生成一条射线,其中包含了起始点和方向向量。 #### 执行射线投射 接下来定义一个变量存储可能被命中的碰撞信息,使用 `Physics.Raycast` 来测试这条射线是否会碰到任何带有 Collider 组件的对象。如果确实生了接触,则返回 true 填充命中数据到指定的输出参数[^2]: ```csharp RaycastHit hit; if (Physics.Raycast(ray, out hit)) { // 处理当有物体被击中时的情况 } ``` 这 `out hit` 参数用来接收有关撞击的具体细节,比如所撞上的 GameObject 的名称、变换矩阵等属性[^4]。 #### 访问被选中的物体及其特性 一旦确认存在有效的碰撞事件,就可以访问 `hit.collider.gameObject` 或者直接通过 `hit.transform` 获取更多关于目标的信息。例如打印出被点击物体的名字: ```csharp Debug.Log("当前鼠标点击物体的名字是————" + hit.collider.name); ``` 完整的脚本如下所示: ```csharp using UnityEngine; public class ClickableObject : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) // 左键按下触 { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { Debug.Log("当前鼠标点击物体的名字是————" + hit.collider.name); // 可在此处添加额外逻辑处理,如交互响应等... } } } } ``` 此段程序会在每次左键单击时尝试找到最近的一个可触及的目标,记录下它的名字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值