전체 페이지뷰

2017년 10월 30일 월요일

How To Make Mario In Unity 5 by Jimmy Vegas, Part 3

Import Player and Camera



(동영상 4에 해당합니다)

이번 영상에서는 Player를 씬에 추가하고 그를 따라다니는 카메라를 만들어 봅니다.

아쉽지만 슈퍼 마리오 모델을 어디선가 불법적으로 가져올 수는 없고, 편의상 유니티5 프리셋 3인칭 모델인 Ethan을 사용합니다.

프로젝트 창에서 Assets폴더에 우클릭하고 Import Packages>Characters를 선택하면 



창이 하나 뜹니다.


Import 버튼을 누르면 우리의 Assets폴더에 Standard Assets라는 새 폴더가 하나 생성되었습니다.

Standard Assets>Characters>ThirdPersonCharacter>Prefabs 폴더로 가면, ThirdPersonController라는 프리팹이 존재합니다. 이 프리팹을 드래그해서 씬에 올려놓습니다.


캐릭터가 오른쪽을 보고 가운데 설수 있도록 대략적으로 위치를 조정합니다.


테스트 해보면 플레이어를 WASD키등을 이용해서 조절 가능합니다.


자, 이제 캐릭터의 움직임에 따라 카메라가 따라다닐 수 있도록 스크립트를 작성해야 합니다. 먼저 Assets에 Scripts라는 새로운 폴더를 하나 만들고 그 안에 들어가서 Create>C# Script를 선택하고 이름을 CameraFollow라고 하겠습니다. 에디터로 스크립트를 열어 봅시다.

자바스크립트와 C#으로 스크립트를 작성하는 것은 생각보다 꽤 큰 차이가 있군요. 간단히 보고 시작했는데 꼭 그렇지만은 않은 것 같습니다.

자바스크립트로는 transform.position 값의 개별 x, y, z에 접근이 가능했는데 C#에서는 불가능합니다(구조체라서 reference가 아닌 value로 넘겨지기 때문입니다). 따라서 영상과는 상당히 다른 방법을 취해야 할 것 같습니다.

using UnityEngine;
public class CameraFollow : MonoBehaviour
{
    public Transform m_Player; // Player의 위치
    public float m_DistanceFromPlayer = 5f; // 플레이어로부터 카메라까지의 거리
    public float m_StaticCameraY = 3f;   // 카메라 높이는 고정      
    void LateUpdate ()
    {
        float xPosition = m_Player.position.x;
        float zPosition = m_Player.position.z - m_DistanceFromPlayer;
        transform.position = new Vector3(xPosition, m_StaticCameraY, zPosition);       
    }
}
cs

x, z 축의 위치를 계산하는 로컬 변수를 두어 그 값을 이용하여 새로운 position을 만들었습니다. 그 위치는 Update가 아닌 LateUpdate에 두었는데 실행별 차이는 없겠지만 그 시점에야 Player 오브젝트의 이동이 끝났을 것이기 때문입니다. 이렇게 계속해서 새로운 Vector3를 선언하는것이 옳은 방법인지는 모르겠지만 일단 저장하고 유니티로 돌아갑니다.

작성한 스크립트를 메인 카메라에 드래그해서 연결하고


다시 Main Camera를 선택하면 스크립트가 컴포넌트로 들어가 있고 프로퍼티들이 만들어져있습니다. 그 중 Player 프로퍼티에 Hierarchy의 ThirdPersonController를 드래그해서 연결해 줍니다.

그리고 실행해보면 카메라가 플레이어를 따라다니고, 점프 시에도 같은 높이를 유지하고 있습니다. 그런데 카메라 앵글이 영상과 좀 다르군요. 확인해 보니 MainCamera Transform의 Roatation X가 영상에 10으로 되어 있는데 전 0이었네요. 10으로 바꾸고 다시 실행해보니 비슷해졌습니다.

이제 영상을 조금 더 보기 좋게 하기 위해 카메라의 Rotation X를 15로 변경하고 Camera로부터의 거리를 6, Y 높이를 4로 바꿔봅니다.  


적당한 각도에서 플레이어의 움직임을 바라보게 된 것 같습니다.



댓글 없음:

댓글 쓰기