我在Unity中进行一个项目,并创建了一个名为DeerHater的脚本,用于定位进入指定区域的对象的变换和控制器。这个脚本本身是可以工作的,但它连接到一个父对象上,该父对象附带了控制器,而这个控制器应该访问DeerHater的变量并执行指定的功能。
问题在于,当目标对象进入触发器后,控制器中的变量并没有从空值变为DeerHater中已更改的变量,并且显示以下两个错误:
NullReferenceException: 对象引用未设置到对象的实例
MissingFieldException: DeerController.targetDeer
由于我完全是初学者,我实在看不出问题出在哪里,有人能告诉我为什么无法访问DeerHater的变量吗?
BearController脚本(父对象):
var distanceDeer : float;var deerHater : DeerHater;var deer : GameObject = null;var targetDeer : Transform;var isFollowing : boolean = false;var center : Transform;var deerKilled : boolean = false;function Start(){ deerHater = GameObject.Find("DeerHater").GetComponent(DeerHater);}function Update(){ deer = deerHater.deerController. targetDeer = deerHater.stupidDeer; distanceDeer = Vector3.Distance(deerHater.stupidDeer.position, transform.position);if(deerHater.collisionDeer == true) { ChaseDeer(); if(distanceDeer < attackRange) { deer.health = -0.1; deerKilled = true; } if(deerKilled == true) { GoBack(); deerKilled = false; } }}function ChaseDeer(){ var rotation = Quaternion.LookRotation(deerHater.stupidDeer.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping); moveSpeed = 6; animation.Play("Run"); animation["Run"].speed = 1.25; moveDirection = transform.forward; moveDirection *= moveSpeed; isFollowing = true; moveDirection.y -= gravity * Time.deltaTime; controller.Move(moveDirection * Time.deltaTime);}
这是DeerHater脚本:
#pragma strictvar stupidDeer : Transform;var deerController : DeerController;public var collisionDeer : boolean = false;function OnTriggerEnter(col : Collider){ if(col.gameObject.tag == "Deer") { collisionDeer = true; stupidDeer = col.gameObject.transform; deerController = col.gameObject.GetComponent(DeerController); }}function OnTriggerExit(col : Collider) { if(col.gameObject.tag == "Deer") { collisionDeer = false; stupidDeer = null; deerController = null; }}
提前感谢!
回答:
我已经通过将DeerHater代码放入BeerController中,并将鹿的变量从全局变量移动到if(deerCollision == true)中来解决这个问题了。