본문 바로가기
UNITY/Unity Study

박스미는 만큼 HP 깎기

by GREEN나무 2023. 8. 19.
728x90

플레이어가 물체를 옮기는 만큼 HP가 깎이도록 만들거에요

나무박스는 1m에 -1HP, 금속박스는 1m에 -2HP

 

HP는 UI로 보여줄 거에요

 

 

바닦, 큐브2개, 캡슐(플레이어) 하나를 준비해 주세요

 

잘 보이게 객체에 색을 입혀줄게요

프로젝트에서 우클릭 > Credat > Meterial

 

색일 지정해 주시고

나무는 Metalli과 Smoothness를 낮게, 금속 상자는 높게 설정해주세요

 

 

 

 

플레이어에 newHP넣고

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{

    public float newHP = 100;

    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        transform.Translate(new Vector3(h, 0, v) * 10f * Time.deltaTime);
    }
}

 

박스에서 이동량 만큼 hp를 깎았습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Box : MonoBehaviour
{
    public float hp; // 깎을 hp
    public float distance; // 이동거리
    GameObject player;
    Player playerSc;
    Vector3 prevPos; // 처음 위치
    // Start is called before the first frame update
    void Start()
    {
        this.player = GameObject.Find("Player");
        playerSc = player.GetComponent<Player>();
    }

    // Update is called once per frame
    void Update()
    {
        // 위치 업데이트
        Vector3 pos = transform.position;
        Vector3 dis = prevPos - pos;
        playerSc.newHP -= hp * dis.magnitude;

        prevPos = pos;
    }
}

 

플레이어가 하나일 때는 public으로 정해줄 필요 없이 아래의 코드처럼 플레이어의 코드를 불러올 수 있습니다.

    GameObject player;
    Player playerSc;
    
    void Start(){
        this.player = GameObject.Find("Player");
        playerSc = player.GetComponent<Player>();
    }

 

~.magnitude 는 벡터 사이의 거리 절댓값을 반환합니다.

 

void Update()
    {
        // 위치 업데이트
        Vector3 pos = transform.position;
        Vector3 dis = prevPos - pos;
        playerSc.newHP -= hp * dis.magnitude;

        prevPos = pos;
    }

 

 

 

큐브에 Box .cs를 넣고 거리당 깎을 hp를 적어주세요

 

슬라이더는  자동으로 찾게 해서

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HpSlyder : MonoBehaviour
{

    Slider slHP;

    GameObject player;
    Player playerSc;
    // Start is called before the first frame update
    void Start()
    {
        this.player = GameObject.Find("Player");
        playerSc = player.GetComponent<Player>();

        slHP = GetComponent<Slider>();
    }

    private void Update()
    {
        UpdateHP();
    }
    public void UpdateHP()
    {
        this.slHP.GetComponent<Slider>().value = playerSc.newHP;
        Debug.Log(playerSc.newHP);
    }
}

UI를 사용할거라 

using UnityEngine.UI;

를 꼭 추가해주세요

 

슬라이더에 색을 정해주세요

 

 

 

슬라이더의 Max값을 100으로(newHP처음 값)바꿔주세요

 

https://youtu.be/KvLgwS98paA

 

코드

https://github.com/BlueStrobus/UnityCsCode/tree/main/%E1%84%89%E1%85%A1%E1%86%BC%E1%84%8C%E1%85%A1%20%E1%84%8B%E1%85%B5%E1%84%83%E1%85%A9%E1%86%BC%E1%84%80%E1%85%A5%E1%84%85%E1%85%B5%E1%84%86%E1%85%A1%E1%86%AB%E1%84%8F%E1%85%B3%E1%86%B7HP%E1%84%81%E1%85%A1%E1%86%A9%E1%84%80%E1%85%B5

 

'UNITY > Unity Study' 카테고리의 다른 글

유니티 문법  (0) 2023.08.19
벡터 사이의 거리 구하기  (0) 2023.08.19
Roulette  (0) 2023.08.14
플레이어 따라다니는 텍스트 만들기  (0) 2023.08.14
계단에서 굴러떨어짐 고치기  (0) 2023.08.05