사생활 보호 설정
https://gamjia.tistory.com
Updated News
Mini Rooms
답글수 [0]
What Friends Say
한마디로 표현해봐~
1촌평 관리
퍼즐게임 개발일지 - 18
GamJia 2024. 3. 8. 06:27
퍼즐게임 개발일지 18편애니메이션을 timeline으로 전환시켜보자
애니메이션 전환?!
그렇다 드디어 Idle 애니메이션을 만들었다
사실 엄청 단순한데
걍 너무 그리기 귀찮았다
일단 signal을 2개 만들었다
???
애니메이션은 2개인데
왜 굳이 signal을 2개 만든겨!
timeline을 사용하지 않을 경우(튜토리얼 봄)
기본 애니메이션을 Idle 애니메이션으로
유지시키고 싶기 때문이다!
timeline 니가 좀 고생하도록
암튼 이미지처럼 trigger 2개를 만들어주고
transition에 위와 같이 연결해주었다
그리고 방금 만든 signal에 reaction을 추가했다
이름 그래도 IdleToWalk signal은
걷는 애니메이션으로 전환
WalkToIdle signal은 그 반대다
SetTrigger int, string형 둘 다 가능한데
난 그냥 알아보기 쉽게 string으로 넣었다
애니메이션이 아주 잘 바뀌었다
프롤로그를 본 이후의 모습도
아주 자연스럽다 핫핫
그리고 오랜만에 다시 나온
picture builder
판다 머리 위에 게이지바가 있는데
이번에는 그걸 구현해볼거다
아 근데 왜케 배고프냐
요즘은 5시 반에 너무 배고바
일단 Slider를 하나 만들어준다
난 그냥 Gauge Bar라고 이름 붙였다
난 위에서 아래로 내려가는 gaugeBar를 만들었다
원래 slider는 가로 방향인데
저걸 선택하면 세로 방향으로 돌아간다
내가 굳이 안돌려도 된다 후후
Max Value는 180으로 설정했다
Gauge는 1분에 하나씩 차오르게 해주었다
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class GaugeManager : MonoBehaviour { public Slider gaugeSlider; public float increaseInterval = 60f; public int increaseAmount = 1; private float timer = 0f; public static GaugeManager Instance => instance; private static GaugeManager instance; void Awake() { if (null == instance) { instance = this; } gaugeSlider=GetComponent<Slider>(); } void Start() { LoadGauge(); } void Update() { timer += Time.deltaTime; if (timer >= increaseInterval) { gaugeSlider.value = Mathf.Min(gaugeSlider.value + increaseAmount, gaugeSlider.maxValue); timer = 0f; } } void OnApplicationFocus(bool hasFocus) { if (!hasFocus) { SaveExitTime(); } else { LoadGauge(); } } void OnApplicationPause(bool pauseStatus) { if (pauseStatus) { SaveExitTime(); } else { LoadGauge(); } } void OnApplicationQuit() { SaveExitTime(); } void SaveExitTime() { PlayerPrefs.SetString("LastExitTime", System.DateTime.UtcNow.ToString()); PlayerPrefs.SetFloat("CurrentGaugeValue", gaugeSlider.value); PlayerPrefs.Save(); } public void UpdateGauge() { gaugeSlider.value = Mathf.Max(0, gaugeSlider.value - 1); } public bool IsAvailable() { return gaugeSlider.value > 0; } void LoadGauge() { string lastExitTimeStr = PlayerPrefs.GetString("LastExitTime", string.Empty); if (!string.IsNullOrEmpty(lastExitTimeStr)) { System.DateTime lastExitTime = System.DateTime.Parse(lastExitTimeStr); System.TimeSpan timeSinceExit = System.DateTime.UtcNow - lastExitTime; int incrementsSinceLastExit = (int)(timeSinceExit.TotalSeconds / increaseInterval) * increaseAmount; float currentGaugeValue = PlayerPrefs.GetFloat("CurrentGaugeValue", 0f) + incrementsSinceLastExit; gaugeSlider.value = Mathf.Min(currentGaugeValue, gaugeSlider.maxValue); } } }
만약에 게임 플레이 중이면 gauge의 maxValue(180)
이하로 1분에 한번씩 증가한다(update)
어제 본 OnApplicationPause,Pause,Quit이 나왔다
만약에 유저가 게임을 종료하거나
백그라운드로 보내버릴 경우 그 시간을 저장한다
그리고 다시 돌아올 경우 그 시간부터 지금까지
얼마의 시간이 지났는지 확인하고
그 값에 60을 나눠서 gauge에 넣어준다
UpdateGauge는 value를 1씩 감소 시키지만
0 미만으로 감소시키지 않게 보장한다
그리고 IsAvailable()을 이용해
0보다 큰가요? 작나요를 물어보고
0보다 커용!
아 그럼 퍼즐 맞추기 가능
맞췄어용!
1 깎을게용!
이렇게 된다
코드를 저장하고 임의의 퍼즐 2개를 맞춰봤다
1분이 지나니 Gauge Value가 1 증가했다
혹시 몰라서 딱! 1분 짜리 영상을 준비했다
맨 마지막에 진짜 짧게 나오니까
숫자를 집중해서 보길 바람
아 배고팡!!!!!