【问题标题】:GetComponent: NullReferenceException获取组件:NullReferenceException
【发布时间】:2019-04-12 04:38:08
【问题描述】:

我收到以下错误:

NullReferenceException:对象引用未设置为对象的实例

当试图在这一行挑选对象时:

Ray ray = mainCamera.GetComponent<Camera>().ScreenPointToRay(new Vector3(x, y));

完整代码:

using UnityEngine;
using System.Collections;
public class pickupobject : 

MonoBehaviour {
    GameObject mainCamera;
    public float distance;
    GameObject carryObject;
    bool carrying;
    void start() {
        mainCamera = GameObject.FindWithTag("MainCamera");
    }

    void pickup()
    {
        if (Input.GetKeyDown(KeyCode.F))
        {
            int x = Screen.width / 2;
            int y = Screen.height / 2;
            Ray ray = mainCamera.GetComponent<Camera>().ScreenPointToRay(new Vector3(x, y));
            // Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                pickupcube p = hit.collider.GetComponent<pickupcube>();
                if (p != null)
                {
                    carrying = true;
                    carryObject = p.gameObject;
                }
            }
        }
    }

    void carry(GameObject o)
    {
        o.GetComponent<Rigidbody>().isKinematic = true;
        o.transform.position = mainCamera.transform.position + mainCamera.transform.forward * distance;
    }

    // Update is called once per frame
    void Update()
    {
        if (carrying)
        {
            carry(carryObject);
        }
        else
        {
            pickup();
        }
    }

}

【问题讨论】:

标签: c# unity3d raytracing


【解决方案1】:

尝试像这样写同一行:

Ray ray = Camera.main.gameObject.GetComponent<Camera>().ScreenPointToRay(new Vector3(x, y, 0));

首先 FindWithTag 和任何 Find 都非常广泛(在您的情况下并不重要,因为您只调用一次,但只是为了记录而知道),您应该检查那里的拼写并尝试使用 Debug.Log ();打印到 mainCamera、Ray 等的控制台值,看看什么时候得到意想不到的结果。现在只需尝试我的代码,它几乎相同,只是使用了对相机的不同引用

http://docs.unity3d.com/ScriptReference/Camera-main.html

【讨论】:

  • 非常感谢.. 已修复..@Neven
猜你喜欢
  • 1970-01-01
  • 2018-07-06
  • 2012-01-02
  • 2021-01-06
  • 2016-03-30
  • 2016-07-20
  • 2012-08-22
  • 2014-01-30
  • 1970-01-01
相关资源
最近更新 更多