반응형
728x170
안녕하세요 유니티 비기너입니다.
이번 시간에는 Coroutine을 사용하여 버프, 디버프를 처리하는 하나의 방법에 대해 알아보겠습니다.
결과 화면
한 번에 보기
1. Canvas Slider 컴포넌트를 포함하는 오브젝트 생성
2. Canvas RenderMode를 world Space로 변경
3. Canvas RectTransform scale을 낮추고 Player오브젝트 하위로 오브젝트 이동
4. HealthBar 스크립트 작성
5. UI 버튼 생성, 명칭 변경
6. 버프 아이콘을 표현 할 오브젝트 생성 및 비활성화
7. Player 스크립트 작성
1. Canvas Slider 컴포넌트를 포함하는 오브젝트 생성
Health Bar : Slider 컴포넌트가 포함되는 오브젝트입니다.
Fill : 체력의 색상을 나타내는 오브젝트입니다.
Border : 체력바의 테두리를 나타내는 오브젝트입니다.
스크립트를 통해 Slider의 Value값을 조절하여 체력 게이지를 제어합니다.
2. Canvas RenderMode를 world Space로 변경
UI를 월드공간에서 표시합니다.
3. Canvas RectTransform scale을 낮추고 Player오브젝트 하위로 오브젝트 이동
Scale을 낮추고, posX, posY를 0으로 맞춘 뒤에 적절한 위치에 재배치합니다.
4. HealthBar 스크립트 작성
public class HealthBar : MonoBehaviour
{
public Slider slider;
public void SetMaxHealth(int health) {
slider.maxValue = health;
slider.value = health;
}
public void SetHealth(int health) {
slider.value = health;
}
}
SetMaxHelath 함수로 초기 체력값을 세팅하고 변화되는 체력을 SetHelath를 통해 갱신합니다.
5. UI 버튼 생성, 명칭 변경
플레이어에게 상태를 부여 할 버튼들을 생성합니다.
6. 버프 아이콘을 표현 할 오브젝트 생성 및 비활성화
지속 중인 버프, 디버프를 나타낼 이미지를 포함하는 오브젝트를 생성하고 비활성화합니다.
※ 스크립트에서 활성 / 비활성 처리
7. Player 스크립트 작성
public class Player : MonoBehaviour {
public HealthBar healthbar;
public GameObject[] buffIcons;
public int currentHealth;
public int maxHealth = 100;
private bool[] buffAt = { false, false, false };
void Awake() {
currentHealth = maxHealth;
healthbar.SetMaxHealth(maxHealth);
}
public void TakeBuff(string name) {
switch (name) {
case "Poison":
if(!buffAt[0]) { StartCoroutine(OnBuffCoroutine("Subtraction", 5, 5, 0)); }
break;
case "Bleeding":
if (!buffAt[1]) { StartCoroutine(OnBuffCoroutine("Subtraction", 3, 10, 1)); }
break;
case "Recovery":
if (!buffAt[2]) { StartCoroutine(OnBuffCoroutine("Addition", 5, 5, 2)); }
break;
}
}
IEnumerator OnBuffCoroutine(string operation, int time, int damage, int index) {
buffAt[index] = true;
buffIcons[index].SetActive(true);
while (time > 0) {
if (operation == "Addition") {
currentHealth += damage;
} else if (operation == "Subtraction") {
currentHealth -= damage;
}
healthbar.SetHealth(currentHealth);
time--;
yield return new WaitForSeconds(1);
}
buffAt[index] = false;
buffIcons[index].SetActive(false);
}
}
버프를 선택한 버튼에 따라 분기 처리하였으며 Coroutine을 활용하여 해당 버프를 지속시키는 코드입니다.
버프 아이콘은 해당 버프가 지속되는동안 나타나며 지속시간이 종료될 경우 비활성화됩니다.
해당 버프처리 방식은 한 가지 사례일 뿐 다양한 방법으로 처리가 가능합니다.
다음은 좀 더 좋은 정보로 찾아뵙겠습니다.
감사합니다.
반응형
그리드형
'유니티실습' 카테고리의 다른 글
유니티 큐브를 활용한 애니메이션 동작하기 2편 (0) | 2020.06.19 |
---|---|
유니티 스프라이트를 활용한 애니메이션 동작하기 1편 (0) | 2020.06.18 |
유니티 심플 미니맵만들기 (0) | 2020.06.12 |
유니티 조이스틱으로 캐릭터 이동하기 (7) | 2020.06.11 |
유니티 이미지 레이어 순서 제어하기 (0) | 2020.06.10 |