执行raycast时,Camera.main为null

Sha*_*rpy 6 c# unity-game-engine unity3d-2dtools

生成错误的代码:

void Update()
{
    if (Input.touchCount > 0)
    {
        RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero);
        if (hit && hit.collider != null && hit.collider.name == "leftTapArea")
        {
            hit.transform.name = "Hit";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它说这个字符串有问题:

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position),Vector2.zero);

错误:

NullReferenceException:对象引用未设置为对象的实例leftScript.Update()(在Assets/leftScript.cs:16)

Pro*_*mer 11

在代码中唯一可以返回null的是Camera.main.ScreenToWorldPoint.这意味着Camera.mainnull.对于Camera.main被初始化,相机必须有MainCamera标签.

选择Camera GameObject,然后将标签更改为MainCamera.

在此输入图像描述

如果您不希望您的相机位于MainCamera标签中,您也可以直接找到机智,GameObject.Find然后从中获取Camera组件.

Camera cam;

void Start()
{
    cam = GameObject.Find("NameOfCameraGameObject").GetComponent<Camera>();
}

void Update()
{
    if (Input.touchCount > 0)
    {
        RaycastHit2D hit = Physics2D.Raycast(cam.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero);
        if (hit && hit.collider != null && hit.collider.name == "leftTapArea")
        {
            hit.transform.name = "Hit";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)