You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity射线检测:如何添加代码打印准星指向对象的名称

实现打印准星指向对象名称的方法

嘿,你的注视高亮脚本已经写得很扎实了!要添加打印选中对象名称的功能其实很简单,咱们只需要在SelectionManager里加几行代码,还能顺便优化一下避免重复打印刷屏~

步骤1:添加记录上一次选中对象的变量

在SelectionManager类里新增一个私有变量,用来记录上一帧选中的对象,这样就能判断是否切换了选中目标:

public class SelectionManager : MonoBehaviour 
{ 
    [SerializeField] private string selectableTag = "Selectable"; 
    private ISelectionResponse _selectionResponse; 
    private Transform _selection; 
    private Transform _lastSelection; // 新增:记录上一次选中的对象,用于去重判断

    // 其余原有代码...
}

步骤2:在Update中添加打印逻辑

修改Update方法,当检测到新的选中对象时打印名称,同时更新记录变量:

private void Update() 
{ 
    if (_selection != null) 
        _selectionResponse.OnDeselect(_selection); 

    var ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
    _selection = null; 

    if (Physics.Raycast(ray, out var hit)) 
    { 
        var selection = hit.transform; 
        if (selection.CompareTag(selectableTag) || selection.CompareTag("Stool_square1")) 
        { 
            _selection = selection; 
        } 
    } 

    if (_selection != null) 
    { 
        _selectionResponse.OnSelect(_selection); 
        // 新增:仅当选中新对象时打印,避免重复刷屏
        if (_selection != _lastSelection)
        {
            Debug.Log($"当前选中对象:{_selection.name}");
            _lastSelection = _selection;
        }
    }
    else
    {
        // 新增:取消选中时重置记录变量
        _lastSelection = null;
    }
}

额外说明

  • 加_lastSelection的判断是为了避免每一帧重复打印同一个对象名称,毕竟Update每帧都会执行,不加判断的话控制台很快会被刷屏。
  • 如果你的需求就是要每帧都打印(比如做实时监控),可以去掉去重逻辑,直接在_selection != null代码块里加Debug.Log(_selection.name);。

这样修改后,当准星指向带有Selectable或Stool_square1标签的对象时,控制台就会输出对应的对象名称啦~

内容的提问来源于stack exchange,提问作者Michał Jankowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:32:47