밑에 누가 올린 질문인 "캐릭터가 맵 안에 알아서 돌아다니게 하는 법"에 대한 답변임. 프로그래밍을 몰라도 알아들을 수 있게
설명하겠음. 일단 우리의 목표는 짤에서 보이는대로 "캐릭터가 자동으로 화면 내의 여러가지 오브젝트들(침대, 화장대, 쇼파 등)과
상호작용 하게 하는 것"임. 그럼 일단 간략하게 상호작용을 4가지로 정하자면,
- 침대로 가서 자기
- 화장대로 가서 화장하기
- 쇼파로 가서 앉기
- 그냥 아무데나 걸어다니기
이렇게 4가지임. 4번째껀 그냥 아무 오브젝트랑 상관없이 이리저리 걸어다니는 것.
그럼 예를 들면 '침대로 가서 자기'는 풀어서 설명하자면 "침대로 가서 자기라는 명령을 받으면 먼저 현재 위치에서 침대로 이동한 뒤에
자는 행동을 한다"이고 이걸 프로그래밍스러운 느낌으로 표현하자면 아래와 같이 표현 할 수 있는데, 최대한 프로그래밍스러운 표현을
자제하고 표현하자면 다음과 같아.
침대로 가서 자기[
- 침대로 이동하기
- 자는 행동하기
]
그런데 침대로 이동하려면 침대의 위치와 현재 내 위치를 알아야 겠지? 그리고 이동을 할 때는 캐릭터가 걷는 모션을 취해야 할거야.
그러니 다시 보자면
현재 위치는 x (이 수치는 항상 바뀔 수 있지)
침대 위치는 bed (하지만 이 수치는 항상 고정이야)
침대로 가서 자기(현재 위치 x)[
- 침대로 이동하기(x 값을 필요로 함)
- 자는 행동하기
]
이렇게 되고, 다시 작게 봐서 침대로 이동하기는 이렇게 표현할 수 있을거야.
침대로 이동하기(x값)[
- x에서 bed로 캐릭터의 좌표를 이동시킨다.
(이동 중에 캐릭터는 걷는 모션을 취한다.)
]
그리고 이동이 끝나게 되면 위에서 말한 자는 행동하기를 하게 되는데 예를 들면 이동 후에 10초 간 잠을 잔다고 쳐 그러면
자는 행동하기[
- 10초 간 좌표를 정지시킨다.
(자는 동안에는 자는 모션을 취한다.)
]
이러면 되는거지. 자 그러면 일단 "침대로 가서 자기"라는 행동에 대한 부분은 완성된거지? 물론 현실은 좀더 많은 걸 고려해야
하지만 지금은 이렇게 두자. 그리고 마찬가지 방식으로 "화장대로 가서 화장하기"랑 "쇼파로 가서 앉기"는 만들 수 있을거야.
그럼 "그냥 아무데나 걸어다니기"를 생각해보자. 말그대로 아무데로나 걸으면 되는거니까 이렇게 생각하면 되지.
아무데나 걸어다니기(현재위치 x값)[
- 화면 내의 아무데나 좌표를 정한다.
- 현재 위치 x에서 그 좌표로 이동한다. (이동 중에 캐릭터는 걷는 모션을 취한다.)
]
자 이러면 되겠지? 물론 화면 내의 아무데나 좌표를 정하는 건 "랜덤"을 생각하면 돼. 그냥 아무 좌표나 랜덤하게 찍는거지.
물론 화장대, 침대, 쇼파는 주변은 제외하고. 자 그럼 이제 4가지 행동이 완성됐으니 어떻게 이걸 자연스럽게 자동으로 되게 만들까?
반복하기[
-1에서 4까지 랜덤한 숫자 뽑기
-1이 걸리면 침대, 2가 걸리면 화장대, 3이 걸리면 쇼파, 4가 걸리면 그냥 걷게 하기(당연히 위에서 만들어 놓은 기능들을 쓰면 되겠지?)
-위 행동이 끝나면 당연히 현재 위치가 변경되어 있을테니 현재 위치를 다시 저장할거야.
-그러고 나서 반복하기(물론 반복할 때에 이전 행동이 1, 2, 3 중에 하나였다면 다음 번에는 그 행동을 반복 못하게 해야 돼. 4는 반복되도 상관없겠지?)
]
이러면 캐릭터가 랜덤하게 잠도 잤다가 화장도 했다가 길거리 배회도 했다가 쇼파에도 앉았다가 하겠지? 물론 현실에서는 좀더
많은 걸 고려해야 돼. 예를 들자면, 캐릭터가 이동 중에 장애물이 있다면 피해가게 한다거나, 한가지 행동 이후에 바로 다른
행동을 하게 하지 않고 4번을 좀더 반복한 뒤에 다른 행동을 하게 한다거나, 특정 행동에 좀더 많은 빈도수를 준다거나, 아니면
특정 행동을 할 때에 체력 증가나 능력치 증가 같은 뭔가 특별한 의미를 부여한다거나 다양한 것들을 생각할 수 있지.
여튼 이정도면 프로그래밍을 전혀전혀 몰라도 이해할 수 있을거야.
댓글 0