[TIL] 26일 차 - Unity 숙련주차 강의 정리

ChangBeom·2025년 3월 4일

TIL

목록 보기
27/53
post-thumbnail

[1. 스카이박스]

게임 세계의 배경을 둘러싸는 환경 매핑 기술이다. 큐브 맵(Cube Map)과 구체형 스카이박스(Sphere Map) 등이 있다.

  • 스카이 박스는 6개의 텍스처로 구성된 큐브 맵 또는 하나의 구체로 텍스처가 매핑된 구체형 스카이박스로 구성된다.
  • Unity에서는 씬의 배경으로 사용되며, 게임 환경을 확장시키는 데 활용된다.
  • 주로 하늘, 구름, 산 등의 자연적인 배경을 표현하는 데 사용된다.
  • 미리 만들어진 스카이박스를 사용하거나 직접 만들어서 Unity에서 적용할 수 있다.
  • 게임 중에 스카이박스를 동적으로 변경하여 낮과 밤 등의 시간대나 특정 이벤트에 맞게 배경을 변화시킬 수 있다.
  • 성능에 영향을 미치므로 최적화에 주의해야 한다.

[2. Rigidbody - ForceMode]

Rigidbody 컴포넌트를 사용하여 게임 오브젝트에 물리적인 힘을 가할 때, 이 ForceMode를 사용하여 다양한 힘 적용 방식을 설정할 수 있다.

주로 사용하는 것은 4가지가 존재한다.

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);

이러한 ForceMode를 적절히 활용하면, 게임 오브젝트에 원하는 물리적인 움직임과 효과를 부여할 수 있다.


[3. TryGetComponent]

TryGetComponent는 게임 오브젝트의 컴포넌트를 가져오는 기능인데, 특정 컴포넌트가 게임 오브젝트에 연결되어 있는지 확인하고, 연결되어 있을 경우에만 해당 컴포넌트를 가져온다.

public bool TryGetComponent<T>(out T component) where T : Component;
  • T : 가져오려는 컴포넌트의 타입. MonoBehaviour를 상속한 컴포넌트는 모두 사용 가능
  • component : 컴포넌트를 가져올 때 사용되는 out 매개변수

TryGetComponent는 컴포넌트가 없어도 예외를 발생시키지 않는다. 이를 통해 더 안전하게 컴포넌트를 가져올 수 있다.


[4. Coroutine]

Coroutine은 작업을 다수의 프레임에 분산하는 메서드이다. Unity에서 코루틴은 실행을 일시정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드이다.

주의할 점은 코루틴은 스레드가 아니라는 점이다. 코루틴의 동기 작업은 여전히 메인 스레드에서 실행된다.


[5. Light]

Light Source란 게임 또는 3D 렌더링에 광원을 추가하는 데 사용된다. 이것은 특정 위치 또는 방향에서 발생하는 빛을 나타낸다.

  • 유형
    • Point Light : 모든 방향으로 균등하게 빛을 발산하는 광원
    • Directional Light : 무한히 멀리 위치하여 한 방향으로만 빛을 발산하는 광원
    • Spot Light : 씬의 한 점에 위치하여 원뿔 모양으로 빛을 발산하는 광원
    • Area Light : 표면 영역 전체에 걸쳐 균등하게 모든 방향으로 빛을 방출하는 광원. 사작형의 한쪽 면에서만 빛을 방출한다고 생각하면 된다.
  • 속성 : 위치, 방향, 강도 (intensity), 색상 (color), 범위 (range), 각도 (angle) 등이 있다.
  • 그림자 : 라이트와 객체 사이의 관계에 따라 그림자는 라이트가 부딪히는 객체 뒤에 생성.
  • 성능 : 라이트는 렌더링 성능에 큰 영향을 미친다. 특히 그림자가 포함된 경우 렌더링 성능에 부정적인 영향을 미칠 수 있어 최적화에 신경 써야 함.
  • Lighting Intensity Multiplier : 실제 환경의 빛을 조절
  • Reflecting Intensity Multiplier : 실제 오브젝트에 반사되는 정도를 조절

[6. AnimationCurve]

AnimationCurve란 애니메이션의 Keyframe을 사용하여 값을 보간(interpolate) 하는 데 사용되는 클래스이다. 이 클래스를 사용하여 시간에 따라 값을 부드럽게 변화시키는 커브를 정의하고, 이를 기반으로 애니메이션을 만들 수 있다.

AnimationCurve는 주로 애니메이션 시간에 따른 값을 정의하는 데 사용되며, 특히 더 복잡한 애니메이션을 제어하기 위해 사용되는 경우가 많다. 예를 들어, 오브젝트의 움직임, 크기 조정, 회전 등에 대한 애니메이션을 정의할 때 사용한다.

  • 기본 구성 요소
    • Keyframe : 시간에 따른 값을 정의하는 점을 뜻한다. Keyframe은 시간(t)과 해당 시간에 대응하는 값(value)으로 이루어진다.
    • interpolation Mode (보간 방식) : 인접한 키프레임 사이의 값을 보간하는 방법을 지정한다. 기본적으로는 Cubic Bezier 보간이 사용되며, 선형, 스텝 등 다양한 보간 방식을 선택할 수 있다.

<예시> : AnimationCurve 주요 메서드 사용법

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    private AnimationCurve curve;

    private void Start()
    {
        // 새로운 AnimationCurve 생성
        curve = new AnimationCurve();

        // 키프레임 추가 (시간, 값)
        curve.AddKey(0f, 0f);
        curve.AddKey(1f, 1f);
    }

    private void Update()
    {
        // 시간에 따라 값을 보간하여 출력
        float time = Time.time;
        float value = curve.Evaluate(time);
        Debug.Log("Time: " + time + ", Value: " + value);
    }
}
  • Add Key : 새로운 Keyframe 추가
  • Evaluate : 특정 시간에 해당하는 값을 보간하여 반환
  • keys : Keyframe의 배열을 가져온다. 이를 통해 Keyframe을 추가, 수정, 삭제할 수 있다.

0개의 댓글