목차
속성에 대한 설명
카메라쉐이크 속성 틀
근데 이 버튼들이 음악을 나오게 하거나 있는게 아니라, 그냥 버튼이 있는것 뿐임
재생 버튼이면 재생이 된느게 아니라, 그냥 버튼이름이 재생인거임
근데 이제 재생을 '누를지' 뒤로감기를 '누를지' 는 다름! 이것들은 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를 선택한 후!
Create 클릭!
메인카메라에 보면 애니메이터도 생성되어있음
근데 애니메이'터'가 아니라, 에니메이'션' 컴포넌트가 있어야 함!
그러니까 방금 한 것들
다 지워보자 아까만든것들과 Main 카메라에 있는 Animator 를 다 지움!
Add Component 해서 Animation 컴포넌트를 추가 한다!
근데 Animation 은 None 이라고 되어있으니 만들어진 CS_Fire 를 넣어주자!
Add Property 를 눌러보면, 이제 MainCamera 에 붙어있는 속성들이 나옴!
총을 위아래를 움직여서 탕탕하는 느낌만 주자
위아래를 회전시키려면 Rotation 을 조정해줘야 함!
여기서 마우스휠을 계속 올려서 프레임단위로 볼 수 있게 해보자!
각 프레임에서 더블클릭하면 이 마름모들이 생김!
여기서 녹화버튼을 누른상태로 설정을 해줘야 설정이 바뀜!
녹화버튼을 눌러주자
키프레임에 하나씩 만듦 더블클릭해서
프레임 첫 번째에는 -2만큼
프레임 두 번째에는 1만큼
프레임 세 번째에는 -1만큼
프레임 네 번째에는0만큼
애니메이션 창에 재생해보면 화면이 흔들리는걸 알 수 있음
이제 스크립트를 생성해서 제어해보자
CS_Sine 을 복제해서 Animation 하나 만듦!
Animation 버전의 Play 와 Stop 을 생성해주었다.
쉽게 생각해서, Play 에서는, transform 에 Animation 컴포넌트를 받아와서
Play 를 시켜주는거임
이제 Animation 스크립트를 만들었으니 CameraShake 에서 시작할 때 생성해주는 코드를 넣는다
또한, PlayCameraShake() 함수에서
지금까지 애니메이션이 아닐 때 코루틴을 실행시키는 코드를 넣었으니
else
부분에서는 직접 함수를 호출하는 코드를 넣자!
참고로 여기 적혀있는 cameraShake 는 CameraShakeBase 클래스 인데,
부모클래스에서 같은 함수이름의 Play 를 호출해도 다형성 때문에 자식꺼로 나옴!
어떻게 자식꺼로 나오나면, Start 부분에서 CS_Animation 스크립트를 생성했으니 그걸로 나온다
그러니까 유니티에서 재생을 누르기 전에 항상 정해놓고 시작해야함.
재생 누른상태에서
이거 바꿔도 이미 생긴게 있기 때문에 적용이 안될거임
처음걸로 적용 된다!
여튼 에디터상에서 재생버튼 누르기 전에 이렇게 두면 끝!
Camera ShakeType 을 Animation 으로 바꾸고,
Animation 컴포넌트에 Play Automatically 체크를 해제 해줌! 내가 쏠 때만 해주야 하니까
이젠 잘 됨!!
반동 위치값도 주기
이건 앞뒤로 할 예정이다.
위치가 움직일거니까, Position 을 추가하자!
이렇게 아까 Rotation 한것처럼 4개에 프레임에 앞뒤로 움직여야 하니까
각 프레임에
-2, 1 , -1 , 0
이렇게 z값에 넣어준다
근데 여기서 문제가 생긴다.
Camera 가 이상한곳으로 가서 흔들림,,?
그건
그럼 어떻게 해야할 까??
Main Camera 에 빈 게임오브젝트를 생성한다.
그 후, GameObject 를 밖으로 꺼내고
MainCamera 를 그 안으로 집어 넣는다
지금 뭐한거냐면,,
Main Camera 의 위치에 있었던 GameObject 를 만들어주고, MainCamera 를 그 안으로 넣음 으로써
MainCamera 는 자기가 있었던 위치에 상대좌표로 만들어진다.
그 말은? 자기위치에 상대좌표로 되니까
여기서 4개의 프레임에 각각 조금씩만 움직여 줘야 하니까
한 -0.2, 0.1, -0.1 , 0
을 Position.Z 값에 넣어서 사용하자!
Rotation 도 위 방법이랑 똑같이 해주어 수정하자!
그리고, CamRotate 와 CamFollow 스크립트를 GameObject 에 넣어주어, 애니메이션에서
사용하는 카메라의 움직임 제어를 코드에서 영향을 못미치게 하자!
'3D_FPS' 카테고리의 다른 글
8_18 (속성 사용) CameraShakeBase,CameraShake, CS_Random, CS_Sine (0) | 2022.08.18 |
---|---|
08_17 (패트롤 기능구현, Occulusion , View Frustum Culling) (0) | 2022.08.17 |
08_16 애니메이션 IK , NevMesh (0) | 2022.08.16 |
08_12 Player 애니메이션 구현. Move, Attack, CrossFade (0) | 2022.08.13 |
08_11 (코루틴의 전반적인 설명, Damage() 코루틴으로 구현) (0) | 2022.08.12 |