Таким образом, чтобы заставить код работать, мне пришлось удалить код изнутри Update ().Затем я создал функцию и вставил в нее свой код DropItem ().Затем мне пришлось полностью удалить враг HP <= 0 из кода.</p>
Следующим шагом было войти в мой сценарий EnemyDamage, создать новую переменную private ItemDrop getItem, и, наконец, внутри OnCollisionEnter2D () я добавил быструю проверку ItemDrop после смерти врага.Исходный код ниже.
Окончательный законченный и рабочий код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemDrop : MonoBehaviour
{
[SerializeField]
private GameObject[] itemList; // Stores the game items
private int itemNum; // Selects a number to choose from the itemList
private int randNum; // chooses a random number to see if loot os dropped- Loot chance
private Transform Epos; // enemy position
private void Start()
{
// itemList = CamFollow.itemListPass;
Epos = GetComponent<Transform>();
Debug.Log(itemList);
}
public void DropItem()
{
randNum = Random.Range(0, 101); // 100% total for determining loot chance;
Debug.Log("Random Number is " + randNum);
if (randNum >= 95) // Star Tablet drop itemList[2] currently
{
itemNum = 2;// grabs the star tab
Instantiate(itemList[itemNum], Epos.position, Quaternion.identity);
}
else if (randNum > 75 && randNum < 95) // Extra life drop itemList[1] currently
{
itemNum = 1;// grabs the star tab
Instantiate(itemList[itemNum], Epos.position, Quaternion.identity);
}
else if (randNum > 40 && randNum <= 75)// Health Heart drop itemList[0] currently
{
itemNum = 0;// grabs the star tab
Instantiate(itemList[itemNum], Epos.position, Quaternion.identity);
}
}// End of drop item
}
*********************************** Теперь в моем скрипте EnemyDMG: (НИЖЕ) ************************************
public class EnemyDMG : MonoBehaviour
{
private int enemyHP;
private ItemDrop getItem;
private void Start()
{
enemyHP = Random.Range(50, 200);
getItem = GetComponent<ItemDrop>();
}
// Below this code is inside of a simple OnCollisionEnter2D() function
// The enemy damage is calculated inside of this same function
// so I decided not to add any source code not directly relevant to my question
if(enemyHP <= 0)
{
if (getItem != null)
{
getItem.DropItem();
Debug.Log("Dropped an Item " + getItem);
}
Destroy(gameObject);
}
}