// Enemy.cs 코드
private void EnemyDie()
{
for (int i = 0; i < status.soul; i++)
{
GameObject souls = Managers.Pool.Pop(soul, transform.parent.parent).gameObject;
souls.GetComponent<Soul>().GetTarget(enemyMovement.target);
souls.transform.position = transform.position;
}
Managers.Pool.Push(transform.parent.gameObject);
}
// Soul.cs 코드
public void GetTarget(Transform transform)
{
target = transform;
}
Enemy가 죽었을 때 EnemyDie()메서드가 실행이 되고 Status에서 Soul(영혼)만큼 반복하여 ObjectPool에서 영혼을 생성시키게 하고 생성한 오브젝트에서 Soul.cs의 메서드 GetTarget()을 이용하여 Target의 위치를 받아오게 함
private void Start()
{
float posX = Random.Range(-1f, 1f);
float posY = Random.Range(-1f, 1f);
Vector3 sumPos = new Vector3(posX, posY, 0);
rigid.AddForce(sumPos * 5, ForceMode2D.Impulse);
}
AddForce를 이용하여 랜덤X와 Y값을 받은 위치로 하여 짧게 이동을 하게 구현
void FixedUpdate()
{
if (Vector3.Distance(target.position, transform.position) < 5)
{
rigid.velocity = (target.position - transform.position).normalized * speed;
}
}
타겟(플레이어)와 자신의 위치를 계산하여 거리가 5보다 작을 때 RigidBody2D의 Velocity를 플레이어를 향한 Vector3로 계산하여 Speed만큼 이동하게 함
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
Managers.Pool.Push(gameObject);
}
}
충돌한 오브젝트의 Tag가 Player일 때 ObjectPool를 이용하여 다시 집어넣게 함
1. 없음
1. 없음
1. 없음