【发布时间】:2021-08-26 22:01:47
【问题描述】:
我试图让我的敌人在与冰弹接触时冻结。除了动画师不播放动画并且脚本没有启用/禁用之外,一切都没有错误。 我试过 script = GetComponent();和 anim = gameObject.GetComponent();也适用于该部分。对于 set active 我尝试了 script.enabled script.setactive 等。它都不起作用。我认为这可能与get组件有关,但IDK。顺便说一句,这些是在实例化的预制件上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyHealth : MonoBehaviour
{
public float health;
public float freezeTime;
public Animator anim;
public Enemy script;
// Start is called before the first frame update
IEnumerator Wait(){
yield return new WaitForSeconds (freezeTime);
Debug.Log("waiting over");
}
void Start()
{
anim = gameObject.GetComponent<Animator>();
script = gameObject.GetComponent<Enemy>();
}
// Update is called once per frame
void Update()
{
if(health <= 0){
Dead();
}
}
void OnTriggerEnter2D(Collider2D other){
if(other.CompareTag("Harmful")){
Destroy(other.gameObject);
TakeDamage();
}
if(other.CompareTag("Freezing")){
anim.SetBool("IsFrozen", true);
Destroy(other.gameObject);
gameObject.GetComponent<Enemy>().enabled = false;
TakeDamage();
Debug.Log("waiting started");
StartCoroutine(Wait());
anim.SetBool("IsFrozen", false);
gameObject.GetComponent<Enemy>().enabled = true;
}
}
void TakeDamage(){
health -= 1f;
}
void Dead(){
Destroy(gameObject);
}
}
【问题讨论】:
-
你的目标是什么?
Enabled和Disable将改变GameObject上单个组件的状态。因此,在您的示例中,它正在设置脚本Enemy开和关。这与动画师无关。如果您的动画不起作用,那么很可能是您的动画树设置不正确或动画参数设置不正确。 -
动画师和敌人组件是否与敌人健康脚本在同一个游戏对象上?
-
@hijinxbassist 是的,并且禁用执行移动和攻击以产生冻结效果的敌人脚本。
-
澄清我想关闭敌人的脚本,而动画师也没有做它应该做的事情
-
顺便说一句,这些都是克隆。