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
相关产品推荐
相关产品推荐

