2024.10.24(목)
지금까지 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.");
}
}
}
❓ 절두체란? 기하학에서 절두체(frustum)는 입체(보통 원뿔이나 각뿔)를 절단하는 하나나 두 평행면 사이의 부분이다. (from 위키백과)
카메라 절두체는 카메라의 시야 영역을 정의하는 3차원 기하학적 모양이다.
카메라가 화면에 표시할 수 있는 공간을 설명한다.
시야 범위(FOV)와 Far clipping plane, Near clipping plane을 조정해 절두체의 모양을 바꿔서 렌더링할 범위를 조절할 수 있다.
코루틴을 한 마디로 설명하자면 '비동기적 동기' 라고 할 수 있다.
코루틴은 실제로는 동기적으로 작동하지만, 작동하는 방식은 비동기적 작동을 모방한다.
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;
}
}
Lighting Intensity Multiplier
: 환경 전체의 빛. 실제 환경의 빛을 조절한다. 해가 지고 뜨고 하는거를 여기서 조절한다고 보면 된다.Reflecting Intensity Multiplier
: 물체에 반사되는 정도를 조절한다.