【问题标题】:how to change variables in script attached to a prefab through script at runtime?如何在运行时通过脚本更改附加到预制件的脚本中的变量?
【发布时间】:2018-05-15 12:58:10
【问题描述】:

我在场景中实例化了一个预制件,该预制件在 2 秒后被销毁。我想在其移动脚本中更改其速度变量,以便在实例化时具有新的速度。

【问题讨论】:

    标签: unity3d game-development


    【解决方案1】:

    instantiate 函数返回您创建的游戏对象。

    GameObject prefabObject = Instantiate(...);
    

    那么你显然可以做类似的事情

    prefabObject.GetComponent<moveScript>().speed = 4;
    

    【讨论】:

    • 永远不要命名变量gameObject,因为它是用于访问此脚本脚本所附加到的游戏对象的变量的名称。
    • @CowNecromancer 是的,这就是我所做的,但我想在运行时更改预制件,以便在运行时实例化它时遵循新的一组属性(我想绕过这个过程每次实例化时分配,我想定义一次)。当结束时,我希望预制件恢复到原来的状态。
    • @NoorulainArain 我不确定你的意思。你想要它让实际的预制本身更改为这些新属性吗?因为我能想到的唯一其他方法是分配每个变量。你能尝试更具体吗?也试着举一个你正在尝试做的例子。比如创建一个什么的预制件?
    【解决方案2】:

    您没有提供足够的信息,但我会尽力回答。

    这将由另一个脚本或您附加在预制件上的移动脚本来完成吗?

    如果来自移动脚本,则:

    private void Awake()
    {
        speed = MY_NEW_SPEED;
    }
    

    如果来自另一个脚本,那么您首先需要访问实例化的对象,然后是其移动脚本。您没有提供足够的信息,所以我假设您已经引用了您的实例化对象:

    instantiatedObject.GetComponent<Move>().speed = MY_NEW_SPEED;
    

    https://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html

    【讨论】:

    • 我已经这样做了。我想知道我们是否可以在运行时更改预制件(项目面板)并在游戏结束时将其恢复到旧状态。
    • 那你为什么不直接改变预制值呢?如果游戏结束后这些值会被恢复,那么拥有它们而不是从一开始就拥有你需要的值有什么意义?
    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多