티스토리 뷰

오늘은 게임을 만들때 정말 중요한

다른 스크립트에 존재하는 변수나 함수에 접근하는 방법을 배워보려고 한다.

 

이걸 왜 알아야 하냐면

게임 전반에 걸쳐 여러 요소들에 영향을 받는 소지금이나 점수 같은 것들은 대부분 GameManager나 ScoreManager 같은 스크립트에서 관리하기 마련인데

 

이때, 이 GameManager에 접근해서 돈을 줄이거나 올리는 기능이 필요하기 때문이다. 

예를들어

  • 물건 거래 할때 소지금 증가, 감소
  • 돈을 주었을 때 소지금 증가
  • 몬스터 별로 주는 포인트가 다름 --> 각 몬스터가 죽었을때 몬스터에 해당하는 점수만큼 총 점수에 가산

이러한 기능들을 구현하는데 있어, 다른 스크립트에 존재하는 변수와 함수에 접근하는 방법을 반드시 알아야 한다.

 

방법은 크게 2가지가 있다.

  1. public 변수에 스크립트를 직접 할당하여 접근하는 방법
  2. 접근하고자 하는 변수나 메서드를 static설정하고 직접 접근 하는 방법
  3. 스크립트가 있는 object를 검색하여 찾고, GetComponent<>()사용하여 접근

 

예제들에서는 GameManager 스크립트에 있는 money변수에 접근하는 상황을 가정하도록 하겠다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
	public int money;
    
	void Awake(){
		money = 100;
	}
}

GameManager &nbsp;스크립트는 현재 gameManager 오브젝트에 들어있는 상황이다.

 

1. public 변수에 스크립트를 직접 할당하여 접근하는 방법

 

이 방법은 가장 쉽고, 코드도 가볍다.

하지만 게임이 복잡해지고, 직접 할당해줘야 하는 상황이 많이 발생할 경우

일일히 수작업을 해줘야 하므로 효율이 매우 나쁘다.

 

간단한 게임을 구현할 때 추천!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetMoney : MonoBehaviour
{
	public GameManager gm;
    
	void Update(){
		gm.money += 1;
	}
}

 

2.  변수나 함수를 static설정하고 직접 접근 하는 방법

엄청 쉽고 또한 효율적이다!!

가장 추천하는 방법

다만 static이라는 내용이 조금 복잡할 수 있지만, 이해하지 않고 사용하면 그만 :)

 

이때는 애초에 GameManager 스크립트에서 변수를 설정할때, public과 static이라는 한정자를 적어주면 끝.

[변수 설정시 - in GameManager]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
	public static int money; // 이렇게 설정하면 된다
    
	void Awake(){
		money = 100;
	}
}

[변수접근시 - in other scripts]

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetMoney : MonoBehaviour
{ 
	void Update(){
		GameManager.money += 1; // 바로 접근 가능!!
	}
}

 

3. GetComponents<>()를 활용하는 방법

이 방법은 추천하지 않는다.

무겁고, 코드도 길고

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetMoney : MonoBehaviour
{
	GameManager gm;
    
    void Awake(){
    	gm = GameObject.Find("gameManager").GetComponent<GameManager>(); 
        // gameManager 오브젝트를 찾고, 그 오브젝트의 GameManager스크립트에 접근
    }
	void Update(){
		gm.money += 1; 
	}
}

 

끝.

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함