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
相关产品推荐
相关产品推荐

