반응형

* 간단 요약

카메라 두대로 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 축 움직일 랜덤값
            float xrand = Random.Range(-shaking, shaking);
            float yrand = Random.Range(0, shaking);
            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 에는 커지는 영향이 없다.카메라 한대쓰는것이랑 같다.

 

 

 

 

 

 #카메라 두대 사용하여 연출햇을떄

 

 

 

 

 

 

# 카메라한대로 카메라 흔들기 했을때

 

 

반응형

+ Recent posts