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 方法中,您可以看到代码正在抓取一个预先存在的碰撞器。这可能是一个很好的起点。
我收到 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 方法中,您可以看到代码正在抓取一个预先存在的碰撞器。这可能是一个很好的起点。