我得到了NullReferenceException,我想不出我该修什么。我已经阅读了NRE和射线广播的手册,但我找不到任何答案。
NullReferenceException UnityEngine.Collider.Internal_Raycast (UnityEngine.Collider col,Ray ray,UnityEngine.RaycastHit& hitInfo,Single maxDistance) (在C:/buildslave/unity/build/artifacts/generated/common/modules/DynamicsBindings.gen.cs:2257) UnityEngine.Collider.Raycast ( ray,UnityEngine.RaycastHit& hitInfo,Single maxDistance) (在C:/buildslave/unity/build/artifacts/generated/common/modules/DynamicsBindings.gen.cs:2265) TileMouseOver.Update () (at Asset/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;
}
}
}发布于 2015-11-25 19:16:54
还没有直接处理,但据我所见,您正在创建一个对撞机,您应该使用已经连接到gameObject的对撞机。
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方法中,您可以看到代码正在抓取一个已有的对撞机。这可能是一个很好的起点。
https://stackoverflow.com/questions/33924446
复制相似问题