개발 TIL

5/24 부트캠프 개발 TIL (ForceMode, Ray관련, Skybox)

HJTL 2024. 5. 24. 20:59

오늘 이론

 

Rigidbody의 ForceMode

물리적인 동작에서 힘을 가할 때 사용한다.

  1. Force : 힘을 지속적으로 적용
    - 이동하거나 일정시간동안 움직일 때 사용할수 있다.
    - (코드)Rigidbody.AddForce(Vector3 Force, ForceMode.Force);
  2. Acceleration : 가속도를 적용 
    - 대시동작을 사용할때 현재 속도에서 점점 빨라지는 효과이다.
    - Rigidbody.AddForce(Vector3 Force, ForceMode.Acceleration);
  3. Impulse : 순간적인 힘을 적용 
    - 점프 동작을 할때 사용할수 있다.
    - Rigidbody.AddForce(Vector3 Force, ForceMode.Impulse);
  4. VelocityChange : 변화속도에 적용 즉 물체의 현재 속도를 변경 
    - 이거는 방향이나 속도를 갑자기 바뀔때 사용
    - Rigidbody.AddForce(Vector3 Force, ForceMode.VelocityChange);

Raycast

눈에 보이지 않는 가상 광선으로 물체 여부를 파악

종류에는 (Ray, RaycastHit, MaxDistance, LayerMask)

    public LayerMask groundLayerMask;
    ...
    bool IsGrounded()
    {
        Ray[] rays = new Ray[4]
        {
            new Ray(transform.position + ( transform.forward * .2f) + (transform.up * .01f), Vector3.down),
            new Ray(transform.position + (-transform.forward * .2f) + (transform.up * .01f), Vector3.down),
            new Ray(transform.position + ( transform.right   * .2f) + (transform.up * .01f), Vector3.down),
            new Ray(transform.position + (-transform.right   * .2f) + (transform.up * .01f), Vector3.down),
        };

        for (int i = 0; i < rays.Length; i++)
            if (Physics.Raycast(rays[i], .1f, groundLayerMask))
                return true;

        return false;
    }

이런 코드로 플레이어가 땅에 닿으면 점프를 할수 있고 공중에 있을때 점프를 거부하는 코드인데

여기서 Rays가 현재위치에서 아래 위치랑 닿는 땅이 goundLayerMask라는 레이어와 닿았으면 작용을 한다.

 

플레이어 오브젝트 인스펙터에서 GroundLayerMask를 들어가면 Player체크를 빼고 레이어를 Player로 바꾸면 공중에 있어도 점프를 할수 없는 방법도 활용할 수 있다.

 

Skybox

유니티 3D 프로젝트를 사용할 때 스카이 박스로 배경을 그리는 경우가 있는데

스카이 박스에도 종류가 있다. (정육면체형, 반구형)

정육면체형은 6 Sided, Cubemap | 반구형은 Panoramic, Procedual이 있는데 각 무슨차이를 설명하자면

 

정육면체

Exposure : Skybox의 조기래 역할

Rotation : 스카이박스를 몇도부터 그리기 시작할건지

6 Sided는 각 방향마다 텍스처들을 직접 넣어주는 방식이다.
Cubemap은 정육면체 전개도 형식

 

반구형

Panoramic은 너비가 긴 텍스처를 스카이박스에 적용하여 파노라마식으로
Procedural은 유니티 씬에서 하늘색상과 땅색상을 설정해주는 식이다
Procedural을 적용한 씬