【问题标题】:Update anim references in script更新脚本中的动画引用
【发布时间】:2015-05-26 08:57:22
【问题描述】:

对于一个 2D 横向滚动平台游戏,我制作了一个小齿轮系统,描述如下:

  • Player(我的主要玩家游戏对象,附有 Gear 脚本)
    • Gear(此游戏对象仅用于组织,在脚本中命名为“root”,没有附加脚本)
    • Armor(带有 sprite 和 Armor 脚本的盔甲)
    • 武器(带有精灵和武器脚本的武器)

我有一个附加到 Player 的脚本,即 Gear,引用“Gear”GameObject 以将其用作我未来项目的父变换。

在装备中,我以这种方式装备武器:

public void Equip(Wearable w){
        switch (w.type) {
        case Wearable.Type.WEAPON:
            GameObject weaponGO = Instantiate(w.gameObject);
            weaponGO.transform.SetParent(root.transform);
            Destroy (this.weapon.gameObject);
            this.weapon = w.GetComponent<Weapon>();
            break;
             //I did a swicth because i'll do it for armor, pets etc afterwards
        }
    }

问题是我在付款人上也有动画师,可以攻击、移动等...

所以当我更换我的武器时,它在 0,0,0 处生成并且它根本不跟随动画,并且在我的播放器动画中,我看到“武器:位置(缺失!)”,所以我认为这来自动画参考...但是如何在我的脚本中更改它?

【问题讨论】:

    标签: animation unity3d sprite


    【解决方案1】:

    问题似乎在于对象命名。因此,在实例化之后,您必须重命名新武器对象,使其名称与您删除的名称完全相同。之后动画器中的引用应该会自动更新。

    请注意,层次结构中的位置也应该与具有 Animator 组件的对象的相对位置相同。

    还要注意,实例化的对象应该与被删除的对象具有相同的属性(组件)在 Animator 中使用。

    【讨论】:

    • 我试过了,它解决了缺失的问题,但动画仍然无法正常工作(我有 2 个关于武器动画的精灵,还有 4 个关于盔甲动画的精灵)。我找到的唯一解决方案是保留相同的游戏对象,但将其所有属性更改为新武器的属性。事实上它并没有解决精灵问题,我总是需要找到一个解决方案来避免这个动画精灵问题。
    • 如果这个对象的动画有不同的精灵,你必须做一些抽象。也许您应该在具有特定动画的武器对象上拥有一个单独的动画师,并且从父动画中您只需调用一个播放该动画的方法,例如使用动画事件。编辑答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2015-03-13
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多