์ ๋ช ํ ํ๋์๊ฒ์ ์ ์๋ ์๋ณผ๋ ์ถค์ถ๊ธฐ ๊ฒ์์ ์์ฉ
์ด ๊ฒ์์ ๋ํ ์๊ฐ :
์ ์๋์ด ์์ ํ๋ ๋์ ๋ง์ฐ์ค ํด๋ฆญ์ ํตํด ๋คํค์ง ์๊ณ ์ถค์ ์ถ๋ฉด์ ๋ฒํ จ ์๊ฐ์ ๋ฐ๋ผ ์ ์๋ฅผ ์ป๋ ๊ฒ์์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํด๋น Canvas ๋ฐ ์ํ UI์ค๋ธ์ ํธ๋ค์ ์๋์์ ์กด์ฌํ๊ฒ ๋๋ค.
Fill : ์ฑ์ธ ์๊น
BackGround : Slider์ ์ ์ฒด ํฌ๊ธฐ ๋ณด์ฌ์ค
์ด ์์ ์ ํ๋ ์ด์ ๋ ํ์ง ์์ผ๋ฉด ์ฌ๋ผ์ด๋๊ฐ ๊ฝ ์ฑ์์ง์ง ์์ ๋น๊ณต๊ฐ์ด ์๊ธฐ๋๋ฐ ์ํํ๋ฉด ์๋์ ๊ฐ์ด ๊ฝ ์ฑ์ธ ์ ์๋ค.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // UI๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํจ
public class NoiseCheck : MonoBehaviour
{
[SerializeField] private GameObject player;
// ์บ๋ฆญํฐ ์ค๋ธ์ ํธ
[SerializeField] private GameObject UIObject;
// Canvas์ค๋ธ์ ํธ
[SerializeField] private Slider noiseSlider;
// ์ฌ๋ผ์ด๋ ์ค๋ธ์ ํธ
[SerializeField] private Image fillImage;
// ์ฌ๋ผ์ด๋์ ๊ฐ์ ๋ฐ๋ผ ์ฌ๋ผ์ด๋์ ์์ ๋ณํ๋ฅผ ์ฃผ๊ธฐ์ํ ์ด๋ฏธ์ง
// ์บ๋ฆญํฐ๊ฐ ๋ค์ด์ฌ๋๋ง ์ํ์ํค๊ธฐ
private bool isPlayerEnter;
private float chargeSpeed;
// ์ฑ์์ง๋ ์๋
private float chargeTime;
// ์ฑ์์ง๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ
private float currentNoise;
// ํ์ฌ ์ฌ๋ผ์ด๋ ๊ฐ์ ์ ์ฅ
public float walkingTime = 15f;
// ์บ๋ฆญํฐ๊ฐ ๊ฑธ์ ๋
public float runningTime = 3f;
// ์บ๋ฆญํฐ๊ฐ ๋ฌ๋ฆด ๋์ chargeTime
public float waitingTime = 4f;
// ์บ๋ฆญํฐ๊ฐ ๋๊ธฐํ๊ณ ์์ ๋
public float sliderYOffset = 6f;
// ์บ๋ฆญํฐ์ ์ฌ๋ผ์ด๋ ์ฌ์ด์ ๊ณ ์ ์คํ์
void Update()
{
if (isPlayerEnter)
{
// ์บ๋ฆญํฐ๊ฐ ์์ง์ด๋ฉด UI๋ ๋์์ ์์ง์ผ ์ ์๋๋ก ์ํ
UIObject.transform.position = new Vector3(player.transform.position.x,
player.transform.position.y + sliderYOffset,
player.transform.position.z);
// ํธ๋ฆฌ๊ฑฐ ๋ด์์ ์บ๋ฆญํฐ ์์ง์ ๊ด๋ จ ์
๋ ฅ์ ๋ฐ์ผ๋ฉด ์ํ
if (Input.GetKey(KeySetting.keys[KeyAction.LEFT]) || Input.GetKey(KeySetting.keys[KeyAction.RIGHT]) ||
Input.GetKey(KeySetting.keys[KeyAction.UP]) || Input.GetKey(KeySetting.keys[KeyAction.Down]))
{
if (Input.GetKey(KeySetting.keys[KeyAction.WALK]))
{
chargeTime = walkingTime;
}
else
{
chargeTime = runningTime;
}
}
else
{
chargeTime = -waitingTime;
}
// ์๋ = ๊ฑฐ๋ฆฌ / ์๊ฐ =>
// ์ฑ์์ง๋ ์๋ = (์ฌ๋ผ์ด๋ ์ต๋๊ฐ - ์ต์๊ฐ) / ์ํฉ์ ๋ฐ๋ผ ์ค์ ํ ์๊ฐ๊ฐ
chargeSpeed = (noiseSlider.maxValue - noiseSlider.minValue) / chargeTime;
// ์ค์ ์๊ฐ๊ณผ ๋๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋๋ก Time.deltaTime์ ๊ณฑํ๊ธฐ
currentNoise += chargeSpeed * Time.deltaTime;
// ํ์ฌ ๊ฐ์ด ์ฌ๋ผ์ด๋ ์ต๋๊ฐ ์ด์์ด๋ฉด ์ต๋๊ฐ์ผ๋ก
if (currentNoise >= noiseSlider.maxValue)
{
currentNoise = noiseSlider.maxValue;
}
// ํ์ฌ ๊ฐ์ด ์ฌ๋ผ์ด๋ ์ต์๊ฐ ์ดํ๋ผ๋ฉด ์ต์๊ฐ์ผ๋ก
else if (currentNoise <= noiseSlider.minValue)
{
currentNoise = noiseSlider.minValue;
}
ColorChange();
// ์ฌ๋ผ์ด๋์ ์ ์ฉ
noiseSlider.value = currentNoise;
}
}
// ์ฌ๋ผ์ด๋์ ํ์ฌ๊ฐ์ ๋ฐ๋ผ ์ ์ฉํ ์๊น ์ง์
void ColorChange()
{
if(currentNoise >= 0f && currentNoise <= 40f)
fillImage.color = Color.green;
else if(currentNoise > 40f && currentNoise <= 70f)
fillImage.color = Color.yellow;
else
fillImage.color = Color.red;
}
// ์บ๋ฆญํฐ๊ฐ ํธ๋ฆฌ๊ฑฐ์ ๋ค์ด์ค๋ฉด UI์ค๋ธ์ ํธ ์ผ๊ธฐ
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
UIObject.SetActive(true);
isPlayerEnter = true;
}
}
// ์บ๋ฆญํฐ๊ฐ ํธ๋ฆฌ๊ฑฐ์ ๋ค์ด์ค๋ฉด UI์ค๋ธ์ ํธ ๋๊ธฐ
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "Player")
{
// ๋ค์ ๋ค์ด์ฌ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด ํ์ฌ ์์ ๊ฐ ์ด๊ธฐํ ์์ผ๋๊ธฐ
currentNoise = noiseSlider.minValue;
UIObject.SetActive(false);
isPlayerEnter = false;
}
}
}