TryGetComponent, 카메라 절두체, 코루틴, 라이트

ggm-_-·2024년 10월 24일
0

TIL (Tody I Learn)

목록 보기
23/27
post-thumbnail

2024.10.24(목)

TryGetComponent

지금까지 GetComponent를 이용해 Component들을 가져왔었는데 TryGetComponent를 이용해 가져오는 법을 알아보겠다.
TryGetComponent<T>(out component)는 T타입의 컴포넌트가 있으면 true를 반환하고 컴포넌트를 out으로 가져온다.
T타입의 컴포넌트가 없으면 false를 반환한다.

  • 사용하는 이유: 컴포넌트가 없어도 예외를 발생시키지 않고 안전하게 처리한다.

  • 예제 코드

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    private void Start()
    {
        // 게임 오브젝트에 Rigidbody 컴포넌트가 있는지 확인하고 가져옵니다.
        Rigidbody rb;
        if (TryGetComponent<Rigidbody>(out rb))
        {
            // Rigidbody 컴포넌트가 있다면 해당 컴포넌트로 원하는 동작을 수행합니다.
            rb.AddForce(Vector3.up * 100f);
        }
        else
        {
            // Rigidbody 컴포넌트가 없다면 다른 처리를 수행합니다.
            Debug.Log("Rigidbody component not found.");
        }
    }
}

카메라 절두체(Camera Frustum)

❓ 절두체란? 기하학에서 절두체(frustum)는 입체(보통 원뿔이나 각뿔)를 절단하는 하나나 두 평행면 사이의 부분이다. (from 위키백과)

  • 절두체 예시 (from 위키백과)

카메라 절두체는 카메라의 시야 영역을 정의하는 3차원 기하학적 모양이다.
카메라가 화면에 표시할 수 있는 공간을 설명한다.

시야 범위(FOV)와 Far clipping plane, Near clipping plane을 조정해 절두체의 모양을 바꿔서 렌더링할 범위를 조절할 수 있다.

  • Far clipping plane: 카메라와 가까운 평면으로, 이 평면보다 카메라에 가까운 객체는 렌더링되지 않는다.
  • Near clipping plane: 카메라와 멀리 있는 평면으로, 이 평면보다 카메라에서 먼 객체는 렌더링되지 않는다.
  • Far clipping plane 과 Near clipping plane 그림 (form Unity Documentation)

코루틴(Coroutine)

코루틴을 한 마디로 설명하자면 '비동기적 동기' 라고 할 수 있다.
코루틴은 실제로는 동기적으로 작동하지만, 작동하는 방식은 비동기적 작동을 모방한다.

IEnumerator 를 이용해 코루틴을 사용할 수 있다.

  • 코루틴 예제
using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class DamageIndicater : MonoBehaviour
{
    public Image image;
    public float flashSpeed;

    private Coroutine coroutine;
    // Start is called before the first frame update
    void Start()
    {
        CharacterManager.Instance.Player.condition.onTakeDamage += Flash;
    }


    public void Flash()
    {
        if(coroutine != null)
        {
            StopCoroutine(coroutine);//이 코루틴이 실행중이면 멈추고 다시 시작
        }

        image.enabled = true;
        image.color = new Color(1f, 76f / 255f, 76f / 255f);
        coroutine = StartCoroutine(FadeAway());
    }

    //코루틴
    private IEnumerator FadeAway()
    {
        float startAlpha = 0.3f;
        float a = startAlpha;

        while(a > 0)
        {
            a -= (startAlpha / flashSpeed) * Time.deltaTime;
            image.color = new Color(1f, 76f / 255f, 76f / 255f, a);
            yield return null;
        }

        image.enabled = false;
    }
}

라이트(Light)

  • 점 광원(Point Light): 모든 방향으로 균등하게 빛을 발산
  • 방향성 라이트(Directional Light): 무한 히 멀리 위치하여 한 방향으로만 빛을 발산
  • 스포트 라이트(Spot Light): 씬의 한 점에 위치하여 원뿔 모양으로 빛을 발산
  • 면 광원(Area Light): 한쪽 면에서 모든 방향으로 균등하게 빛을 발산

공통적으로 공유하는 속성들

  • 속성: 위치, 방향, 강도(intensity), 색상(color), 범위(range), 각도(angle)
  • 그림자: intensity와 마찬가지로 최적화가 중요
  • 성능: 라이트는 렌더링 성능에 많은 영향을 미친다. 최적화가 중요하다.
    Lighting Intensity Multiplier: 환경 전체의 빛. 실제 환경의 빛을 조절한다. 해가 지고 뜨고 하는거를 여기서 조절한다고 보면 된다.
    Reflecting Intensity Multiplier: 물체에 반사되는 정도를 조절한다.
profile
미숙한 초보 게임 개발자
post-custom-banner

0개의 댓글