본문 바로가기
TIL

12.20 (TIL - Unity)

by 오랑이귀엽다 2023. 12. 20.

트리거 충돌(Trigger Collision)과 콜리전 충돌(Collision Collision)

둘 다 물리 엔진에서 물체들이 서로 상호작용하는 방식을 나타내는 용어

 

콜리전 충돌(Collision Collision):

물리 엔진에서 두 물체가 서로 충돌하면서 발생하는 충돌을 말한다.

물체들이 서로 겹쳐지거나 부딪치는 순간을 말한다.

두 물체가 실제로 충돌하여 반동이나 물리적 영향을 주는 상황에서 사용

 

트리거 충돌(Trigger Collision):

이것은 충돌이 감지되지만 물리적인 반응은 일어나지 않는 충돌을 의미

트리거는 충돌이 감지되었을 때 특정한 작업을 수행하도록 만들어진다.

 

 

해시는 데이터를 효율적으로 저장하고 검색하기 위해 사용되는 특별한 알고리즘

해시 함수를 사용하면 데이터를 빠르게 비교하거나 저장할 수 있으며, 데이터의 무결성을 확인하는 등 다양한 용도로 활용

 

보통 문자열을 직접 비교할 때는 문자열 비교 연산이 필요한데, 이는 처리 속도가 느릴 수 있다.

하지만 해시값으로 변환하면 해시값을 비교하는 것은 단순히 숫자를 비교하는 것이기 때문에 더 빠르게 처리될 수 있다.

 

 

error 'Animation' AnimationEvent has no function name specified!

이런 에러는 해당 애니메이션 클립의 이벤트가 정상적이지 않을 경우(이름이 없거나, 제외된) 발생.

이것과 같이 문제가 되는 애니매이션에서 시간 바로 아래 이벤트 부분을 제거하면된다.

 

 

GetComponentsInChildren

유니티에서 사용되는 메서드 중 하나로,

특정 게임 오브젝트 아래에 있는 자식 오브젝트들 중에서 특정 컴포넌트를 가진 모든 오브젝트를 찾아오는 데 사용

 

1. 다중 컴포넌트 참조:

한 오브젝트에 여러 개의 특정 컴포넌트를 가진 자식 오브젝트들을 관리할 때 사용

예를 들어, 플레이어 캐릭터 아래에 있는 모든 무기나 아이템을 찾을 때 활용될 수 있다.

 

2. 동적으로 컴포넌트 조작:

여러 개의 자식 오브젝트에 있는 특정 컴포넌트를 일괄적으로 활성화 또는 비활성화하거나,

설정값을 변경할 때 사용될 수 있다.

 

3. 자동화된 작업:

자식 오브젝트들에 대해 반복 작업을 수행할 때 사용

예를 들어, 특정 태그를 가진 모든 자식 오브젝트를 찾아와서 일괄적으로 처리하는 데 활용될 수 있다.

 

간단예시

더보기

// 예시: 플레이어 캐릭터 아래의 모든 무기를 비활성화하는 함수
void DisableAllWeapons()
{
    // 플레이어 캐릭터 아래에 있는 모든 Weapon 컴포넌트를 찾아옴
    Weapon[] weapons = GetComponentsInChildren<Weapon>();

    // 찾아온 모든 Weapon 컴포넌트를 순회하며 비활성화
    foreach (Weapon weapon in weapons)
    {
        weapon.gameObject.SetActive(false); // 해당 무기의 게임 오브젝트를 비활성화
    }
}

이런 방식으로 GetComponentsInChildren은 게임 오브젝트의 계층 구조에서 특정 컴포넌트를 가진 모든 자식 오브젝트들을 손쉽게 가져올 수 있어서 유용하게 활용

 

주의할 점은, 해당 메서드는 검색하는 동안 오버헤드가 발생할 수 있으므로,

너무 많은 오브젝트를 찾는 데 사용할 경우 성능에 영향을 줄 수 있다.

 

instance

주로 싱글톤 패턴에서 사용

특정 클래스의 유일한 인스턴스에 전역적으로 접근하기 위해 사용

전역 접근은 다른 클래스에서 해당 클래스의 기능에 쉽게 접근하고 사용할 수 있도록 함

 

instance는 특정 클래스의 유일한 인스턴스를 가리키는 정적(static) 변수

이 변수는 클래스의 정적 메서드에서 사용되어 해당 클래스의 인스턴스를 참조하거나 조작할 수 있다.

 

간단예시

더보기

public class MyClass {
    public static MyClass instance; // 싱글톤으로 사용될 인스턴스

    void Awake() {
        instance = this; // 자기 자신을 할당하여 싱글톤으로 사용할 수 있도록 함
    }
}

 

MyClass.instance를 통해 어디서든 해당 클래스의 유일한 인스턴스에 접근할 수 있다.

다른 클래스에서 해당 클래스의 기능을 사용할 때 사용될 수 있으며, 단일한 인스턴스를 유지하기 위한 패턴

 

 

Material

유니티에서 Material(재질)은 물체의 외관과 시각적인 특성을 정의하는 데 사용되는 요소

Material은 특정한 물체의 표면적인 특성을 결정하며, 이를 통해 색상, 질감, 광택, 반사 등을 조절할 수 있다.

 

  1. Shader(셰이더): 셰이더는 Material이 어떻게 렌더링되고 보여지는지를 정의. 그것이 빛을 어떻게 반사하는지, 투명하거나 불투명한지, 텍스처나 색상을 어떻게 표현하는지 등을 결정.
  2. 색상 및 텍스처: Material은 주로 색상, 텍스처, 이미지 등을 사용하여 물체의 외관을 결정. 이것은 물체의 표면에 어떤 색상이나 이미지가 나타날지를 결정.
  3. 기타 속성: Material은 빛에 반응하는 방식, 반사 정도, 광택의 정도 등 다양한 시각적 특성을 설정할 수 있다.

Material은 개별적으로 물체에 할당되어 물체의 외관을 결정하며, 유니티에서 시각적인 디자인과 렌더링을 제어하는 중요한 요소 중 하나

또한 재질은 게임의 성능과 시각적인 퀄리티에 영향을 미치므로, 최적화와 함께 렌더링에 중요한 역할

 

 

 

센드 메시지(Send Message)" 방식과 "인보크(Invoke) 및 유니티 이벤트(Unity Event)" 방식

유니티에서 스크립트 간 통신 및 이벤트 처리를 다루는 두 가지 다른 방법

 

센드 메시지(Send Message) 방식:

  • SendMessage는 GameObject에 메시지를 보내는 데 사용되는 메서드
  • 이 방식은 GameObject에 직접 SendMessage 함수를 호출하여 특정한 메서드를 실행하는 것. 메서드 이름을 문자열로 지정하여 호출하며, 해당 GameObject의 모든 스크립트들에게 메시지가 전달.
  • SendMessage는 런타임 중에 동적으로 메서드를 호출하기 때문에 유연하긴 하지만, 정적 타입 체크가 이루어지지 않고, 문자열 기반으로 호출하기 때문에 오타 등의 오류 발생 가능성이 있다.

인보크(Invoke) 및 유니티 이벤트(Unity Event) 방식:

  • Invoke는 지정된 시간 후에 특정 메서드를 실행하거나 반복 실행하는 데 사용.
  • Unity Event는 이벤트 시스템을 활용하여 특정한 이벤트가 발생했을 때 미리 설정한 메서드를 실행하는 방식. 이벤트에 연결된 메서드들이 호출되는 것이 특징.
  • 이 방식은 Inspector 창에서 이벤트를 설정하고, 그 이벤트에 특정한 메서드를 연결함으로써 사용. 이를 통해 정적으로(문자열이 아닌 실제 메서드 참조를 통해) 연결되므로 오타 등의 오류가 줄어들고, 런타임 전에 체크되는 장점이 있다.

간단히 말하면, SendMessage는 동적인 문자열 기반 메서드 호출 방식이며, Invoke 및 Unity Event 방식은 정적인 타입 체크가 가능하고, Inspector에서 설정 및 관리가 용이한 방식

'TIL' 카테고리의 다른 글

12.22 (TIL-코딩문제)  (1) 2023.12.22
12.21 (TIL - Unity)  (0) 2023.12.21
12.19 (TIL-Unity3D)  (0) 2023.12.19
12.18 (TIL-코딩문제)  (1) 2023.12.18
12.15 (TIL-Unity3D)  (0) 2023.12.15