【问题标题】:Parent object not accessing variables from children's script父对象不访问子脚本中的变量
【发布时间】:2015-03-05 09:01:41
【问题描述】:

我正在 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 strict

var 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;
    }
}

提前致谢!

【问题讨论】:

  • 对于 NullReferenceException 所指的行,该行上的变量是什么?有东西是null
  • 是的。它在全局变量中,直到鹿实际进入触发器才设置,因此错误一直在发送垃圾邮件。

标签: unity3d triggers artificial-intelligence unityscript


【解决方案1】:

我已设法通过将 DeerHater 代码放置在 BeerController 中并将鹿变量从全局变量移动到 if(deerCollision == true) 来解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 2013-04-28
    • 2020-12-03
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多