본문 바로가기

유니티/뱀서라이크

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

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

먼저 저번시간에 작성한 코드를 적 오브젝트에 넣어줍니다.

그리고 target 부분에 player를 넣어주고, 속도를 지정해주면 플레이어를 따라 움직이는 적의 모습을 볼 수 있습니다.

하지만 적들이 어느 방향으로 움직이던지 간에 보는 방향이 항상 고정되어 있다는 문제가 있는데요, 이를 고치기 위해서 스크립트에 내용을 추가해보도록 하겠습니다.

void LateUpdate(){
        spriter.flipX = target.position.x < rigid.position.x;
       
    }

저번에 작성한 코드의 아래쪽에 추가해주었습니다. 플레이어가 보는 방향을 바꿀 때와 거의 비슷한 코드입니다. 

또한, isLive 변수는 나중에 데미지를 넣는 부분에서 사용하게 될건데, 먼저 지금까지 만든 동작하는 코드가 isLive변수에 따라 동작할지 말지 결정하기 위해 아래와 같은 코드를 넣어줍니다.

 

if(!isLive)
            return;

이런 코드를 fixedupdate와 lateupdate 두부분 다에 넣어주면 됩니다.

이제 적이 플레이어로부터 너무 멀어질 경우 플레이어가 가는 방향에서 나타나도록 만들어 보겠습니다.

reposition 스크립트를 열어서 reposition 클레스 안에 바로 collider2d 인 coll을 만들어주시고, awake 때 초기화를 해줍니다.

 

public class RePosition : MonoBehaviour
{
    Collider2D coll;
    void Awake(){
        coll = GetComponent<Collider2D>();
    }
 

또한 저번에 만들어놨던 switch문에 코드를 추가해줍니다

switch(transform.tag){
            case "Ground":
                if (diffX > diffY){
                    transform.Translate(Vector3.right*dirX*40);
                }
                else if (diffX < diffY){
                    transform.Translate(Vector3.up*dirY*40);
                }
                break;
             case "Enemy":
                if(coll.enabled){
                    transform.Translate(playerDir*20 + new Vector3(Random.Range(-3f, 3f),0f));
                }
                break;
        }

 

case enemy의 경우에, 죽어서 콜라이더가 비활성화되어있지 않는 이상, 플레이어가 움직이는 방향으로 20을 곱해서 움직이고, 거기에서 랜덤으로 얼마정도 움직이게끔 만들었습니다.

 

여기까지가 5강 적 구현이였습니다. 다음 글에서는 적들이 계속 나오게 만들기 위해서 오브젝트 풀링을 구현해보도록 하겠습니다. 강의 양이 꽤 되다보니 생각보다 진도가 잘 나가지지 않는거 같네요. 언제 강의를 다 볼 수 있을 지 아직 잘 가늠이 안되지만, 현재 구현되어 돌아가는 제가 만든 게임의 모습을 보면서 또 다시 힘을 내보도록 하겠습니다. 

 

이 글은 아래의 영상을 따라하는 과정을 기록하는 의도로 쓰여지는 글입니다. 혹시나 더 궁금한 점이 있다면 아래의 영상 플래이리스트를 참고해주시기 바랍니다!

https://www.youtube.com/watch?v=0aUCu1BcZxs&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=7&ab_channel=%EA%B3%A8%EB%93%9C%EB%A9%94%ED%83%88 

 

7월 28일