【问题标题】:Using third party packages in Unity在 Unity 中使用第三方包
【发布时间】:2018-01-30 20:09:10
【问题描述】:

我在我的 FPS 游戏中使用 UFPS。 UFPS 有一个类 vp_DamageHandler。它附着在我的目标上。在这个类里面,有:

public virtual void Die()
{
dieFunctionCalled = true; //the only thing I've added to this class, besides declaring dieFunctionCalled
...some UFPS code...//among other things, this is where the object is destroyed or deactivated
}

我想让原始文件尽可能干净。我想用不同的脚本编写自己的代码以保持整洁。

我想在目标死亡时做一些其他事情,所以我也将myScript 添加到我的目标中,并尝试了这个:

void Update () {
        if (GetComponent<vp_DamageHandler> ().dieFunctionCalled) {
            GetComponent<vp_DamageHandler> ().dieFunctionCalled = false;
            Debug.Log ("dieFunctionCalled");
        }
}

问题是目标在 dieFunctionCalled 设置为 true 之前就被销毁了。因此,一旦目标死亡,myScript 就会被停用并且不会记录dieFunctionCalled。如果我要重生目标,dieFunctionCalled 会出现在控制台中。

我尝试将myScript 附加到一个空的游戏对象,但后来我得到了

对象引用未设置为对象的实例

谁能帮我解决这个问题?我是 Unity 的新手。基本上,我想要的只是保持原始 UFPS 文件尽可能干净,并将所有脚本写入不同的文件中。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我尝试将 myScript 附加到一个空的游戏对象,但后来我得到了 对象引用未设置为对象的实例

    创建一个名为“DamageHandlerHolder”的空游戏对象,然后将脚本附加到它。

    找到持有脚本的对象

    GameObject oObj = GameObject.Find("DamageHandlerHolder");
    

    获取附加到它的脚本

    vp_DamageHandler vpDm = oObj.GetComponent<vp_DamageHandler>();
    

    现在你可以检查变量了:

    if(vpDm.dieFunctionCalled){}
    

    这解决了您的 null 问题,但我建议您使用 EventManager 注册事件并收到通知玩家死亡。

    【讨论】:

    • EventManager 正是我想要的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2012-07-23
    • 2018-01-21
    • 2012-12-19
    相关资源
    最近更新 更多