카테고리 없음

25.03.06(목) - TIL 32일차 Unity 입문

rxo2 2025. 3. 6. 21:11

TryGetComponent 란  Unity에서 사용하는 메서드로, 게임 오브젝트의 컴포넌트를 가져오는 기능을 제공합니다.

이 메서드를 사용하면 특정 컴포넌트가 게임 오브젝트에 연결되어 있는지 확인하고,

연결되어 있다면 해당 컴포넌트를 가져올 수 있습니다. 컴포넌트가 없어도 예외를 발생시키지 않고, 컴포넌트가 있으면

해당 컴포넌트를 가져와서 사용할 수 있습니다. 이를 통해 더 안전하게 컴포넌트를 가져오고 사용할 수 있습니다.


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.");
        }
    }
}

 

Coroutine 이란

작업을 다수의 프레임에 분산하는 메서드. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드입니다. 하지만 코루틴은 스레드가 아니다. 코루틴의 동기 작업은 여전히 메인 스레드에서 실행됩니다.

 

 

private IEnumerable FadeAway() // 코루틴을 쓰기위해 IEnumerable 키워드를 통해 작성
{
    float starAlpha = 0.3f; // 연속적인 변화값을 적용시키기
    float a = starAlpha;

    while (a > 0)
    {
        a-=(starAlpha / flashSpeed) * Time.deltaTime; // 점점 옅어지게
        image.color = new Color(1f, 100f/255f, 100f / 255f, a);
        yield return null; // 코루틴은 항상 반환해줘야 하며 없을땐 null 쓴다
    }
    image.enabled = false;
}

 

Light 조명 구현

점 광원(Point Light), 방향성 라이트(Directional Light), 스포트라이트(Spot Light), 면 광원(Area Light) 이 있고

속성은 위치, 방향, 강도(intensity), 색상(color), 범위(range), 각도(angle) 등이 있다.

Lighting Intensity Multiplier : 실제 환경의 빛을 조절한다.

Reflecting Intensity Multiplier : 실제 오브젝트에 반사되는 정도를 조절한다.

렌더링 성능에 만은 부하가 걸려 최적화 신경써줘야함

 

 

void Update()
{
    time = (time + timeRate * Time.deltaTime) % 1.0f;
    // % 1.0f를 사용하여 시간이 1.0을 초과하면 0으로 돌아가도록 순환(Loop) 처리.
}

 

 void UpdateLighting(Light lightSource, Gradient gradient, AnimationCurve intensityCurve)
 {
     float intensity = intensityCurve.Evaluate(time);//현재 시간(time)에 해당하는 밝기 값을 가져옴

     lightSource.transform.eulerAngles = (time - (lightSource == sun ? 0.25f : 0.75f)) * noon * 4f;
     // - 태양(sun)과 달(moon)의 회전 각도를 조절하여 낮과 밤을 표현
     // - 태양(sun)은 0.25f (6시) 지점에서 시작
     // - 달(moon)은 0.75f (18시) 지점에서 시작
     // - time 값에 따라 회전하도록 설정
 }

 

 

[CreateAssetMenu]는 Unity에서 새로운 ScriptableObject를 쉽게 생성할 수 있도록 해주는 속성

Unity의 Assets 메뉴에서 해당 ScriptableObject 생성 가능

ScriptableObject는 데이터를 저장하는 용도의 클래스

일반적인 MonoBehaviour와 다르게 씬(Scene)에 존재하지 않고, 파일로 저장 가능

아이템, 스킬, 캐릭터 능력치, 퀘스트 데이터 등을 저장하는 데 많이 사용

 

 

[Serializable] 란 Unity에서는 클래스를 Inspector 창에서 편집할 수 있도록 만들기 위해 사용됩니다.(직렬화)

 

먼저 배웠던 SerializeField 를 안쓰고 Serializable 를 사용하는 이유

SerializeFieldprivate 필드도 Inspector에서 보이도록 설정

Serializable 클래스 전체Unity Inspector에서 인식하도록 만듦