* 간단 요약
카메라 두대로 culling mask 이용하여 자연스러운 흔들기 연출 하겟습니다.
카메라 두대중 mainCamera 는 플레이어만 보이게하고,
subCamera 는 플레이어 제외하고 모든 오브젝트 보이게 합니다.
그리고 총쏠때(흔들 시점에) subCamera를 x,y 축위치를 랜덤으로 변경하여 흔들기를 해줍니다.
- 두카메라를 부모오브젝트에 상속
CamAxis
└ Main Camera
└ Sub Camera
- 메인 카메라에 플레이어만 Culling mask 지정
Clear flags 는 Skybox로
-서브 카메라는 Player 제외하고 모든 레이어 지정
- 플레이어 오브젝트에 레이어 지정 (플레이어 의 하부 오브젝트까지 지정해줍니다 )
-메인카메라로 확인하시면 플레이어만 보이는것을 확인할수 잇다.
- 서브카메라 보면 플레이어 제외하고 모든 오브젝트를 보이는것이 확인이 된다.
- 두카메라가 다같이 표현되어 플레이어와 모든 오브젝트가 보이는것을 확인 할수잇다.
- 이제 총을쏠때 흔들기를 하자
카메라 부모오브젝트 (CamAxis) 에 아래 스크립트를 넣자
기본적으로 CamAxis 는 Player스크립트에서 Update로 마우스 위치값을 받아 상하좌우 움직임을 하고 잇다.
이 상태에서 총쏠때 마다 Set_Shaking(일정수치) 호출해준다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
//마우스 움직임 따라 메인캠 부모 Trasform이 움직인다 =>Player.cs Update() 함수에서 호출 된다
public void FollowCamToTarget(Vector3 targetPosition)
{
//메인캠의 부모Tr pos는 마우스 포인터따라 움직인다
CameraAxis.localPosition = targetPosition;
CamOrinPos = targetPosition;
//서브캠이 흔들린다
SubCameraTransform.localPosition = ShakeVector;
}
Vector3 ShakeVector = new Vector3();
float ShakeCameraForce = 0f;
float ShakeCameraSpeed = 0f;
Vector3 CamOrinPos = Vector3.zero;
public void Set_Shaking(float shakeForce) //총 한번 쏠때마다 이 함수가 호출된다
{
// 흔들림 값 할당
ShakeCameraForce = shakeForce;
//흔들림 속도 할당
ShakeCameraSpeed = ShakeCameraForce / 2;
// 흔들기 시작
StartCoroutine(Co_Shake());
}
//카메라 흔들기 동작
IEnumerator Co_Shake()
{
while(ShakeCameraForce > 0f)
{
float shaking = 0.04f * ShakeCameraForce;
// x, y 축 움직일 랜덤값
ShakeVector = new Vector3(xrand, yrand, 0);
ShakeCameraForce -= Time.deltaTime * 10f * ShakeCameraSpeed;
yield return null;
}
//동작 완료후 제자리로
ShakeVector = Vector3.zero;
// 서브캠 제자리로
SubCameraTransform.localPosition = ShakeVector;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs |
|
|
* 카메라 두대로 사용하여 아래 첫 움짤 처럼 보이게 된다.
* 카메라 한대로 사용하여 두번쨰 움짤을 보게 되면, 플레이어만 흔들리는 것처럼 보일것이다.
이런 이유로 두대로 CullingMask를 사용하여 플레이어는 흔들리것이 보이지 않게 연출 한것이다.
* 각 카메라가 중첩되지 않은 Layer를 선택해서 렌더링 시키고 있기때문에 Batch, SetPassCall 에는 커지는 영향이 없다.카메라 한대쓰는것이랑 같다.
#카메라 두대 사용하여 연출햇을떄
# 카메라한대로 카메라 흔들기 했을때
'유니티 > 프로그래밍' 카테고리의 다른 글
[Unity] 파티클 타겟지점으로 움직이게하기 (0) | 2019.06.26 |
---|---|
[Unity] Texture2D Resize하기 (크기조정) (0) | 2019.05.07 |
[Unity] Rigidbody.RigidbodyConstraints 코드제어 (0) | 2019.04.04 |
[Unity] NavMeshAgent.SetDestination 호출후 주의사항 (0) | 2019.03.29 |
[Unity] Rigidbody.Addforce 사용 주의 및 Addforce 초기화 (0) | 2019.03.28 |