목차
CameraShakeBase 속성 틀 만들기
이렇게 3가지를 알아볼거임!
CameraShake 폴더를 하나 생성!
이제 틀을 만들거임!
CameraShakeBase 스크립트를 생성하고,
자식에서 쓸 변수와 함수를 만들거임!!
여기서 다른데서 쓸거를 정리한다고 생각하자!
상속 이용해 볼거임!
MonoBehaviour 를 지우자!
MonoBehaviour 의 상속을 안받아도 됨!
이게 부모클래스가 될 예정이기 때문!
class 위에 struct (구조체) CameraShakeInfo 코드를 넣는다!
여기에다가 이제 shake 에서 쓸 변수들을 넣을거임!
나중에 에디터에서 이 변수들을 수정해서 카메라 흔들림을 조정해야함!
구조체를 에디터에 노출 하고싶을때는 System.Serializable 을 넣는다!
나중에 이 구조체를 다시 선언 할건데,
그때 선언 하면서 [SerializeField] 까지 넣어주면
나중에 에디터에서 이렇게 볼 수 있다!
CameraShakeBase 클래스로 다시 와서
카메라가 흔들리고나서 다시 초기위치로 가야하니까, 초기위치 기억변수를 넣자!
(초기위치로 가지 않으면 흔들려있는채로 멈출거임! 이상한데를 바라보면서)
위치나 다른 속성을 다시 초기화 시켜줄 수 있는 Init 을 만들자.
미래에 쓸 예정이라 오버라이딩을 위해 virtual 을 사용!
(참고) 부가설명
그니까 이제 Init 이라는 이름의 함수를 다른 스크립트에서 쓸 예정인데
CS_Random 에서도 Init 이라는 이름의 함수를 쓸거고
CS_Sine, CS_Animation 에서도 다 같은 이름의 함수를 쓸거임
근데 같은 함수라서, 똑같은 이름, 비슷한 역할을 할 건데
CS_Random , CS_Sine, CS_Animation 에서 구현하는 방법은 당연히 다르겠지?
그럴 때 오버라이딩을 하는거임
Init 뿐만 아니라, Play, Stop 도 오버라이딩으로 생성!
this.origiinnPos 는 내꺼,
그냥 originPos 는 함수안에 있는 originPos!!
CS_Random 생성
이제 카메라쉐이크 랜덤을 생성해보자!
스크립트 생성!
MonoBehaviour 를 지우고 CameraShakeBase 를 넣자!
그래서 CameraShakeBase 에 있는 변수들과 선언된 함수들을 이용할거임!
잠시 CameraShakeBase 에 가서 이거 protected 로 바꿈!!
보호시켜서만 쓸거임!
(참고) 접근 제한자
여기에서 CS_Random 에서 쓸 Play 와 Stop 의 함수들을 정의 한다.
CameraShake.cs 생성
이제 여기서
만들어진 Shake 의 함수를 호출할거임!
카메라를 넣어줄 수 있는 스크립트를 만들어야 함!
CameraShakeType 을 넣어서 나중에 에디터에서 선택하게 만들거임!
이씨 를 부르면 이씨들이 다 나와서 하는것 처럼, 부모안에 있기 때문에 그게 실행 될 수 있음!
그렇기 때문에 virtual override 쓴거임!
그니까,
여기에서 Play() 함수를 선언만 하고 다른 CS_Random 뭐 이런데서 다시 재정의 해줬었음
그러면 원래는 CS_Random 에 있는 함수를 불러줘야 사용할 수 있는거 아닌가?
라고 생각 할 수 있지만
그냥 그 부모(CameraShakeBase) 에 있는 Play() 를 불러서 사용해도 됨!
어떤식으로 이루어 지는지 알아보자
Factory Method 로 스크립트를 생성한다!
이렇게 시작할 때 생성하게되면
부모에 있는 Play 를 불러도 그 자식(생성된) 에 있는 Play 함수가 호출 되는거임!
이제 어떤 카메라를 쓸지 Fatory Method 를 이용해서 사용해보자!
팩토리 메소드는 객체생성역할을 함.
CS_Random() 을 return 하고있음. 이게 객체지향의 다형성 때문임!
이게 있어야 컴퓨터가 Play 중에 어떤 종류의 Play 를 실행시켜 줄건지 알 수 있음
Random? Sine?
그리고 시작 지점도 정해주고.
이제 코루틴을 만들어서 실행 하게 해보자!
이 방식은 Random 방식과 Sin방식에서만 사용 할거임!
여기 있었던 시작지점을
여기로 이동시켜주자!
플레이 할 때마다 시작지점을 정해야함!
그래야 플레이가 끝나고 클릭을 눌렀던 지점으로 갈 수 있음!
애니메이션이나 다른건 코루틴으로 하면 안되기 때문에 Type 에 따라서 실행 방법을 다르게 해보자!
TargetCamera 자기 자신 넣고
Amplitude 를 15 정도로 넣고 실행해보면 화면이 흔들리는걸 확인 할 수 있음!
CS_Sine 생성
Sine 으로 Shake 해보기!
sine 으로 할 때는 Amplitude 를 엄청 적게 놓고
Sin Speed 값을 좀 키워줘야 이쁘게 나옴!
'3D_FPS' 카테고리의 다른 글
8_19 (Camera Shake_Animation) (0) | 2022.08.19 |
---|---|
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 |