본문 바로가기

유니티/뱀서라이크

뱀서라이크 따라하기 - 적 구현하기

이번시간에는 적을 구현해보도록 하겠습니다.

먼저 스프라이트 중 enemy라고 쓰여져 있는 스프라이트를 가져와, 계층창에 끌어다 놔 object를 만들어 줍니다. 

그 스프라이트에 컴포넌트로 animator를 추가한 뒤, action - enemy에 들어있는 ac enemy0을 넣어줍니다

또한 몬스터가 그려지는 위치를 2번으로 잡아서 그림자보다 위로 올라오게 하고, 그림자도 추가해준 뒤 높이를 -0.45 해주시면 됩니다.

또한 몬스터가 중력의 영향을 받거나, 회전을 하면 안되기에 중력 배율을 0으로 해주고, z 축 방향으로 도는 것을 막아준다.

또한 플레이어와의 충돌 감지를 위해 capsule collider를 추가해줍니다

캡슐콜라이더의 크기를 조정해 준 뒤 적 오브젝트를 복사해줍니다

그 복사된 오브젝트에 애니메이션은 enemy 1을 넣어줍니다

플레이어의 mass도 5로 변경해줍니다

이제 적들이 플레이어를 추적하는 로직을 짜보도록 하겠습니다.

 

public class Enemy : MonoBehaviour
{
    public float speed;
    public Rigidbody2D target;
    bool isLive;
    Rigidbody2D rigid;
    SpriteRenderer spriter;
    void Awake(){
        rigid = GetComponent<Rigidbody2D>();
        spriter = GetComponent<SpriteRenderer>();

    }
   
    void FixedUpdate()
    {
        Vector2 dirVec = target.position - rigid.position;
        Vector2 nextVec = dirVec.normalized * speed* Time.fixedDeltaTime;
        rigid.MovePosition(rigid.position + nextVec);
        rigid.velocity = Vector2.zero;
    }
}

완성된 로직입니다. 먼저 rigid와 spriter는 awake 때 초기화를 해주고, fixedupdate를 통해서 적이 움직이게 해 줍니다.

먼저 dirVec의 경우는 rigidbody에 있는 position값을 빼서 구해주고, nextVec은 그 구한 값을 플래이어 이동방식과 비슷하게 만들어 줍니다. 

그리고, 플레이어와 적의 충돌시를 대비하여 속도는 항상 0으로 해줍니다.

 

추가적인 구현은 다음글에서 더 해보도록 하겠습니다!

 

7월 28일