티스토리 뷰
오늘은 게임을 만들때 정말 중요한
다른 스크립트에 존재하는 변수나 함수에 접근하는 방법을 배워보려고 한다.
이걸 왜 알아야 하냐면
게임 전반에 걸쳐 여러 요소들에 영향을 받는 소지금이나 점수 같은 것들은 대부분 GameManager나 ScoreManager 같은 스크립트에서 관리하기 마련인데
이때, 이 GameManager에 접근해서 돈을 줄이거나 올리는 기능이 필요하기 때문이다.
예를들어
- 물건 거래 할때 소지금 증가, 감소
- 돈을 주었을 때 소지금 증가
- 몬스터 별로 주는 포인트가 다름 --> 각 몬스터가 죽었을때 몬스터에 해당하는 점수만큼 총 점수에 가산
이러한 기능들을 구현하는데 있어, 다른 스크립트에 존재하는 변수와 함수에 접근하는 방법을 반드시 알아야 한다.
방법은 크게 2가지가 있다.
- public 변수에 스크립트를 직접 할당하여 접근하는 방법
- 접근하고자 하는 변수나 메서드를 static설정하고 직접 접근 하는 방법
- 스크립트가 있는 object를 검색하여 찾고, GetComponent<>()사용하여 접근
예제들에서는 GameManager 스크립트에 있는 money변수에 접근하는 상황을 가정하도록 하겠다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public int money;
void Awake(){
money = 100;
}
}
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
'IT > UNITY(C#)' 카테고리의 다른 글
(C#) Unity_플레이어를 따라오는 카메라 구현 (2D) (0) | 2022.07.26 |
---|---|
Unity_멀티플레이 구현에 앞서 알아야할 것들 (0) | 2022.07.19 |
(C#) UNITY_data저장하고 불러오는 3가지 방법 (0) | 2022.07.18 |
(C#) 비전공자도 이해하는 C#의 자료형식의 구분 방법_reference type, value type, built-in type, cusotom type (0) | 2022.07.15 |
(C#) 비전공자 Unity_너무 당연해서 넘어갔지만 궁금한 녀석 : Monobehavior (0) | 2022.07.15 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ET5X
- 사진크롤링
- 마케팅
- It
- 유니티
- 주식투자
- 머신러닝
- 가격데이터
- 경영학
- 프로그래머스
- 비전공자
- 터틀트레이딩
- 일자별
- 파이썬
- PYTHON
- Anet
- C#
- 알고리즘
- 강화학습
- Unity
- 스타트업
- json
- IT기초
- 주식
- 심리학
- 랜덤맵
- 크롤링
- beautifulsoup
- requests
- 시스템투자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함