#unity3d
Вопрос:
Я хочу добавить несколько коллайдеров в свой сценарий кролика, но он показывает упоминание об ошибке ниже:
Тип «Кролик» уже определяет элемент с именем «OnTriggerEnter2D» с теми же типами параметров
Это мой код:
private void OnTriggerEnter2D(Collider2D CoinCollider)
{
if(CoinCollider.GetComponent<Coin>())
{
coinCount = 1;
Destroy(CoinCollider.gameObject);
}
}
private void OnTriggerEnter2D(Collider2D DiamondCollider)
{
if(DiamondCollider.GetComponent<Diamond>())
{
DiamondCount = 1;
Destroy(DiamondCollider.gameObject);
}
}
private void OnTriggerEnter2D(Collider other)
{
if (other.gameObject.CompareTag("Finish"))
{
other.gameOverPanel.SetActive(true);
gameOver();
}
}
Как создать несколько коллизий в одном скрипте?
Комментарии:
1. Вы бы использовали какую-то форму условного внутри одного метода, чтобы сказать, если я ударюсь о стену, сделайте это так, чтобы и т. Д.
Ответ №1:
У вас может быть только один OnTriggerEnter2D
метод, который принимает a Collider2D
в качестве аргумента. Объедините три ваших метода в один и используйте if
else if
else
операторы//.
Приведенные ниже примеры сделаны с использованием предоставленного вами кода.
Пример 1
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.GetComponent<Coin>())
{
coinCount = 1;
Destroy(collision.gameObject);
}
else if (collision.GetComponent<Diamond>())
{
DiamondCount = 1;
Destroy(collision.gameObject);
}
else if (collision.gameObject.CompareTag("Finish"))
{
collision.gameOverPanel.SetActive(true);
gameOver();
}
}
Пример 2
Если вы хотите, чтобы все ваши 3 метода были разделены, вы можете переписать их в пользовательские методы, которые все вызываются из одного OnTriggerEnter2D
метода.
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.GetComponent<Coin>())
{
TakeCoin(collision.gameObject);
}
else if (collision.GetComponent<Diamond>())
{
TakeDiamond(collision.gameObject);
}
else if (collision.gameObject.CompareTag("Finish"))
{
FinishAt(collision);
}
}
private void TakeCoin(GameObject coin)
{
coinCount = 1;
Destroy(coin);
}
private void TakeDiamond(GameObject diamond)
{
DiamondCount = 1;
Destroy(diamond);
}
private void FinishAt(Collider2D finish)
{
finish.gameOverPanel.SetActive(true);
gameOver();
}