ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 유니티 숙련주차 2
    TIL 2024. 5. 27. 21:25

    TryGetComponent

    unity에서 사용하는 메서드로, 게임 오브젝트의 컴퍼넌트를 가져오는 기능

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

    Public bool TryGetComponenet<T>(out T component) where T : componenet;

     

    T: 가져오려는 컴포넌트 타입. Monobehaviour를 상속한 컴포넌트는 모두 사용 가능

    componenet: 컴포넌트를 가져올 떄 사용되는 out 매개 변수

     

    예시 코드

    using UnityEngine;
    
    public class ExampleScript : MonoBehaviour
    {
        private void Start()
        {
            Rigidbody rb;
            if (TryGetComponent<Rigidbody>(out rb)) //있다면 원하는 동작 실행
            {
                rb.AddForce(Vector3.up * 100f); 
            }
            else
            {
                Debug.Log("Rigidbody 컴포넌트가 없습니다.");
            }
        }
    }

    TryGetComponenet는 컴포넌트가 없어도 예외를 발생시키지 않는다.

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

     

    기존에 GetComponenet가 잘 수행되지 않으면 NullReference가 뜨게 되었는데 TryGetComponenet를 사용하게되면 

    그런 오류를 좀 더 방지할 수 있지 않을까 싶다.

     

    카메라 절두체

    피라미드 같은 모양의 윗 부분을 밑면에 병렬로 잘라낸 입체 형상인 절두체를

    카메라 랜더링에 적용한 것을 말한다.

     

    시야범위(Fov)와 Near Clipping Plane, Far Clipping Plane 등의 값을 조절해 절두체의 모양을 바꿀 수 있으며, 랜더링 할 범위를 지정해줄 수 있다.

     

    https://docs.unity3d.com/kr/2019.4/Manual/UnderstandingFrustum.html

     

    뷰 절두체 이해 - Unity 매뉴얼

    절두체 는 피라미드 같은 모양의 윗부분을 밑면에 병렬로 잘라낸 입체 형상을 가리킵니다. 이는 원근 카메라에 의해 보여지고 렌더링되는 영역의 형상입니다. 다음의 실험 예제를 통해 그 이유

    docs.unity3d.com

     

    Light

    라이트 소스

    게임 또는 3D랜더링에 광원을 추가하는 데 사용 

    특정 위치 또는 방향에서 발생하는 빛을 나타낸다.

     

    종류

    • 점 라이트 (Point Light) : 모든 방향으로 균등하게 빛을 발사
    • 방향성 라이트 (Directional Light) : 무한히 멀리 위치하여 한 방향으로만 빛을 발산
    • 스포트라이트 (Spot Light) : 씬의 한 점에 위치하여 원뿔 모양으로 빛을 발산
    • 면 라이트( Area Light) : 표면 영역 전체에 걸쳐 균등하게 모든 방향으로 빛을 방출, 사각형의 한 면에서만 빛을 방출

    속성

    위치, 방향, 강도, 색상 범위 ,각도 등

    그림자

    라이트와 객체 사이의 관계에 따라 라이트가 부딪히는 객체 뒤에 생성된다.

    성능

    라이트는 렌더링에 큰 영향을 미침, 특히 그림자가 포함된 경우 최적화에 신경 써야 한다.

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

    Refecting Intensity Multipluer : 실제 오브젝트에 반사되는 정도를 조절

     

    AnimationCurve

    Unity에서 애니메아션의 키 프레임을 사영하여 값을 보간하는데 사용되는 클래스

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

     

    구성요소

    키프레임(Keyframe) 

    시간에 따른 값을 정의하는 점을 의미. 시간과 해당 시간에 대응하는 값으로 이루어짐

    보간방식(Interpolation Mode) 

    인접한 키프레임 사이의 값을 보간하는 방법을 지정

    기본적으로 Cublic Bezier 보간이 사용되며 선형, 스텝 등 다양한 보간 방식 건택 가능

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

    Evaluate 특정 시간에 해당하는 값을 보간하여 반환

    Keys 키 프레임의 배열을 가져옴, 이를 통해 키 프레임들을 추가, 수정, 삭제할 수 있다

     

    AnimationCurve는 주로 애니메이션 시간에 따른 값을 정의하는데 사용

    특히 더 복잡한 애니메이션을 제어하기 위해 사용되는 경우가 많다.

    ex) 오브젝트의 움직임, 크기 조정, 회전 등

     

    인터페이스 복습

    인터페이스를 통해 클래스들은 공통적인 동작을 정의하고, 이러한 동작들을 구현하는 클래스들은 해당 인터페이스를 구현함으로써 공통 규약을 준수할 수 있다.

     

    주요 특징

    1. 추상화

    인터페이스는 추상적인 개념으로 실제 구현된 메서드가 없고 메서드의 시그니처 만을 가짐

    따라서 인터페이스는 인스턴스화될 수 없으며 구현체가 필요

    2. 메서드 시그니처

    인터페이스는 구현 클래스가 반드시 구현해야하는 메서드들의 시그니처를 정의한다.

    메서드의 이름, 매개변수, 반환 타입 포함

    3. 다중 상속 가능

    클래스는 하나의 클래스만 상속받을 수 있지만, 인터페이스는 여러 개를 동시에 상속 받을 수 있다.

    4. 강제적 구현

    클래스가 인터페이스를 구현하면, 인터페이스에서 정의한 모든 메서드를 반드시 구현해ㅑㅇ 한다

    이로 인해 클래스는 인터페이스에 정의된 동작을 강제로 구현하게 된다

    5. 인터페이스 간 확장

    인터페이스는 다른 인터페이스를 확장할 수 있다.

    이를 통해 더 큰범위의 공통 동작을 정의할 수 있다.

     

    인터페이스를 사용하는 이유

    코드는 결합도가 낮아야한다.

    결합도가 높다는 것은 클래스 간 의존도가 높다는 것으로 유연성이 떨어지게 된다.

    구체적인 구현 클래스가 아닌 작은 단위의 여러 인터페이스를 사용해야한다.

     

    협업의 기준

    1. 개발 기간 단축

    2. 표준화가 가능

    3. 독립적인 프로그래밍 가능

     

     

    강의를 따라가면서 스크립트를 만힝 생성하기 되는데

    따라쓰기에 바빠서 지금 당장 생성하는 코드도 뭐에 쓰이는지 잘파악이 되지 않아

    지금 까지 따라간 코드를  대충 정리해봤다.

     

    ~11강 까지

     

    'TIL' 카테고리의 다른 글

    [TIL] UGUI  (0) 2024.05.29
    [TIL] 유니티 숙련주차 3  (0) 2024.05.28
    [TIL] 유니티 숙련주차 1  (0) 2024.05.24
    [TIL] 객체지향 코드 설계 2  (0) 2024.05.23
    [TIL] 유니티 문법활용  (0) 2024.05.22
Designed by Tistory.