問題:當敵人活著時,它的子彈腳本爆炸效果會反復發生在它的身體物件上。當我殺死敵人時,子彈開始從它應該的樣子射出。為什么子彈只有在敵人死亡時才起作用? 子彈在游戲物件上爆炸的截圖
子彈腳本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletScriptEnemy : MonoBehaviour
{
GameObject target;
public float speed;
Rigidbody2D bulletRB;
//
public GameObject hitEffect;
public int damage = 40;
public Rigidbody2D rb;
//
// Start is called before the first frame update
void Start()
{
bulletRB = GetComponent<Rigidbody2D>();
target = GameObject.FindGameObjectWithTag("Player");
Vector2 moveDir = (target.transform.position - transform.position).normalized * speed;
bulletRB.velocity = new Vector2(moveDir.x, moveDir.y);
Destroy(this.gameObject, 2);
}
void OnTriggerEnter2D(Collider2D hitInfo)
{
GameObject effect = Instantiate(hitEffect, transform.position, Quaternion.identity);
Destroy(effect, 2f); //Sekundes
Destroy(gameObject);
Player player = hitInfo.GetComponent<Player>();
if(player != null)
{
player.TakeDamage(damage);
}
Destroy(gameObject);
}
// Update is called once per frame
void Update()
{
}
}
敵人的腳本:
public class Enemy : MonoBehaviour
{
public Animator animator;
public int maxHealth = 100;
//public GameObject deathEffect;
int currentHealth;
// Start is called before the first frame update
void Start()
{
currentHealth = maxHealth;
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
//Play hurt animation
animator.SetTrigger("Hurt");
if(currentHealth <= 0)
{
Die();
}
}
void Die()
{
Debug.Log("Enemy died!");
//Instantiate(deathEffect, transform.position, Quaternion.identity);
//Destroy(gameObject);
//Die anim
animator.SetBool("IsDead", true);
//Disable the enemy
GetComponent<Collider2D>().enabled = false;
this.enabled = false;
}
}
uj5u.com熱心網友回復:
有沒有可能敵人也有對撞機?當子彈被實體化時,它的 OnTriggerEnter2D 被呼叫,因為它擊中了敵人。在 OnTriggerEnter2D 中,您應該首先檢查您碰撞的游戲物件是否是玩家。像這樣的東西:
void OnTriggerEnter2D(Collider2D hitInfo)
{
Player player = hitInfo.GetComponent<Player>();
if (player == null)
return;
GameObject effect = Instantiate(hitEffect, transform.position, Quaternion.identity);
Destroy(effect, 2f); //Sekundes
Destroy(gameObject);
player.TakeDamage(damage);
}
uj5u.com熱心網友回復:
感謝您的回答。是的,敵人有對撞機并將代碼更改為此解決了問題:
void OnTriggerEnter2D(Collider2D hitInfo)
{
Player player = hitInfo.GetComponent<Player>();
if (player == null)
return;
GameObject effect = Instantiate(hitEffect, transform.position, Quaternion.identity);
Destroy(effect, 2f); //Sekundes
Destroy(gameObject);
player.TakeDamage(damage);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351164.html
