본문 바로가기
유니티 Unity

[유니티] 다른 스크립트의 함수 사용하는 방법 총정리

by TODAYCODE 2022. 3. 9.
반응형

해당 내용은 유튜브로도 볼 수 있습니다.

 


 

유니티를 하다보면 다른 스크립트에 존재하는 함수를 써야할 때가 굉장히 많다.

어느정도 실력이 있는 사람이라면 아무런 문제가 없겠지만,

유니티 초보에게 있어서는 크나큰 난관이 된다.

오늘은 다른 스크립트를 참조하는 여러가지 방법을 알아볼 것이고,

Action을 활용해서 손쉽게 참조해오는 방법도 알아볼 것이다(강추).


기본 세팅

상황은 아래와 같다.

Origin 오브젝트에는 Origin 스크립트가 달려있고

Target 오브젝트에는 Target 스크립트가 달려있다.

그리고 Target 스크립트에는 아래보이는 것처럼 Mission이라는 함수가 존재한다.

즉, Origin 스크립트에서 어떤 방법이든 취해서 Target 스크립트에 있는 Mission 함수를 사용하면 된다.

 

이 상황에서 Target 스크립트를 싱글톤패턴으로 변경해줘서 사용하면 이 문제를 해결 할 수 있겠지만,

지금은 싱글톤패턴을 알아보는 것이 목적은 아니므로 싱글톤은 사용하지 않을 것이다.

 

 

1. 유니티상에서 받아오기

가장 간단하게 생각할 수 있는 것은 유니티에서 Target을 연결해주는 것이다.

Public을 사용해서 코드를 작성해주면 아래처럼 유니티상에서 연결할 수 있게 된다.

이렇게 Target을 연결해주고나면 코드를 통해서 함수를 가져다 쓸 수 있다.

연결된 target에 달려있는 컴포넌트 중에서 Target이라는 스크립트를 가져와서 거기서 Mission 함수를 쓰겠다는 뜻이다.

그런데 이 방법에는 치명적인 단점이 존재하는데,

Origin 오브젝트가 하이어라키창에 존재하지 않다가 플레이 도중에 동적으로 생성될 경우 target을 유니티 상에서 연결해줄수가 없다.

그러므로 다른 방법을 찾아야한다.

 

2. Find로 찾아와서 사용하기

Find를 사용할 경우 유니티에서 연결할 필요없이 코드 한 줄로 깔끔하게 끝난다.

하이어라키창에 존재하는 오브젝트 중에서 이름이 Target인 것을 찾아서 거기에 달린 Target 스크립트의 Mission 함수를 사용하겠다는 뜻이다.

이렇게 코드를 작성해주면,

아무리 Origin 오브젝트가 동적으로 생성된다고 하더라도 자동으로 Target을 찾아서 함수를 정상적으로 사용하게 된다.

 

하지만, Find 에도 치명적인 단점이 있다.

Find를 사용할 경우 하이어라키 창에 있는 모든 오브젝트를 검색하는 굉장히 비효율적인 방식이다.

프레임드랍이나 성능저하에 원인이 될 수 있다.

따라서 Find를 사용하는 방식은 되도록이면 피해야한다.

 

 

3. Action으로 함수 사용하기

우선, 초보자의 경우에는 Action 자체의 사용법을 모를 수 있고 해당 문법이 난해할 수 있다.

그런데 이걸 설명하려면 굉장히 복잡해지므로 일단은 사용방법을 몸에 먼저 익혀보도록 하자.

사용방법을 먼저 익히면 나중에 오히려 문법을 공부할 때 더 도움이 될 수도 있다.

이번에는 Origin 스크립트가 아니라 Target 스크립트에서 작업을 해야한다.

Action은 System클래스에 속해있으므로 using System을 상단에 적어주어야한다.

그리고 static을 사용해서 Action을 하나 생성해준다.

 

그러고나서는 Awake에서 target = () => { 사용할함수(); };

이렇게 작성해주면 된다. 지금은 Mission을 사용할 것이기 때문에 Mission을 적어주자.

 

이렇게 해주고 나면 기본적인 준비는 끝이다.

참고로, Mission 뿐만 아니라 여러개의 함수를 동시에 적어주어도 된다.

이런식으로 말이다.

 

아무튼 이렇게 해주고나면 다른 스크립트에서는 아주 간단하게 해당 함수를 가져다가 사용할 수 있다.

Origin 스크립트에서 Target.target(); 이라고 적어주는 것만으로 함수를 가져다가 쓸 수 있다.

Action을 생성하는 초기 작업만 해주면 수많은 스크립트에서 아주 쉽게 꺼내쓸 수 있게 되므로

급한 상황에서 아주 빠르고 쉽게 사용할 수 있다.

 

 

 

반응형

댓글