1. 플레이어 캐릭터 만들기

Create에 Create Empty를 누르면 GameObject가 생성된다.

게임오브젝트에 이름을 Player로 변경.

 

모델 가저오기.

Assets에서 Hierarchy에 Player에 Player 모델을 넣는다.

 

2. 플레이어 이동 스크립트 만들기Scripts 파일에 C#script 생성 PlayerCtrl스크립트는 생성과 동시에 이름을 독특하게 지어 줘야한다.만약 이름을 변경할 경우 스크립트 안에서 클래스 이름을 변경해 주어야 한다.

 

 

스크립트에 코드를 작성.

-TIP-Translate 함수의 두번째 인자는 이동하는 게임오브젝트의 기준좌표가 월드 좌표를 기준으로 이동할지 로컬 좌표로 이동할지를 결정한다. 기준좌표계 인자를 생략하면 로컬 좌표를 기준으로 이동한다.

Space

World 변형(transformation)값을 월드 좌표 시스템에 맞게 적용.
Self 변형(transformation)값을 로컬 좌표 시스템에 맞게 적용.

transform.Translate(new Vector3(h, 0, v) * moveSpeed * Time.deltatime, Space.World); 이런식으로 사용하면됨.

 

이동방향 * 이동속도 * 시간

움직임은 끝났고, 회전을 만들어보자.

 

3. 플레이어 캐릭터 회전 Rotate

캐릭터 회전 끝.

 

4. 카메라 추적 - Follow Cam

카메라가 주인공 캐릭터를 따라가게 하는 가장 간단한 방법은 Main Camera를 Player 게임오브젝트의 하위 차일드화하는 것이다. 하지만 부드러운 움직임과 Shake 효과 등을 구현하려면 카메라에 주인공을 추적하는 스크립트를 추가해 구현하는 것이 바람직한 방법이다.

 

FollowCam스크립트 생성.

Vector3.Lerp( 시작위치, 종료위치, 시간 )

 

-LateUpdate-

만약 카메라의 위치를 계산하는 로직을 Update 함수에서 구현했다면 player의 움직임이 완료되기 전에 카메라가 이동할 경우 떨림 현상이 발생할 수 있다. 따라서 카메라의 위치 계산은 Player가 이동 및 회전을 모두 끝마친 이후에 실행해야 하므로 

LateUpdate 함수에서 실행한다.

 

-TIP-

LateUpdate 함수는 Scene에 있는 모든 스크립트의 Update 함수가 완료된 후 호출된다.

 

스크립트를 Main Camera에 넣고 Target에 Hierarchy에 Player를 드래그해서 넣는다.

Target Player에 Transform(위치)

Dist 카메라와 player의 거리

Height 높이

Damp Trace 부드러운 추적

 

카메라 추적 끝.
5. 레거시 애니메이션Player가 움직일때 애니메이션을 설정해보자.유니티는 레거시, 메카님 두가지 유형의 애니메이션을 지원한다.

- 레거시 애니메이션 : 3D Animation Tool에서 제작한 애니메이션.

- 메카님 애니메이션 : 모션 캡처 애니메이션, 리타깃팅을 이용해 기존 애니메이션을 재활용할 수 있다.

 

Player는 레거시 애니메이션으로 만든다.

Ainmations을 클릭하면 Clips에 +눌르면 클립이 추가된다.

 

 

생성한 클립들의 Wrap Mode를 Loop로 선택함.

다만들고 나면 Apply를 눌러준다.

 

Hierarchy 뷰에서 Player에 있는 Model을 선택하고 만들 애니메이션 클립들이 있는지 확인해 보자.

디폴트 애니메이션을 idle을 넣어주자.

애니메이션을 다 만들었다. 이제 Player에 스크립트를 통해 움직일 때 마다 모션이 변하게 만들어보자.

 

6. 애니메이션 컨트롤

애니메이션 클립의 개수가 적을때는 하나씩 변수로 선언한 다음 사용해도 무리가 없지만 클립의 개수가 많을 때는 클래스로 선언하면 좀 더 효율적으로 관리할 수 있다. C#은 자바스크립트와 달리 클래스 타입의 변수를 Inspector 뷰에 노출시키려면 반드시 [System.Serializable]이라는 어트리뷰트(Attribute)를 명시해 직렬화(serialize)해야 한다.

PlayerCtrl 스크립트를 다음과 같이 수정했다.

 

 

같은 이름에 드래그

 

Animation은 드래그 해주지 않아도 Strat()에서 가져오고 있다.

_animation = GetComponentInChildren<Animation>();자신의 하위에 있는 

Animation 컴포넌트를 찾아와 변수에 할당. 자식들중에 Animation 컴포넌트가 여러 개 있을 때는 다른 방식으로 가져와야 한다.

 

6. 애니메이션 블랜딩

Scene에서 총을 클릭했다.

 

Cast Shadows에 옵션이 4가지 있다.

1. off 그림자를 만들지 않는다.

2. on 그림자를 만든다.

3. Two Sided 백페이스 컬링을 무시하고 그림자를 양면으로 만든다.

4. Shadows Only 그림자를 만들지만 자신은 렌더링하지 않는다. 즉, 화면에 보이지 않는 특성이 있어 그림자 처리만을 위한 3D모델에 활용할 수 있다.
off로 설정

 

Projector를 이용한 그림자.

먼저 Directional light에 Shadow Type을 No Shadows로 변경

 

 

Effects를 클릭하면 엄청 많은 자료가 나온다. 그중에 Projectors만 체크하고 Import

All을 누르면 전부 체크되고 None을 누르면 체크가 다 풀린다.
임포트되면 Project 뷰에 Standard Assets 폴더가 생성된다.

Player에 드래그해서 넣는다.

 

범위 설정 Near Clip plane 위, 

Far Clip plane 아래 범위를 조절 가능하다.

 

add Layer를 눌러서 8번째 레이어에 Player등록

 

설정

 

결과 동영상

 

반응형