2024. 3. 8. 06:27ㆍGame Develop
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/016.gif)
퍼즐게임 개발일지 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분 짜리 영상을 준비했다
맨 마지막에 진짜 짧게 나오니까
숫자를 집중해서 보길 바람
아 배고팡!!!!!
'Game Develop' 카테고리의 다른 글
3월 15일까지 포트폴리오 정리합니다! (0) | 2024.03.12 |
---|---|
퍼즐게임 디자인일지 - 13 (0) | 2024.03.11 |
퍼즐게임 개발일지 - 17 (0) | 2024.03.07 |
퍼즐게임 디자인일지 - 12 (0) | 2024.03.07 |
퍼즐게임 개발일지 - 16 (0) | 2024.03.05 |