이전 단계에서 화살에 맞으면 HP가 닳는 것 까지 구현을 했는데, 에셋 스토어에서 무료 에셋을 다운로드하고, 게임에 추가하는 과정을 추가할 예정이다.
나의 경우 HP up 에 사용될 하트를 구하기 위해서 픽셀로 된 무료 에셋을 찾았다.
보기
내 에셋에 추가한 다음
별첨 1. 하트 에셋을 추가하고 하트를 먹으면 hp가 차는 것 구현하기
- 어떻게 해야 할지 감이 안온다면, 이전 글을 다시 읽어보기 바랍니다.
- GameDirector에 IncreaseHP() 메서드를 생성해서 하트를 먹으면 HPGauge의 fillAmount의 값을 증가하게끔 구현
- 게임이 너무 단순하면 재미가 없기 때문에, 하트가 생성되는 속도는 0.7f, 하트가 내려오는 속도는 0.3f, 범위는 0.3f로 설정해서 사용자가 하트를 먹기 어렵게 구현하였다.
별첨 2. 고양이 캐릭터의 이동 값을 변경해보기
- 게임에 디테일을 입히기 위해서, 사용자가 캐릭터를 움직일때 더 섬세한 조작을 할 수 있도록, 이동 값을 줄인다.
- 프레임이 끊어지는 것을 막기 위해서 GetKeyDown() 을 GetKey()로 변경해서, 사용자가 키보드를 누르고 있을때도 동작하게끔 작업한다.
참고 코드
<< PlayerController >>
// 왼쪽 화살표가 눌린 경우
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate((float)-0.3, 0, 0); // 왼쪽으로 0.3 움직인다.
}
if (Input.GetKey(KeyCode.RightArrow)) {
transform.Translate((float)0.3, 0, 0); // 오른쪽으로 0.3 움직인다.
}
별첨 3. 게임의 시작과 끝 구현하기
- 현재는 HP가 0이 되어도 게임이 끝나지 않는다.
- HP가 0이 되면, 화면의 인스턴스를 모두 삭제하고, 게임을 종료시키는 것을 구현할 필요성이 있다.
- 서적에서는 6장에서 설명하지만, 필요한 부분만 미리 가져와서 구현할 예정이다.
GameDirector
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameDirector : MonoBehaviour
{
GameObject hpGauge;
void Start()
{
this.hpGauge = GameObject.Find("HPGauge");
// Find() 를 사용해서 Scene에서 HPGauge 오브젝트를 찾는다.
}
public void DecreaseHp()
{
this.hpGauge.GetComponent<Image>().fillAmount -= 0.1f;
// image의 옵션값 fillAmount의 값을 변경시킨다.
}
public void IncreaseHp()
{
this.hpGauge.GetComponent<Image>().fillAmount += 0.2f;
// image의 옵션값 fillAmount의 값을 변경시킨다.
}
// 추가 **
private void Update()
{
// hp가 0이 되면 ClearScene으로 전환한다.
if (this.hpGauge.GetComponent<Image>().fillAmount <= 0)
{
SceneManager.LoadScene("ClearScene");
}
}
// ** 추가
}
ClearDirector
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ClearDirector : MonoBehaviour
{
void Update()
{
if (Input.GetKeyUp(KeyCode.Space))
{
SceneManager.LoadScene("GameScene");
}
}
}
버그 발생 : 해결 필요
- 하트가 보이지 않음
- space바를 누르면 게임이 그냥 다시 시작되어 버림
- 원래 계획한 취지를 벗어난 오류가 발생함
해결

2. space바를 누르면 게임이 다시 시작되는것은 scene이 제대로 인식되지 않아서 잡버그였다.. 바로 해결됨
별첨 4. 캐릭터가 맵 밖으로 나가지 않도록 구현
- 캐릭터가 맵 밖으로 나가면 무적으로 점수를 얻을 수 있기 때문에, 맵 밖으로 나가지 않도록 구현하는게 중요했다.
- 맵의 크기를 얻고, 캐릭터의 좌표값을 따서, 확인했다.
PlayerController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
GameObject player;
// Start is called before the first frame update
void Start()
{
Application.targetFrameRate = 60;
this.player = GameObject.Find("player");
}
// Update is called once per frame
void Update()
{
// 왼쪽 화살표가 눌린 경우
if (Input.GetKey(KeyCode.LeftArrow) && transform.position.x >= -12.5)
{
transform.Translate((float)-0.3, 0, 0); // 왼쪽으로 0.3 움직인다.
}
if (Input.GetKey(KeyCode.RightArrow) && transform.position.x <= 12.5)
{
transform.Translate((float)0.3, 0, 0); // 오른쪽으로 0.3 움직인다.
}
}
}
※ 여기서 문제는 화살표나 하트가 떨어지는 범위 값이 -6~6이지만, 캐릭터가 이동할 수 있는 범위는 -12.5 ~ 12.5 이므로 떨어지는 오브젝트의 x범위값을 변경해줘야 했다.
'개발 > 유니티(UNITY)' 카테고리의 다른 글
5-7 유니티로 화살 피하기 게임 만들기(심화3) (0) | 2023.10.30 |
---|---|
5-6 유니티로 화살 피하기 게임 만들기(심화2) (0) | 2023.10.30 |
5-4 유니티로 화살 피하기 게임 만들기 (0) | 2023.10.28 |
5-3 유니티로 화살 피하기 게임 만들기 (0) | 2023.10.27 |
5-2 유니티로 화살 피하기 게임 만들기 (0) | 2023.10.26 |