본문 바로가기
유니티/간단한 게임

간단한 게임만들기#8(캐릭터 HP와 위험요소 제작2)

by 오늘의논리 2023. 7. 5.
728x90
public void next_stage_button()
{
    if (stage_num == 1)
    {
        GameObject.FindGameObjectWithTag("Player").transform.position = spawn_stage_1.transform.position;
    }
}

이번엔 캐릭가 적에 부딪혔을때 체력깎임 뿐만 아니라 약간 빨간색으로 변하게 해서 직관적으로 표현해 생각이다.

 

  • Player 스크립트를 다음 상단에

Material meshs; // 이렇게 meshs라고 선언해준뒤

Start 함수에서 아래와 같이 작성해 준다.

meshs = this.transform.GetChild(0).GetComponent<SkinnedMeshRenderer>().material;
  • 그리고 OnDamag 함수에 가서 아래와 같이 작성해준다.

이렇게 작성 적과 부딛히면 색갈이 2초간 빨간색으로 바뀐후 돌아오는것을 확인 있다.

 

  • 이제 적이 나를 따라오게 해볼건데 Window - Ai - Navigation 클릭한다.

 

  • 그다음 Map - Plane 선택한다음 Navigation 에서 Bake 선택한 Bake 클릭한다.  이후 Gobline_enemy( 오브젝트)에서 AddComponent 한다음 Nav Mesh Agent 추가한다.

  • Goblin_enemy 스크립트를 열어준다음 using UnityEngine.AI; 상단에 추가해주고 아래 내용을 추가한다.
public Transform target;
private NavMeshAgent navagent;

private void Awake()
{
    target = GameObject.FindGameObjectWithTag("Player").transform;
    navagent = GetComponent<NavMeshAgent>();
}

private void FixedUpdate()
{
    navagent.SetDestination(target.position);
}
  • 이후 Player_Boy Player 태그를 붙여주고 Plane(바닥) - Navigation 에서 object - Navigation Static 체크해준다. 이후 다시 Bake 해준다.

 

  • 게임을 실행해보면 적이 따라오는것을 확인 있다. 이제 HP 0 됬을때 사망하는걸 만들어 볼텐데  일단 캔버스의 End 이미지를 캔버스 최하단으로 만들어주고 Clear_Image 이름을 바꿔준다. 그리고 Ctrl D 복제한 다음 Dead_Image 이름을 바꾼다음에 죽었을때 화면으로 바꿔준다.
  • MyManager 스크립트로 가서 public GameObject Dead_Image; 선언해주고 메인카메라 오브젝트에서 Dead_Image 넣어주고 MyManager 스크립트에 아래 함수를 추가해준다.
public void Player_Dead()
{
    Dead_Image.SetActive(true);
}

 

함수를 만들어주고 다시 Player 스크립트로 가서 OnTriggerEnter 함수 내에 적과 부딛혔을때 부분을 아래와 같이 수정해준다.

if (other.tag == "Enemy_Goblin")
{
    if(!noDamage)
    {
        HP = HP - other.GetComponent<Goblin_enemy>().Damage;
        if (HP > 0)
        {
            StartCoroutine("OnDamage");
        }
        else if (HP <= 0)
        {
            MyManager.Instance.Player_Dead();
        }
    }
}

 

  • 이제 스테이지를 이어주는 작업을 할건데 먼저 MyManager 스크립트에서 public int stage_num; 라고 변수를 하나 선언해 주고 Awake 함수에 0으로 초기화 해준다.
  • Player 스크립트로 가서 Score 100 넘기면 엔드이미지를 띄워주는 부분 아래 MyManager.Instance.stage_num++; 부분을 추가한다
  •  MyManager 스크립트에서 public GameObject spawn_stage_1; 라는 오브젝트 변수를 추가하고 아래 내용을 추가한다. 스테이지가  1 되면 다음스테이지로 플레이어의 위치를 옴기는것이다.

 

 

  • 됬으면 Map2 에서 우클릭- Create Empty 클릭 이름을 spawn 으로 지정해주고 카메라 - 스크립트 부분에서 Spawn_stage_1 Map2 에서 만든 spawn 넣어준다.
  • 그리고 Canvas - Dead_Image - Next_Stage_Button - On Click 에서 Main Camera 지정한뒤 MyManager.next_stage_button 으로 지정해준다. 스테이지를 깨고 버튼을 누르면 다음 스테이지를 가기 위함이다.

 

  • 이후 next_stage_button 함수에서 Clear Image false 해준다.
728x90

댓글