Unity3D에서 건강 표시줄을 디자인하고 코딩하는 방법
세계 최초의 일부 비디오 게임에서 개척된 건강은 오늘날 가장 인기 있는 많은 타이틀에서 지속되는 일반적인 메커니즘입니다. Health는 복잡한 전투 메커니즘을 사용하고, 플레이어 진행을 만들고, 게임을 보다 직관적으로 만드는 것을 가능하게 합니다. 하지만 자신의 게임에 건강 시스템을 어떻게 추가합니까?
Unity3D를 사용하면 2D UI 요소를 3D 게임에 쉽게 추가할 수 있으므로 처음으로 체력 바 탐색을 시작하기에 좋은 곳입니다.
당신이 배울 것
표면적으로 이 프로젝트는 복잡해 보이지 않을 수 있습니다. 그럼에도 불구하고 작동하는 상태 표시줄을 생성하려면 몇 가지 주요 Unity3D 코딩 개념을 이해해야 합니다. 이는 이 프로젝트를 진행하면서 다음을 포함하여 배울 것이 많다는 것을 의미합니다.
- Unity3D에서 2D UI 요소/스프라이트를 만드는 방법.
- 코드로 게임 개체 구성 요소를 편집하는 방법.
- Unity3D에서 스크립트 간에 변수를 공유하는 방법.
1단계: 장면 설정
체력 바 코딩을 시작하기 전에 적용할 플레이어 모델이 있는 장면이 필요합니다. 시작하려면 물리 기반 Unity3D 캐릭터 컨트롤러 가이드에 따라 기본 컨트롤이 있는 플레이어 모델을 만들 수 있습니다.
장면과 플레이어 모델이 준비되었으면 이제 UI 요소를 추가할 차례입니다. Hierarchy 창 내부를 마우스 오른쪽 버튼으로 클릭하고 UI > Image 를 선택 합니다. 이렇게 하면 계층 구조에 두 개의 새 항목인 Canvas 부모 개체와 Image 자식 개체가 생성됩니다. 자식 개체의 이름을 Healthbar로 변경합니다. 인스펙터를 사용하여 체력 막대의 너비, 높이 및 위치를 선택하십시오.
체력 표시줄의 배경/테두리 역할을 하기 위해 색상이 검은색으로 설정된 약간 더 큰 UI 이미지를 추가할 수 있습니다. 그 뒤에 표시되도록 계층 구조에서 체력 막대 위에 있는지 확인하십시오.
이 UI 요소는 체력 바의 기반으로 작동하지만 애니메이션을 적용하려면 스프라이트도 필요합니다. 프로젝트 창으로 이동하여 마우스 오른쪽 버튼을 클릭하고 Create > 2D > Sprites > Square 를 선택 합니다.
계층 구조에서 Healthbar를 선택하고 방금 만든 스프라이트를 인스펙터 내부의 소스 이미지 선택 상자로 드래그합니다. 이미지 유형 을 채우기로, 채우기 방법 을 가로로, 채우기 원점 을 왼쪽 으로 변경할 수도 있습니다 . 이제 게임을 실행하고 채우기 양 슬라이더를 사용하면 체력 막대가 줄어들고 커지는 것을 볼 수 있습니다.
2단계: 상태 변수 추가
상태를 지시하는 체력 변수가 없으면 체력 바를 생성하는 것이 의미가 없습니다. 다른 스크립트는 이 변수에 액세스할 수 있어야 하며 중앙 어딘가에 배치하는 것이 좋습니다. Character Control 스크립트에 public float로 추가하십시오.
public float playerHealth = 1.0f;
이 변수에 부동 소수점을 사용하면 체력 표시줄 UI 이미지 채우기 양 변수와 일치하도록 0에서 100까지의 백분율을 쉽게 나타낼 수 있습니다. 예를 들어, 0.5f의 playerHealth는 체력 막대 너비의 50%입니다.
3단계: Unity의 스크립트 간 변수 공유
변수는 일반적으로 자체 함수 및 스크립트 내에서 작동합니다. 이렇게 하면 작업하려는 변수를 찾을 위치를 코드에 알리는 단계를 수행하지 않는 한 다른 함수 및 스크립트에서 액세스할 수 없습니다.
코드를 저장할 Health라는 새 스크립트 파일을 생성하여 시작합니다. 이 스크립트를 첫 번째 단계에서 만든 Healthbar UI 요소로 끌어다 놓을 수 있습니다. 다음 코드는 void Update() 함수에 들어갑니다.
이 프로세스는 변수를 소유한 게임 개체를 찾는 것으로 시작됩니다. 이 경우 Character_Model 개체입니다.
GameObject Character_Model = GameObject.Find("Character_Model");
다음으로 작업해야 하는 변수가 포함된 스크립트 구성 요소를 찾을 차례입니다.
Character_Control character_Control = Character_Model.GetComponent();
그리고 마지막으로 찾고 있는 특정 변수를 추출할 수 있습니다. 이 경우 캐릭터 컨트롤러에 추가한 playerHealth 변수입니다. 이것을 currentHealth라는 현재 스크립트 내의 float 변수에 할당합니다.
currentHealth = character_Control.playerHealth;
몇 줄의 코드만 있으면 필요한 변수를 얻을 수 있으며 플레이어의 체력에 액세스해야 할 때마다 이 방법을 적용할 수 있습니다. 완료되면 코드는 다음과 같아야 합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Health: MonoBehaviour
{
public float currentHealth;
void Start()
{
}
void Update()
{
GameObject Character_Model = GameObject.Find("Character_Model");
Character_Control character_Control = Character_Model.GetComponent();
currentHealth = character_Control.playerHealth;
}
}
4단계: UI 상태 표시줄 게임 개체 프로그래밍
이제 체력 바 UI 요소를 생성하고 플레이어 체력 변수에 액세스할 수 있으므로 함께 작동하도록 할 차례입니다. 시작하려면 건강 표시줄의 이미지 구성 요소를 포함할 개인 정적 변수를 추가하십시오.
private static Image Healthbar;
그런 다음 한 번만 실행되는 void Start() 함수 내에서 이 변수에 이미지 구성 요소를 할당할 수 있습니다.
Healthbar = GetComponent();
이제 모든 변수가 준비되었으므로 이전 단계의 코드를 사용하여 상태 표시줄 UI 개체의 채우기 너비를 설정할 수 있습니다. 여기서 변환을 수행할 필요가 없습니다. 플레이어 체력과 체력 바 채우기 양은 모두 부동 변수입니다.
Healthbar.fillAmount = currentHealth;
이 코드를 사용하면 Character_Control 코드에 있는 건강 변수에 따라 건강 바가 위아래로 채워집니다. 그러나 이것은 약간 지루하며 약간의 색상과 확실히 관련이 있습니다.
플레이어의 체력이 많을 때 체력 막대를 연한 녹색으로 만들기 위해 새로운 색상을 추가하는 것부터 시작하십시오.
Color greenHealth = new Color(0.6f, 1, 0.6f, 1);
다음으로 if 문을 추가하여 플레이어의 체력이 0.3f 이상, 즉 30% 이상인지 확인합니다. 0.3f보다 높으면 방금 추가한 색상과 일치하도록 체력 막대를 설정합니다. 0.3f 미만이면 체력 막대를 빨간색으로 바꿉니다.
if (currentHealth >= 0.3f) {
Healthbar.color = greenHealth;
} else {
Healthbar.color = Color.red;
}
5단계: 코드 테스트
아래의 전체 코드에서 볼 수 있듯이 이 프로젝트는 모두 함께 사용하면 매우 간단합니다. 물론 코드를 테스트할 방법이 필요합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Health: MonoBehaviour
{
private static Image Healthbar;
public float currentHealth;
void Start()
{
Healthbar = GetComponent();
}
void Update()
{
GameObject Character_Model = GameObject.Find("Character_Model");
Character_Control character_Control = Character_Model.GetComponent();
currentHealth = character_Control.playerHealth;
Healthbar.fillAmount = currentHealth;
Color greenHealth = new Color(0.6f, 1, 0.6f, 1);
if (currentHealth >= 0.3f) {
Healthbar.color = greenHealth;
} else {
Healthbar.color = Color.red;
}
}
}
테스트를 가능하게 하기 위해 Character_Control 스크립트에 한 줄의 코드를 추가할 수 있습니다. 플레이어가 W 키를 눌러 앞으로 이동할 때마다 소량의 체력을 제거합니다. 동일한 결과를 얻기 위해 playerHealth 변수에 액세스할 수 있는 모든 스크립트에 동일한 코드를 추가할 수 있습니다.
playerHealth -= 0.001f;
Unity 프로젝트에 고유한 에셋을 추가하는 것도 고려할 수 있습니다. 웹에서 무료 Unity 에셋을 찾을 수 있으므로 비용을 들이지 않고도 프로젝트에 활기를 불어넣을 수 있습니다.
Unity3D에서 체력 막대 만들기
이제 캐릭터의 체력 막대가 생겼으므로 게임이 구체화되기 시작했습니다. 아직 해야 할 일이 많지만 이제 진정한 발전을 시작하는 데 필요한 몇 가지 핵심 기술을 갖추어야 합니다. 물론 더 많은 가이드를 읽는 것은 결코 나쁠 것이 없습니다.
답글 남기기