Unity: 영혼을 구현해보자

이재형·2024년 7월 15일
0
post-thumbnail
post-custom-banner

Unity 실습

근거리 적에 대해서 생각

문제 생각: 영혼을 드랍하고 어떻게 연출(드랍 후 플레이어로 이동)에 대해서 생각을 하게 됨

문제 진행:

1. 적이 죽었을 때 해당 몬스터의 영혼 값만큼 영혼을 생성시킴

2. 생성될 때 플레이어 중심으로 밖으로 짧게 흩어짐을 구현

3. 거리를 계산하여 가까워지면 플레이어를 향해(RigidBody2D.Velocity를 이용하여 플레이어를 향해 이동을 구현

4. Trigger2DEnter로 접근 시 사라지게 하여 완성

문제 해결: 다른 문제 없이 진행 완료

1. Enemy.cs에서 죽었을 때 Status의 soul만큼 반복하여 생성시키게 함

// 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의 위치를 받아오게 함


2. 생성될 때 플레이어 중심으로 밖으로 짧게 흩어짐을 구현

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값을 받은 위치로 하여 짧게 이동을 하게 구현


3. 거리를 계산하여 가까워지면 플레이어를 향해(RigidBody2D.Velocity를 이용하여 플레이어를 향해 이동을 구현

void FixedUpdate()
{
    if (Vector3.Distance(target.position, transform.position) < 5)
    {
        rigid.velocity = (target.position - transform.position).normalized * speed;
    }
}

타겟(플레이어)와 자신의 위치를 계산하여 거리가 5보다 작을 때 RigidBody2D의 Velocity를 플레이어를 향한 Vector3로 계산하여 Speed만큼 이동하게 함


4. Trigger2DEnter로 접근 시 사라지게 하여 완성

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.CompareTag("Player"))
    {
        Managers.Pool.Push(gameObject);
    }
}

충돌한 오브젝트의 Tag가 Player일 때 ObjectPool를 이용하여 다시 집어넣게 함


정리

배운 내용

1. 없음

해결 못한 문제

1. 없음

문제점

1. 없음

profile
한국사람
post-custom-banner

0개의 댓글