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

解决Physics.Raycast添加Node至List时的类型转换错误问题

Unity Raycast节点邻居系统:解决类型不匹配无法添加节点的问题

错误信息

第24行代码_neighborsNodes.Add(_hitRigth.collider.gameObject);触发报错:

Argument 'number' cannot convert from UnityEngine.GameObject to Node

问题代码

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

public class Node : MonoBehaviour
{
    public float sphereRadius;

    [SerializeField] List<Node> _neighborsNodes = new List<Node>();
    [SerializeField] LayerMask _nodeMask;

    RaycastHit _hitRigth;
    RaycastHit _hitLeft;
    RaycastHit _hitUp;
    RaycastHit _hitDown;

    private void Update()
    {
        if(Physics.Raycast(transform.position, transform.right, out _hitRigth, _nodeMask))
        {
            Debug.Log(_hitRigth.transform.name);

            if (_hitRigth.collider.tag == "Node")
                _neighborsNodes.Add(_hitRigth.collider.gameObject);
        }
    }

    private void OnDrawGizmos()
    {
        if (_neighborsNodes.Count == 0)
        {
            Gizmos.color = Color.yellow;
        }
    }
}

核心原因

_neighborsNodes是**List<Node>类型**,只能存储Node组件实例,但你传入的是GameObject对象,两者类型不兼容,导致转换失败。

解决方案

  1. 修正类型匹配问题
    从命中的GameObject上获取Node组件,替换原第24行代码:

    _neighborsNodes.Add(_hitRigth.collider.GetComponent<Node>());
    
  2. 优化代码稳定性
    增加空值判断和重复添加校验,避免空引用错误和重复节点:

    if (_hitRigth.collider.CompareTag("Node"))
    {
        Node neighborNode = _hitRigth.collider.GetComponent<Node>();
        // 确保组件存在且未添加过
        if (neighborNode != null && !_neighborsNodes.Contains(neighborNode))
        {
            _neighborsNodes.Add(neighborNode);
        }
    }
    
  3. 修复Raycast参数顺序错误
    原代码中Physics.Raycast的参数顺序有误:第四个参数是检测距离,第五个才是LayerMask。如果直接传入_nodeMask会被当成距离值,导致检测范围异常。修正后的调用:

    if(Physics.Raycast(transform.position, transform.right, out _hitRigth, Mathf.Infinity, _nodeMask))
    

    这里用Mathf.Infinity表示无限距离,你也可以根据需求替换为具体数值。

额外建议

  • 用CompareTag()替代直接==判断标签,性能更优且避免拼写错误导致的问题。
  • 在OnDrawGizmos()中可以添加绘制邻居连线的逻辑,方便可视化调试节点关系。

内容的提问来源于stack exchange,提问作者Benjamin Teves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:06:12