이벤트 호출을 위한 게터, 세터, 프로퍼티- 기본구조 알기

Published: Aug 2, 2021 by BeatChoi

이벤트 :: Event

콘텐츠를 개발하다 보면 언제 일어날지 모르는 불규칙한 이벤트를 구현해야 할 경우가 생깁니다.
예를 들면 캐릭터의 체력이 50% 미만이 되면 체력 회복을 한다던지, 또는 충돌 횟수가 3회 이상이 되면 파괴가 된다던지 말이죠.
언제 일어날지 모르는 이 이벤트들을 위해 Update문이나 Coroutine들을 기약없이 돌릴수는 없는 노릇입니다.
이번시간에는 해당 수치들에 관련된 이벤트들을 호출할수 있는 문법을 배워보도록 하겠습니다.

유니티3D 에디터에서

스크립트 생성

프로젝트 창에서 PropertyExample.cs 스크립트를 생성합니다.
PropertyExample.cs스크립트를 열어 다음과 같이 작성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PropertyExample : MonoBehaviour
{

    private int hp;
    public int _hpProperty 
    {
        get { return hp; }//게터 
        set { hp = value; }//세터
    }


    // Start is called before the first frame update
    void Start()
    {
        _hpProperty = 20; //프로퍼티에 값을 지정, hp 변수 할당
        Debug.Log("hp : "+hp);// hp 변수에 값이 할당되었는지 확인
    }
}
  • 위가 기본적인 Getter, Setter Property의 구조입니다.
  • public int _hpProperty를 {}로 묶고 안에 get{}, set{} 프로퍼티를 지정합니다.
    • get은 값을 읽을 때
    • set은 값을 불러올 때 호출됩니다.
  • 따라서 get 에는 우리가 수정하고자 하는 변수를 리턴해주고
  • set에는 넣어주는 값이 value가 되고 value를 선언한 변수에 넣는 형태가 됩니다.
  • 프로퍼티변수인 _hpProperty에 값을 할당하거나 호출하여도 결과적으로는 hp변수의 값을 불러오게 됩니다.

이렇게 Property구조를 짜게되면 hp라는 변수는 Private으로 은닉시킬 수 있는 동시에 _hpProperty로 값을 할당하거나 호출할 수 있게 됩니다.

그럼 PropertyExample.cs스크립트를 다음과 같이 수정해 봅시다.

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
32
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PropertyExample : MonoBehaviour
{
    private int hp;
    public int _hpProperty 
    {
        get { return hp; }//게터 
        set {
                if (value > 50)
                {
                    hp = value;
                    Debug.Log("HP : " + hp);
                }
                else
                {
                    hp = 100;
                    Debug.Log("HP가 회복되었습니다! HP : " + hp);
                }
        }
    }

    // Start is called before the first frame update
    void Start()
    {
        _hpProperty = 60; //프로퍼티에 값을 지정, hp 변수 할당
        _hpProperty -= 5;//프로퍼티에 값을 지정, hp 변수 할당
        _hpProperty -= 5;//프로퍼티에 값을 지정, hp 변수 할당, set else 호출, 체력 회복
    }
}
  • 기본 구조는 동일하지만 set항목에 조건을 달았습니다.
  • hp 변수에 값을 할당할 때 값이 50보다 작거나 같게되면 체력을 다시 100으로 회복시키는 조건을 추가하였습니다.

씬 설정

계층 구조창에서 빈 게임오브젝트를 하나 생성하고 위 스크립트를 인스턴스화 시켜줍니다.
상단 플레이버튼을 누르고 Console창을 확인하여 값이 제대로 나타나는지 확인합니다.


<01. 콘솔창 확인>

설명

기본적으로 get, set 속성의 활용은 객체지향언어의 캡슐화를 위함입니다. 다만 유니티를 활용한 개발에 있어 캡슐화 이외에도 고민해야할 부분이 많으며
유니티 콘텐츠 개발의 특성상 데이터의 은닉의 경우 그 활용도가 점점 줄어들고 있는 추세입니다.
다만 get,set속성을 활용하여 값에 따른 이벤트의 호출에 활용한다면 그 쓰임새를 찾을 수 있을 것입니다.

Latest Posts

LightshipAR SDK 활용하기 - Maps SDK의 활용
LightshipAR SDK 활용하기 - Maps SDK의 활용

ARDK Maps SDK

Lightship의 geofencing 기능을 구현할 수 있는 Maps SDK 활용법을 알아봅니다.

콘텐츠 개발

프로젝트 세팅

본 포스팅은 ARDK 3.9 버전, Maps SDK 0.4 버전을 기준으로 작성합니다. 이전 포스팅을 참조하여 SDK를 임포트 합니다.

Top Down Map

  1. 네이버 지도같은 일반적인 탑-다운 맵을 구현해 봅니다.

Unity3D에서의 UI - Rect Transform
Unity3D에서의 UI - Rect Transform

Unity UI RectTransform :: 개요

UI 객체들의 위치, 크기, 기준점 등등을 담당하는 Rect Transform에 대하여 알아봅니다.

Unity3D에서의 UI - UI의 구성
Unity3D에서의 UI - UI의 구성

Unity UI :: 개요

Unity UI는 게임 및 애플리케이션용 사용자 인터페이스를 개발하는 데 쓰이는 간단한 UI 툴킷입니다. Unity UI는 게임 오브젝트 기반 UI 시스템으로, 컴포넌트와 게임 뷰를 사용하여 사용자 인터페이스를 배열하고 위치와 스타일을 지정합니다. Unity UI는 Unity 에디터 내 사용자 인터페이스에 대해 사용할 수 없습니다.https://docs.unity3d.com/kr/2019.1/Manual/UIToolkits.html