简体   繁体   English

Unity3D:我找不到NullReferenceException的解决方案

[英]Unity3D : I am not able to find the solution to NullReferenceException

NullReferenceException: Object reference not set to an instance of an object TouchHandler.TouchControl () (at Assets/Script/TouchHandler.cs:78) TouchHandler.Update () (at Assets/Script/TouchHandler.cs:39) NullReferenceException:对象引用未设置为对象TouchHandler.TouchControl()的实例(在Assets / Script / TouchHandler.cs:78处)TouchHandler.Update()(在Assets / Script / TouchHandler.cs:39处)

ray = Camera.main.ScreenPointToRay(touch.position); LINE 78. 线78。

I get this error and i cant figure out why. 我收到此错误,我不知道为什么。 I thought some fresh eyes might help, anyone? 我认为有些新鲜的眼睛可能会有所帮助,有人吗?
Thank You. 谢谢。

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");
        }
    }



}

Please check that Camera have "MainCamera" tag assigned. 请检查相机是否已分配“ MainCamera”标签。

If there is some other tag assigned, then it will not be considered as main camera. 如果分配了其他标签,则不会将其视为主摄像机。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM