Unity3D:我无法找到NullReferenceException的解决方案

时间:2016-05-02 08:16:18

标签: c# unity3d

NullReferenceException:对象引用未设置为对象的实例TouchHandler.TouchControl()(在Assets / Script / TouchHandler.cs:78)TouchHandler.Update()(在Assets / Script / TouchHandler.cs:39)< / p>

ray = Camera.main.ScreenPointToRay(touch.position);第78行。

我收到此错误,我无法弄清楚原因。我认为一些新鲜的眼睛可能有帮助,任何人? 谢谢。

using UnityEngine;
using System.Collections;

public class TouchHandler : MonoBehaviour {


    /*****All the touch variables******/
    private Vector2     fp;             // first finger position
    private Vector2     lp;             // last finger position
    private float       angle;          
    private float       swipeDistanceX;
    private float       swipeDistanceY;
    private int         swipeDistance = 50; // Distance fingure to travell to register as a swipe
    private Touch       touch;          // touch variable       



    /*****All the Raycast variables******/
    Ray ray;
    RaycastHit hitInfo = new RaycastHit();

    /*****All the PlayerController script variables******/
    private PlayerController PC_component;


    //private MovementHandler movementHandlerScriptComponent;


    void Start()
    {
        PC_component = GetComponent<PlayerController>();

        //movementHandlerScriptComponent = GetComponent<MovementHandler>();
        //movementHandlerScriptComponent.SetisBaseNameSet(false);
    }

    void Update () 
    {
        TouchControl();
    }

    void OnGUI()
    {
        foreach(Touch t in Input.touches)
        {
            string message = "";

            message += "ID: "       + t.fingerId            + "\n"; 
            message += "Phase: "    + t.phase.ToString()    + "\n";
            message += "TapCount: " + t.tapCount            + "\n";
            message += "X: "        + t.position.x          + "\n";
            message += "Y: "        + t.position.y          + "\n";
            message += "Delta: "    + t.deltaPosition       + "\n";
            int num = t.fingerId;

            GUI.Label(new Rect(0 + 130 * num, 0, 120, 120), message);

        }
    }
    void castingRay()
    {
        if(Physics.Raycast(ray,out hitInfo))
        {
            if(hitInfo.transform.tag == "Base")
            {
                PC_component.spawnPlayer(hitInfo);

                //movementHandlerScriptComponent.Setsb_(hitInfo);
                //movementHandlerScriptComponent.SetisBaseNameSet(true);
            }
        }
    }
    void TouchControl()
    {
        if(Input.touchCount == 1)
        {
            touch = Input.GetTouch(0);
            ray = Camera.main.ScreenPointToRay(touch.position);

            if (touch.phase == TouchPhase.Began)
            {
                fp = touch.position;
                lp = touch.position;

                //Raycasting
                //if(movementHandlerScriptComponent.GetisBaseNameSet() == false)
                if(PC_component.isPlayerSpawned == false)
                    castingRay();
            }
            if (touch.phase == TouchPhase.Moved )
            {
                lp = touch.position;
                swipeDistanceX = Mathf.Abs((lp.x-fp.x));
                swipeDistanceY = Mathf.Abs((lp.y-fp.y));
            }
            if(touch.phase == TouchPhase.Ended)
            {
                angle = Mathf.Atan2((lp.x-fp.x),(lp.y-fp.y))*57.2957795f;
                swipeControlls();
            }
        }
    }

    void swipeControlls()
    {
        if(angle > 60 && angle < 120 && swipeDistanceX > swipeDistance)
        {
            Debug.Log("right");
            PC_component.moveDirection = "right";
        }
        if(angle > 150 || angle < -150 && swipeDistanceY > swipeDistance)
        {
            Debug.Log("down");
        }
        if(angle < -60 && angle > -120 && swipeDistanceX > swipeDistance)
        {
            Debug.Log("left");
            PC_component.moveDirection = "left";
        }
        if(angle > -30 && angle < 30 && swipeDistanceY > swipeDistance)
        {
            Debug.Log("up");
        }
    }



}

1 个答案:

答案 0 :(得分:2)

请检查相机是否已指定“MainCamera”标签。

如果分配了其他标签,则不会将其视为主摄像头。