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

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

콘텐츠 개발 기법 - URP 환경에서 Bloom 및 Volume 포함한 화면 캡처
콘텐츠 개발 기법 - URP 환경에서 Bloom 및 Volume 포함한 화면 캡처

화면 캡처 :: Screen Capture

일반적으로 URP환경에서 Bloom 등의 Volume 이펙트들이 함께 캡처되지 않는 현상이 일어납니다.
두가지 원인이 있는데 첫번째는 저장할 Texture 및 Texture2D의 크기가 작아 모든 텍스쳐를 저장할 수 없는 경우와
두번째는 Linear color space의 픽셀을 텍스쳐에 저장 할 수 없는 경우가 있습니다.
이번 포스팅에서는 URP 환경에서 해당 이펙트들을 함께 캡쳐하는 방법을 알아봅니다.

콘텐츠 개발 기법 - UI 안나오게 화면 캡처(Screen Capture without UI)
콘텐츠 개발 기법 - UI 안나오게 화면 캡처(Screen Capture without UI)

화면 캡처 :: Screen Capture

UI 없이 화면을 캡쳐하는 방법을 알아봅니다.
해당 방법을 통해 사진 앱에서 사진을 찍거나 게임 내에서 UI를 제거한 스크린샷을 구현할 수 있습니다.

유니티3D 에디터에서

스크립트 작성

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

LightshipAR SDK

이번 강좌에서는 Visual Positioning System (VPS) 기능을 활용하여 콘텐츠를 개발해 봅니다.
VPS는 GPS정보와 타겟 매핑 정보를 정합하여 해당 타겟을 인식하는 기능입니다.
따라서 객체나 환경의 변화 및 이동이 잦지 않은 타겟이 스캔 대상이 됩니다.
주로 동상, 건물 입구, 가로등 등 위치의 변경이 없는 타겟들이 좋은 타겟입니다.

해당 타겟들을 인식시키고 주변에 가상의 오브젝트들을 배치하고 해당 위치를 저장하는 방법을 알아봅니다.

공간 매핑

Niantic Wayfarer

공간을 인식시키기 위해서 먼저 공간을 매핑해야 합니다.
이 과정은 IOS 어플리케이션으로 진행을 할 수 있는데 아래 링크에서

  1. Testflight
  2. Wayfarer

어플리케이션을 다운로드 및 설치합니다.

링크 : https://testflight.apple.com/join/VXu1F2jf