NullReferenceException Collider.Internal_Raycast Unity3d

NullReferenceException Collider.Internal_Raycast Unity3d

我收到 NullReferenceException,无法弄清楚我应该修复什么。我已经通读了 NRE 和光线投射的手册,但找不到任何答案。

NullReferenceException
UnityEngine.Collider.Internal_Raycast (UnityEngine.Collider col, Ray ray, UnityEngine.RaycastHit& hitInfo, Single maxDistance)
(at C:/buildslave/unity/build/artifacts/generated/common/modules/DynamicsBindings.gen.cs:2257)
UnityEngine.Collider.Raycast (Ray ray, UnityEngine.RaycastHit& hitInfo, Single maxDistance)
(at C:/buildslave/unity/build/artifacts/generated/common/modules/DynamicsBindings.gen.cs:2265)
TileMouseOver.Update () (at Assets/TileMouseOver.cs:22)

using UnityEngine;
using System.Collections;

public class TileMouseOver : MonoBehaviour {
  [SerializeField]
  public Color highlightColor;
  [SerializeField]
  Color normalColor;

  void Start() {
    normalColor = GetComponent<Renderer>().material.color;
  }

  void Update () {
    Ray ray = Camera.main.ScreenPointToRay( Input.mousePosition );
    var rayCollider = new Collider();
    RaycastHit hitInfo;

    if( rayCollider.Raycast( ray, out hitInfo, Mathf.Infinity )) {
        GetComponent<Renderer>().material.color = highlightColor;
    } else {
        GetComponent<Renderer>().material.color = normalColor;
    }
  }
}

还没有直接处理,但据我所知,您正在创建一个碰撞器,您应该使用已经附加到游戏对象的碰撞器。

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
public Collider coll;
void Start() {
    coll = GetComponent<Collider>();
}
void Update() {
    if (Input.GetMouseButtonDown(0)) {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (coll.Raycast(ray, out hit, 100.0F))
            transform.position = ray.GetPoint(100.0F);

    }
}

}

在 Start 方法中,您可以看到代码正在抓取一个预先存在的碰撞器。这可能是一个很好的起点。