본문 바로가기

3D_FPS

8_19 (Camera Shake_Animation)

목차


속성에 대한 설명

 

카메라쉐이크 속성 틀

Base 는 버튼이 눌린다. 라는 기능이 있음

근데 이 버튼들이 음악을 나오게 하거나 있는게 아니라, 그냥 버튼이 있는것 뿐임

재생 버튼이면 재생이 된느게 아니라, 그냥 버튼이름이 재생인거임

 

근데 이제 재생을 '누를지' 뒤로감기를 '누를지' 는 다름! 이것들은 CS_Random, Cs_Sine

부모와 자식의 관계

 

객체지향의 3가지 특징

OOP

객체지향개발(Object Oriented Programming)

 

1. 상속, 2. 캡슐화 3. 다형성

1 => 모든것의 최상위 는 객체/ Object 임

오브젝트 -> 영호 이 예는 다른애들도 오브젝트니까 이상할 수 잇는데

영호 -> 오브젝트  는 포함되는 느낌이라 된다!

그래서 자식을 부모로 할때는 당연히 포함되니까 괜찮은데

부모를 자식으로 넣어줄 때는 강제 형 변환이 필요함..!

 

이런방식을 다형성
이런느낌을 상속 이라고 함

캡슐화의 핵심은 감춰놓은거임! (Get, Set)

 

 

캡슐화 설명

 

상속에 대한 설명

 

다형성에 대한 설명


OOP 다중상속

=> 부모가 여러개 인것!!

A라는 클래스가 있고, B라는 클래스가 있음

 

A가 부모 면

이렇게 말 할 수 있음
부모가 셋이면,.,?

다중 상속은  C++ 에서 가능하다고 함 Class 를 만들 때 

C++ 은 class A; B,C,D 이런식으로 부모를 추가 할 수 있다

근데 이게 A가 C 를 상속해버리고 A 가 B 한테 상속되면??

내 자식한테 내가 상속당하고 있는건가?

내 자식이 부모였던거야? 어휴

아이고 복잡해라.. 문제를 찾지도 못함

 

그래서 C# 에서는 그렇게 안되게 해놨음!


아트들 밤새우게 만드는법

 

아트가 프로그래머한테 작업요청하는모습...

우리가 다 만들어주는데 아트 밤새우게 만드는법

 

우리가 애니메이션으로 만들어서 그냥 보내버리자

 

카메라 흔들림에는 많은 종류가 있음

종류별로 패턴별로 아트한테 맡겨버리면 훨씬 효율적일 수 있다.


Animation 으로 화면 흔들림 제작하기

 

Class 만들기전에 애니메이션 클립을 만들어보자.

 

Main Camera를 선택한 후!

 

Window -> Animation 애니메이션

Create 클릭!

저장 ㄱㄱ
이런게 생성됨

메인카메라에 보면 애니메이터도 생성되어있음

 

근데 애니메이'터'가 아니라, 에니메이'션' 컴포넌트가 있어야 함!

 

그러니까 방금 한 것들

다 지워보자 아까만든것들과 Main 카메라에 있는 Animator 를 다 지움!

Add Component 해서 Animation 컴포넌트를 추가 한다!

다시 크리에이트 ㄱㄱ

 

CS_Fire 라고 하고 저장!
Animation 열어보면 이렇게 들어가 있음

근데 Animation 은 None 이라고 되어있으니 만들어진 CS_Fire 를 넣어주자!

왼쪽에 CS_Fire 를 Animation 에 둘다 넣어진 상황
Main 카메라에 붙어있는 컴포넌트 들

Add Property 를 눌러보면, 이제 MainCamera 에 붙어있는 속성들이 나옴!

 

총을 위아래를 움직여서 탕탕하는 느낌만 주자

위아래를 회전시키려면 Rotation 을 조정해줘야 함!

Rotation 에 + 클릭

 

1초에 있는거 지워버리자!

여기서 마우스휠을 계속 올려서 프레임단위로 볼 수 있게 해보자!

각 프레임에서 더블클릭하면 이 마름모들이 생김!

 

마름모가 생긴모습

 

녹화버튼 클릭!

여기서 녹화버튼을 누른상태로 설정을 해줘야 설정이 바뀜!

녹화버튼을 눌러주자

 

키프레임에 하나씩 만듦 더블클릭해서

 

프레임 첫 번째에는 -2만큼

 

이거 잘못넣은거임

프레임 두 번째에는 1만큼

 

잘못넣은거임

프레임 세 번째에는 -1만큼

 

프레임 네 번째에는0만큼

애니메이션 창에 재생해보면 화면이 흔들리는걸 알 수 있음

여기 재생버튼

 

이제 스크립트를 생성해서 제어해보자

 

CS_Sine 을 복제해서 Animation 하나 만듦!

Animation 버전의 Play 와 Stop 을 생성해주었다.

쉽게 생각해서, Play 에서는, transform 에 Animation 컴포넌트를 받아와서

Play 를 시켜주는거임

 

CameraShake.cs 에서

이제 Animation 스크립트를 만들었으니 CameraShake 에서 시작할 때 생성해주는 코드를 넣는다

또한, PlayCameraShake() 함수에서

지금까지 애니메이션이 아닐 때 코루틴을 실행시키는 코드를 넣었으니

else 

부분에서는 직접 함수를 호출하는 코드를 넣자!

 

참고로 여기 적혀있는 cameraShake 는 CameraShakeBase 클래스 인데,

부모클래스에서 같은 함수이름의 Play 를 호출해도 다형성 때문에 자식꺼로 나옴!

 

어떻게 자식꺼로 나오나면, Start 부분에서 CS_Animation 스크립트를 생성했으니 그걸로 나온다

그러니까 유니티에서 재생을 누르기 전에 항상 정해놓고 시작해야함.

 

재생 누른상태에서 

이거 바꿔도 이미 생긴게 있기 때문에 적용이 안될거임

처음걸로 적용 된다!

 

 

여튼 에디터상에서 재생버튼 누르기 전에 이렇게 두면 끝!

Camera ShakeType 을 Animation 으로 바꾸고,

Animation 컴포넌트에 Play Automatically 체크를 해제 해줌! 내가 쏠 때만 해주야 하니까

 

CS_Animation 에서 Play 부분에서 Stop 을 하나 넣어주고 해보자!

이젠 잘 됨!!

 


반동 위치값도 주기

 

이건 앞뒤로 할 예정이다.

위치가 움직일거니까, Position 을 추가하자!

카메라의 위치 모습

이렇게 아까 Rotation 한것처럼 4개에 프레임에 앞뒤로 움직여야 하니까

 

각 프레임에

-2, 1 , -1 , 0 

이렇게 z값에 넣어준다

 

근데 여기서 문제가 생긴다.

 

Camera 가 이상한곳으로 가서 흔들림,,?

 

그건 

이 위치가 초기값 이기 때문

그럼 어떻게 해야할 까??

Main Camera 에 빈 게임오브젝트를 생성한다.

그 후, GameObject 를 밖으로 꺼내고

MainCamera 를 그 안으로 집어 넣는다

 

지금 뭐한거냐면,,

 

Main Camera 의 위치에 있었던 GameObject 를 만들어주고,  MainCamera 를 그 안으로 넣음 으로써

 

MainCamera 는 자기가 있었던 위치에 상대좌표로 만들어진다.

 

그 말은? 자기위치에 상대좌표로 되니까

(0,0,0) 이 되버림

 

 

이거 지우고 다시 Position 생성해보자
이제 다 0에서 수정하면 된다.

 

여기서 4개의 프레임에 각각 조금씩만 움직여 줘야 하니까

한 -0.2, 0.1, -0.1 , 0

을 Position.Z 값에 넣어서 사용하자!

 

Rotation 도 위 방법이랑 똑같이 해주어 수정하자!

 

그리고, CamRotate 와 CamFollow 스크립트를 GameObject 에 넣어주어, 애니메이션에서 

사용하는 카메라의 움직임 제어를 코드에서 영향을 못미치게 하자!