주로
[유니티 기초] 유니티 Edit 단계에서 인스펙터 값 바로 적용(HP bar, OnValidate) 본문
HP Bar를 만들어 Edit 단계에서 HP Bar의 값을 조절해 보겠다.
HP Bar는 OnValidate를 사용하여 실험하는 용도로 만들었다.
실제로 이렇게 활용되는지 모르겠지만, Canvas UI로 만들어 봤다.
아래는 예시 이미지다.
Hierachy 창에 Canvas를 생성하고 아래에 Empty Object를 만들어 이름을 HealthBar로 지정했다.
HealthBar 가 오늘 우리가 만들 오브젝트이고, HealthBar 아래에 3개의 오브젝트를 생성했다.
1. Background : Hierachy -> UI -> Image를 생성해 이름을 바꿨다.
2. HealthGage : Hierachy -> UI -> Image를 생성해 이름을 바꿨다.
3. ScriptObject : Hierachy -> Empty Object Create를 통해 생성하고 이름을 바꿨다.
다음으로는 그냥 인스펙터의 값들을 따라하면 된다.
설명 : Health Bar로 크기를 캔버스 비율에 고정해 놨다. 캔버스의 크기가 바뀌면 비율에 맞게 크기가 변환된다.
HealthGage의 Rect Transform 컴포넌트의 Anchors max의 X값은 기본이 1이다. 하지만 저 값은 스크립트가 조절하게 될 거라 0~1 사이의 어떤 수가 되든 상관없다.
마지막으로, 스크립트를 만들어서 실제로 작동하게 할 것이다.
먼저 스크립트를 Project에 만들고 이름을 정한다. GageChange로 했다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GageChange : MonoBehaviour
{
public GameObject TargetObject;
[Range(0, 1)] public float healthGage = 1;
private void OnValidate()
{
TargetObject.GetComponent<RectTransform>().anchorMax = new Vector2(healthGage, 1);
}
}
Health Gage 오브젝트를 TargetObejct로 받아와 조절하려고 한다.
helathGage 값은 0~1 사이의 값을 가져야 하므로 [Range(0,1)]을 명시해줬다.
이제 OnValidate 함수에서 값이 변할 때마다 Edit 단계에서 값을 바로 적용할 수 있게
위와 같이 코드를 적어 줬다. OnValidate가 게임을 시작한 뒤 호출되는 Update 함수처럼 작동하는 것처럼 느꼈다.
이제 ScriptObject 오브젝트에 GageChange 스크립트를 넣고, Target Object 에는 위에서 말한 바와 같이 Health Gage오브젝트를 넣어 준다. 이제, 인스펙터의 Health Gage 슬라이더를 움직이면 게임을 시작하지 않고 인스펙터 값이 즉각 적용되는 것을 볼 수 있을 것이다.
끝.
'프로그래밍 > 유니티(C#)' 카테고리의 다른 글
[유니티 기초] 은근 유용한 [Serializable], [SerializeField] 사용하기 (0) | 2022.05.11 |
---|---|
[유니티 기초] Canvas 란 무엇인가(Canvas, Canvas Scaler, Graphic Raycaster 컴포넌트) (0) | 2022.05.05 |
[유니티 기초] 카메라 컴포넌트(Camera Component, Built-in Render Pipeline) (0) | 2022.05.03 |