Camera.main空引用异常

时间:2018-09-09 07:49:21

标签: c# unity3d

我是C#和Unity的新手,并且我已经阅读了整个论坛,但仍然很困惑。这是我得到的错误:

  

NullReferenceException:对象引用未设置为对象的实例   ClickToMove.Update()(位于Assets / Scripts / ClickToMove.cs:27)

这就是我所拥有的...

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.AI;

 public class ClickToMove : MonoBehaviour {
     [Header("Stats")]
     public float attackDistance;
     public float attackRate;
     private float nextAttack;

     private NavMeshAgent navMeshAgent;
     private Animator anim;

     private Transform targetedEnemy;
     private bool enemyClicked;
     private bool walking;    
     void Awake ()
     {
         anim = GetComponent<Animator>();
         navMeshAgent = GetComponent<NavMeshAgent>();
     }

     // Update is called once per frame
     void Update ()
     {
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit;

         if (Input.GetButtonDown("Fire2"))
         {
             if (Physics.Raycast(ray, out hit, 1000))
             {
                 if (hit.collider.tag == "Enemy")
                 {
                     targetedEnemy = hit.transform;
                     enemyClicked = true;
                     //print("Enemy Hit");
                 }
                 else
                 {
                     walking = true;
                     enemyClicked = false;
                     navMeshAgent.isStopped = false;
                     navMeshAgent.destination = hit.point;
                 }
             }
         }
         if (enemyClicked)
         {
             MoveAndAttack();
         }

         if (navMeshAgent.remainingDistance <= navMeshAgent.stoppingDistance)
         {
             walking = false;
         }
         else
         {
             walking = true;
         }

         //anim.SetBool("isWalking", walking);
     }

     void MoveAndAttack()
     {
         if(targetedEnemy == null)
         {
             return;
         }

         navMeshAgent.destination = targetedEnemy.position;

         if(navMeshAgent.remainingDistance > attackDistance)
         {
             navMeshAgent.isStopped = false;
             walking = true;
         }
         else
         {
             transform.LookAt(targetedEnemy);
             Vector3 dirToAttack = targetedEnemy.transform.position - transform.position;

             if(Time.time > nextAttack)
             {
                 nextAttack = Time.time + attackRate;
             }
             navMeshAgent.isStopped = true;
             walking = false;
         }
     }
 }

第27行以“ Ray ray = Camera.main.ScreenPointToRay ...”开头

1 个答案:

答案 0 :(得分:3)

您需要在场景中使用带有$(function () { var RA_type = {'I':'Inside','O':'Outside'}; $table = $('#RA_details_table').DataTable( { "searching": false, "processing": true, "serverSide": true, "bDestroy" : true, dom: 'lBfrtip', buttons: [ ], "ajax": { "url": "<?php echo base_url();?>index.php/Generator_RAReport/get/", "type": "POST", "data" : function (d) { } }, "createdRow": function ( row, data, index ) { $table.column(0).nodes().each(function(node,index,dt){ $table.cell(node).data(index+1); }); $('td',row).eq(2).html(RA_type[data['RA_type']]); }, "columns": [ { "data": "RA_id", "orderable": false }, { "data": "RA_number", "orderable": false }, { "data": "RA_type", "orderable": false }, { "data": "customer_name", "orderable": false }, { "data": "RA_start_date", "orderable": false }, { "data": "RA_end_date", "orderable": false }, { "data": "RA_description", "orderable": false } ] } ); 标签的摄像机才能调用MainCamera。没有这个,Camera.main.ScreenPointToRay()不存在,从而导致空引用异常。

enter image description here