Если я прав, я думаю, что ваша игровая механика работает так: цель игрока - собирать монеты. Когда они соберут один, враг рядом с ним придет и уклонится от игрока.
Если это так, вы должны использовать это:
public class enemyBehavior : MonoBehaviour
{
public bool evade = false;
public GameObject Player;
public float movementSpeed = 4;
void Start()
{
Player = GameObject.FindGameObjectWithTag("Player");
}
void Update()
{
transform.LookAt(Player.transform);
transform.position += transform.forward * movementSpeed * Time.deltaTime;
if (evade)
{
movementSpeed = -4;
}
}
}
public class playerMechanics : MonoBehaviour
{
[SerializeField] enemyBehvaior enemy;
void OnCollisionEnter(Collision collision)
{
if (collision.collider.name == "coin")
{
Destroy(collision.collider.gameObject);
enemy.evade = true;
}
}
}
В своем коде вы написали 'collision.gameObject.' Это относится к объекту, к которому прикреплен скрипт. Если вы хотите сослаться на объект, который мы ударили, используйте 'collision.collider'.
'[SerializeField]' - это атрибут единства , который используется для отображения поля в инспекторе без его публикации.
Просто наперед, если вы используете 2D, убедитесь, что метод подписан 'OnCollisionEnter2D (Collision2D collision)'.
Надеюсь, я ответил на ваш вопрос. :)