You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity代码中复制指定GameObject并设置父对象及触发动画

解决方案:实例化Damaged对象并完成父物体绑定+动画触发
  • 将生成对象设为Boss的子物体:
    Instantiate有带父物体参数的重载,直接指定Boss的Transform作为父物体,生成的对象会自动归到Boss层级下,同时默认保持原世界位置不变。如果需要手动指定位置旋转,用Instantiate(original, position, rotation, parentTransform)这个重载即可。

  • 保留原对象名称:
    默认实例化的对象会自动添加(Clone)后缀,生成后手动将复制对象的name设为原始对象的name就能去掉后缀,保留原名。

  • 正确触发复制对象的动画:
    你之前的代码大概率是调用了原始对象的Animator组件,要改成获取新生成对象上的Animator,再触发动画触发器。

  • 动画事件销毁自身:
    在Damaged对象的动画片段里,打开动画编辑器,在合适的帧(比如动画结束前)添加动画事件,绑定到对象上的脚本方法,示例脚本如下:

public class DamageDestroyer : MonoBehaviour
{
    // 动画事件调用此方法销毁自身
    public void DestroyOnAnimationEnd()
    {
        Destroy(gameObject);
    }
}

修正后的完整代码示例

// 建议提前在Inspector赋值或Awake阶段缓存,避免重复查找
[SerializeField] private Transform bossTransform;
[SerializeField] private GameObject damageText; // 原始Damaged对象

public void SpawnDamage()
{
    // 实例化并直接设置父物体,保持原世界位置
    GameObject duplicate = Instantiate(damageText, bossTransform);
    
    // 移除自动添加的(Clone)后缀,保留原名称
    duplicate.name = damageText.name;
    
    // 获取复制对象的Animator并触发动画
    Animator anim = duplicate.GetComponent<Animator>();
    if (anim != null)
    {
        anim.SetTrigger("Damage");
    }
}

内容的提问来源于stack exchange,提问作者repinSlun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:12:34