我正试图使我的动画敌人(子对象)一旦enemieDeath ==变为真,就禁用它的对撞机。我写了一个debug.log,上面写着“对撞机。Enabled = true,Collider。Enabled = false,在我的玩家与enemie子游戏(它有动画)碰撞后,它会在一个无尽的循环中完成这个任务。
这是我正在使用的脚本。
EnemieMove脚本
//References PlayerController脚本
if (playerControllerScript.enemieDeath == true)
{
goblinCollider.enabled = !goblinCollider.enabled;
enemieAnimator.SetBool("IsDead", true);
Debug.Log("Collider.enabled = " + goblinCollider.enabled);
}
}播放器控制器脚本
void FixedUpdate()
{
int layerMask = 1 << 8;
int layerMaskCollectable = 1 << 9;
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.down), out hit, 1.5f, layerMask))
{
Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.down) * hit.distance, Color.yellow);
Debug.Log("Did Hit");
enemieDeath = true;
//Destroy(hit.transform.gameObject);
playerRb.AddForce(Vector3.up * bounceForce, ForceMode.Impulse);
gameManager.UpdateScore(20);
}发布于 2021-07-20 01:58:49
您没有发布执行第一个代码块的确切位置,但是从行为中我可以猜到它是在Update或FixedUpdate (或其他重复调用的任何代码块)中。
因此,一旦您将playerControllerScript.enemieDeath设置为true,它将一次又一次地执行,每次切换已启用的值。
一个快速的解决方法是检查并设置
if (playerControllerScript.enemieDeath && goblinCollider.enabled)
{
goblinCollider.enabled = false;
enemieAnimator.SetBool("IsDead", true);
Debug.Log("Collider.enabled = " + goblinCollider.enabled);
}作为一个更普遍的解决办法:停止投票检查bool标志!相反,让您的代码事件驱动并禁用对撞机等一次,当事件实际发生时,。
有.
public class PlayerController : MonoBehaviour
{
public event Action OnEnemyDied;
private void FixedUpdate ()
{
...
if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.down), out hit, 1.5f, layerMask))
{
...
OnEnemyDied?.Invoke();
}
}
...
}通过这种方式,您可以简单地注册一个回调,该回调仅在调用此事件时才会执行,例如。
public class EnemyMove : MonoBehaviour
{
[SerializeField] private PlayerController playerControllerScript;
private void Awake ()
{
playerControllerScript.OnEnemyDied += OnEnemyDied;
}
private void OnEnemyDied ()
{
if(golblinCollider.enabled)
{
goblinCollider.enabled = false;
enemieAnimator.SetBool("IsDead", true);
Debug.Log("Collider.enabled = " + goblinCollider.enabled);
}
}
...
}https://stackoverflow.com/questions/68448423
复制相似问题