我是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 ...”开头
答案 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()
不存在,从而导致空引用异常。