Unity中利用射线检测判断当前点击的物体

void Update()
    {
        //返回一条从相机到鼠标位置的射线
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        //Ray ray01 = new Ray(Camera.main.transform.position, Vector3.forward);
        RaycastHit hit;
        //判断是否碰撞到物体
        bool isCollider = Physics.Raycast(ray, out hit);
        //bool isCollider01= Physics.Raycast(Camera.main.transform.position, Vector3.forward, 
        //    10, LayerMask.GetMask("UI", "Enemy", "Player"));
        if(isCollider)
        {
            print(hit.collider.gameObject.name);
        }       
    }

 

### Unity2D 物体碰撞检测方法 在Unity2D环境,为了实现物体之间的碰撞检测,需确保待测对象具备`Rigidbody2D`和`Collider2D`组件。前者赋予游戏物件物理特性,后者定义其外形轮廓用于交互判定[^1]。 对于希望响应传统意义上的撞击事件而非触发器行为的对象而言,在发生接触时能够依据预设逻辑作出反应——比如反弹、停止等动作;而这一切的基础在于正确配置上述提到的两个核心要素,并且不启用`isTrigger`标志位以便让内置物理模拟机制生效。 当一切准备就绪后,开发者可以通过继承自MonoBehaviour类的方法来捕捉并处理这些瞬间: - `OnCollisionEnter2D(Collision2D)`:每当新一次碰触开始时调用; - `OnCollisionStay2D(Collision2D)` :只要持续保持接触状态期间不断重复执行; - `OnCollisionExit2D(Collision2D)` : 当两物分离之际被激活。 下面给出一段简单的C#脚本实例,展示了如何利用`OnCollisionEnter2D()`函数监听特定名称的游戏实体间的相遇情况: ```csharp void OnCollisionEnter2D(Collision2D collision){ if (collision.gameObject.name == "zhong_dot"){ Debug.Log("开始碰撞"); } } ``` 这段代码会在名为"zhong_dot"的目标进入当前角色的影响范围之内时打印日志消息到控制台窗口去[^2]。 另外一种常见的应用场景涉及到地面探测功能的设计思路,则可能涉及射线投射技术的应用。通过向下方发射不可见光线并与场景内其他元素相交测试的方式确认玩家是否处于站立姿态之上。这通常配合着Gizmo工具辅助开发人员直观感受算法运作原理的同时也便于调试工作开展: ```csharp private void OnDrawGizmos(){ Gizmos.DrawLine( groundCheck.position, new Vector3(groundCheck.position.x, groundCheck.position.y - groundCheckDistance) ); } void Update(){ isGrounded = Physics2D.Raycast( groundCheck.position, Vector2.down, groundCheckDistance, whatIsGround ); } ``` 此段落的`Physics2D.Raycast(...)`负责实际执行从指定起点沿垂直方向向下延伸一定长度距离内的障碍物扫描操作,并返回布尔类型的查询结果供后续业务流程判断使用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值