이전편
2024.04.03 - [Unity/2D] - [Unity/2D] 체력바 만들기 - Canvas, UI, Anchors
밑에서 위로 올라가는 Food의 중력 설정
![[Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 밑에서 위로 올라가는 Food의 중력 설정 [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 밑에서 위로 올라가는 Food의 중력 설정](https://blog.kakaocdn.net/dn/qmxAm/btsGkUSHNIb/Qb1TCkzxbUWuxZZVFCU2y1/img.png)
Food에 Rigidbody의 타입을 Dynamic에서 'Kinematic'으로 바꿨습니다.
또한, 콜라이더에 'is Trigger'를 체크 해주었습니다.
![[Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 밑에서 위로 올라가는 Food의 중력 설정 [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 밑에서 위로 올라가는 Food의 중력 설정](https://blog.kakaocdn.net/dn/bTVedW/btsGjkZdlvv/kXeobtPAolmspZWEEBOSX1/img.png)
NormalCat의 콜라이더에도 'is Trigger'를 체크해주었습니다.
그러면 OnTriggerEnter2D 이벤트 함수를 사용해야겠죠?
이유는 아래 게시글을 참고해주세요.
2024.04.03 - [Unity/2D] - [Unity/2D] 밑에서 위로 올라가는 물체의 중력 - Rigidbody, Dynamic, Kinematic 차이
고양이가 Food에 맞으면 체력바 게이지 상승
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cat : MonoBehaviour
{
public RectTransform front;
float full = 5.0f; // 최대 체력
float energy = 0.0f; // 현재 체력
// Start is called before the first frame update
void Start()
{
Application.targetFrameRate = 60; // 나중에 GameManager로 옮겨야함
}
// Update is called once per frame
void Update()
{
transform.position += Vector3.down * 0.05f;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Food"))
{
// 체력바 게이지 상승
energy += 1.0f;
front.localScale = new Vector3(energy / full, 1.0f, 1.0f); // 현재 체력을 최대 체력으로 나누어서 비율을 계산
// 고양이에게 맞은 Food는 파괴
Destroy(collision.gameObject);
}
}
}
![[Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 고양이가 Food에 맞으면 체력바 게이지 상승 [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 고양이가 Food에 맞으면 체력바 게이지 상승](https://blog.kakaocdn.net/dn/bFSUkX/btsGjCMijB1/YxmHPPqKOuil0AUZXdoPtk/img.png)
위와 같이 코드를 작성해주면 체력바 게이지가 상승하는 것을 볼 수 있는데요.
![[Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 고양이가 Food에 맞으면 체력바 게이지 상승 [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 고양이가 Food에 맞으면 체력바 게이지 상승](https://blog.kakaocdn.net/dn/cszqw3/btsGmYGmUTj/jLonQkzFkB22gkkuNppwU1/img.png)
문제는 체력바의 크기를 벗어나는 것입니다.
이를 해결하기 위해서 코드를 수정해야 합니다.
Application.targetFrameRate = 60; 가 뭔지 궁금하다면?
2024.03.28 - [Unity/2D] - [Unity/2D] 캐릭터 이동하기, 초당 프레임 설정 - Application.targetFrameRate
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Food"))
{
if(energy < full) // 현재 체력 < 전체 체력
{
// 체력바 게이지 상승
energy += 1.0f;
front.localScale = new Vector3(energy / full, 1.0f, 1.0f); // 현재 체력을 최대 체력으로 나누어서 비율을 계산
// 고양이에게 맞은 Food는 파괴
Destroy(collision.gameObject);
// 게이지가 다 차고 바로 fullCat으로 바뀌게 하기 위해서 여기에 코드 작성
if (energy == 5.0f) // 체력바가 다 찬 상태
{
hungryCat.SetActive(false);
fullCat.SetActive(true);
}
}
}
}
현재 체력이 전체 체력보다 작을 때만 체력바 게이지가 상승하도록 구현했습니다.
또한, 체력바가 다 찼을 때 Hungry에서 Full 고양이로 바꿔주었습니다.
결과
![[Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 고양이가 Food에 맞으면 체력바 게이지 상승 [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 고양이가 Food에 맞으면 체력바 게이지 상승](https://blog.kakaocdn.net/dn/cXqm0G/btsGlepU3LE/dIf41Tkw55IQVtw4cP4QM1/img.gif)
위에서 밑으로 내려오던 고양이! 체력바가 다 찬 상태가 되면 옆으로 이동하기
void Update()
{
if(energy < full) // 현재 체력 < 전체 체력일 때 아래로 내려가기
{
transform.position += Vector3.down * 0.05f;
}
else // 체력바가 다 찬 상태일 때 옆으로 이동하기(왼쪽일 땐 왼쪽으로, 오른쪽일 땐 오른쪽으로 이동)
{
// 중앙 기준으로 오른쪽에 있을 때
if(transform.position.x > 0)
{
transform.position += Vector3.right * 0.05f; // 오른쪽으로 이동
}
else // x가 0이거나 x(중앙)보다 작을 때
{
transform.position += Vector3.left * 0.05f; // 왼쪽으로 이동
}
}
}
결과
![[Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 위에서 밑으로 내려오던 고양이! 체력바가 다 찬 상태가 되면 옆으로 이동하기 [Unity/2D] 체력바 게이지 상승하는 코드 작성 - UI, OnTriggerEnter2D, localScale - 위에서 밑으로 내려오던 고양이! 체력바가 다 찬 상태가 되면 옆으로 이동하기](https://blog.kakaocdn.net/dn/lZpUE/btsGlRH0ZcI/739pLKX1hWHP9nCixrPII1/img.gif)
'스파르타 게임개발종합반(Unity) > 사전캠프 공부 기록' 카테고리의 다른 글
[Unity] Prefabs 확률로 생성하기, 게임 규칙 추가하기 (0) | 2024.04.04 |
---|---|
[Unity/2D] 레벨 시스템 구현 - UI, text, ToString, localScale (0) | 2024.04.04 |
[Unity] Prefab을 Hirarchy창에서 변경했을 때 기존 Prefab에도 변경사항 적용하는 법 (0) | 2024.04.03 |
[Unity] 밑에서 위로 올라가는 물체의 중력 - Rigidbody, Dynamic, Kinematic 차이 (0) | 2024.04.03 |
[Unity/2D] 체력바 만들기 - Canvas, UI, Anchors (0) | 2024.04.03 |
댓글