[Unity] - FindObjectOfType

joonsooan·2023년 11월 28일

unity

목록 보기
1/5
post-thumbnail

유니티에서 특정 타입을 이용해 오브젝트를 찾고 싶을 때 FindObjectOfType() 함수를 이용하면 된다.

유니티 공식 문서에 따르면 해당 함수는 type 유형의 첫 번째 활성 로드 개체를 반환하고, asset 또는 비활성화된 개체, HideFlags.DontSave이 설정된 오브젝트는 반환하지 않는다.

매우 느린 함수이기 때문에 매 프레임마다 사용하는 것은 권장되지 않고, 더 빠른 Object.FindFirstObjectOfType을 사용하는 것이 추천된다.

Scene에 특정 타입을 가지는 오브젝트가 하나 존재하면
FindObjectOfType<type>()을 이용해 타입을 가져와 다른 오브젝트에서 사용할 수 있다.

예를 들어 Level sprite shape의 Surface Effector 2D의 속성 중 하나인 speed를 player에서 변경하고 싶다고 하자.

그러기 위해 player script에서 surfaceEffector2D 변수를 선언하고 FindObjectOfType<SurfaceEffector2D>()을 할당하면 된다.

이후 surfaceEffector2D.speed를 변경하는 함수를 만들고 Update()에 추가해주면 완성이다.

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [SerializeField] float boostSpeed = 30f;
    [SerializeField] float baseSpeed = 20f;
    SurfaceEffector2D surfaceEffector2D;

    // Start is called before the first frame update
    void Start()
    {
        surfaceEffector2D = FindObjectOfType<SurfaceEffector2D>();
    }

    // Update is called once per frame
    void Update()
    {
        RespondToBoost();
    }

    void RespondToBoost()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            surfaceEffector2D.speed = boostSpeed;
        }
        else
        {
            surfaceEffector2D.speed = baseSpeed;
        }
    }
}

0개의 댓글