728x90
개요
배틀그라운드처럼 위에 캠퍼스바와 실시간 시간을 입력받는 것을 구현해보았다.
출처
캠퍼스바 참고
https://www.youtube.com/watch?v=aMEHOU6xpWA
스크립트
캠퍼스바 구현
더보기
유튜브에 나오는 캠퍼스바 이미지 파일로 하면 에러가 나서 따로 캠퍼스바 이미지를 다운받아 사용했다.
using UnityEngine.UI;
using UnityEngine;
public class Compass : MonoBehaviour
{
public RawImage CompassImage;
public Transform Player;
public Text CompassDirectionText;
public void Update()
{
//Get a handle on the Image's uvRect
CompassImage.uvRect = new Rect(Player.localEulerAngles.y / 360, 0, 1, 1);
// Get a copy of your forward vector
Vector3 forward = Player.transform.forward;
// Zero out the y component of your forward vector to only get the direction in the X,Z plane
forward.y = 0;
//Clamp our angles to only 5 degree increments
float headingAngle = Quaternion.LookRotation(forward).eulerAngles.y;
headingAngle = 5 * (Mathf.RoundToInt(headingAngle / 5.0f));
//Convert float to int for switch
int displayangle;
displayangle = Mathf.RoundToInt(headingAngle);
//Set the text of Compass Degree Text to the clamped value, but change it to the letter if it is a True direction
switch (displayangle)
{
case 0:
//Do this
CompassDirectionText.text = "N";
break;
case 360:
//Do this
CompassDirectionText.text = "N";
break;
case 45:
//Do this
CompassDirectionText.text = "NE";
break;
case 90:
//Do this
CompassDirectionText.text = "E";
break;
case 130:
//Do this
CompassDirectionText.text = "SE";
break;
case 180:
//Do this
CompassDirectionText.text = "S";
break;
case 225:
//Do this
CompassDirectionText.text = "SW";
break;
case 270:
//Do this
CompassDirectionText.text = "W";
break;
default:
CompassDirectionText.text = headingAngle.ToString ();
break;
}
}
}
실시간 시간은 최적화를 위해 코루틴으로 구현해주었다.
더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using UnityEngine.UI;
public class Timer : MonoBehaviour
{
public Text DayTxt;
public Text TimeTxT;
// Start is called before the first frame update
void Start()
{
StartCoroutine("GetCurrentDate");
}
public void GetCurrentDate()
{
while(true)
{
string MonthAndDay = DateTime.Now.ToString(("MM/dd"));
DayTxt.text = MonthAndDay;
string DayTime = DateTime.Now.ToString("t");
TimeTxT.text = DayTime;
}
}
// Update 안쓰고 일부러 코루틴써서 최적화 ---> 이제 여기서 시간에 맞게 ex) 만일 50초에 실행됐으면 10초 후 시간 바뀌고 다시 60초 타이머
IEnumerator GetCurrentDate()
{
bool first = true;
int seconds = 60-DateTime.Now.Second;
while (true)
{
string MonthAndDay = DateTime.Now.ToString(("MM/dd"));
DayTxt.text = MonthAndDay;
string DayTime = DateTime.Now.ToString("t");
TimeTxT.text = DayTime;
if (first)
{
yield return new WaitForSeconds(seconds);
first = false;
}
else yield return new WaitForSeconds(60f);
}
}
}
플레이 영상
'유니티 > 유니티 기능 구현' 카테고리의 다른 글
유니티 Nav Mesh Agent를 이용한 추적 기능 (0) | 2022.05.09 |
---|---|
유니티 오클루전 컬링 (0) | 2022.04.28 |
원하는 위치에 오브젝트 Instantiate해주기 (0) | 2022.04.27 |
유니티 미니맵 구현 (0) | 2022.04.20 |
유니티 3인칭 조이스틱 구현 (0) | 2022.04.20 |