작업 목록
- 귀신 개별 패턴
- 귀신들이 플레이어의 이동을 불편하게 만드는 패턴을 설계
- SCP 땅콩 변형 모델 추가
- 플레이어 시스템
- 달리기 추가: 스테미나 소모 시스템 구현
- 정신력 게이지: 정신력에 따른 화면 변화 (어두워짐, 어지러움 등)
- 시각적 효과
- 시야 흔들림 효과 구현
- UI 및 아이템
- 교수쪽 UI: 힌트 아이템을 위한 UI 디자인
- 배터리 아이템: 배터리 아이템 추가
- 정신력 회복 아이템: 예시로 핫식스 아이템 추가
- 플레이어와 귀신 애니메이션 구축
- 귀신 및 플레이어 애니메이션
- 귀신과 플레이어에 맞는 애니메이션 추가 및 구현
- 패턴 및 기능 추가
- 새로운 패턴을 가진 귀신을 구현하여 게임에 추가
작업 목록을 살펴 봤을 때 UI에 연관성이 있는 부분이 많기 때문에 UI부터 구현 해보기로 했습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Condition : MonoBehaviour
{
public float curValue;
public float maxValue;
public float startValue;
public float passiveValue;
public Image uiBar;
private void Awake()
{
}
private void Start()
{
curValue = startValue;
}
private void Update()
{
uiBar.fillAmount = UpdateUI();
}
public void Add(float amount)
{
curValue = Mathf.Min(curValue + amount, maxValue);
}
public void Subtract(float amount)
{
curValue = Mathf.Max(curValue - amount, 0.0f);
}
public float UpdateUI()
{
return curValue / maxValue;
}
}
- UI를 구성하고 있는 요소인 정신력, 스테미나, 배터리 UI에 붙을 기본 스크립트입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UICondition : MonoBehaviour
{
public Condition stamina; // 스테미나
public Condition mental; // 정신력
public Condition battery; // 배터리
}
- UI요소를 담고 있을 컨테이너 역할을 할 스크립트입니다. 하나의 스크립트를 달고 있지만 여기에서 용도에 따라 분리합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem.EnhancedTouch;
public class PlayerCondition : MonoBehaviour
{
public BasePlayer basePlayer;
public PlayerController controller;
[SerializeField] private UICondition uiCondition;
public Condition stamina { get { return uiCondition.stamina; } }
public Condition mental { get { return uiCondition.mental; } }
public Condition battery { get { return uiCondition.battery; } }
private void Awake()
{
basePlayer = GetComponent<BasePlayer>();
controller = GetComponent<PlayerController>();
}
private void Start()
{
controller.onFlash += OnFlash;
}
private void Update()
{
}
public void MentalHeal(float amount) // 정신력 회복 매서드
{
mental.Add(amount);
}
public void MentalShock(float amount) // 정신 공격 받을 때 매서드
{
mental.Subtract(amount);
// 정신력게이지에 따라 화면이 어두워진다던가 어지러워진다던가 하는 표현 필요
}
public void BatteryCharge(float amount) // 배터리 충전 매서드
{
battery.Add(amount);
}
private void OnFlash()
{
if (!controller.flashlight.activeSelf)
{
CoroutineManager.Instance.StopCoroutine(nameof(BatteryPassiveSubtract));
}
else
{
CoroutineManager.Instance.StartCoroutine(nameof(BatteryPassiveSubtract));
}
}
private IEnumerator BatteryPassiveSubtract()
{
while (controller.flashlight.activeSelf)
{
battery.Subtract(battery.passiveValue); // 해당 값을 아직 정하지 않았음
yield return new WaitForSeconds(0.5f);
}
yield return null;
}
public IEnumerator StaminaPassiveSubtract()
{
while(stamina.curValue != 0f)
{
stamina.Subtract(stamina.passiveValue); // 해당 값을 아직 정하지 않았음
yield return new WaitForSeconds(0.5f);
}
yield return null;
}
}
- 용도 분리한 스크립트를 캐싱하고 UI에 대한 실질적인 조작 매서드를 담고 있는 스크립트입니다. 이 3가지 스크립트는 앞서 수강한 강의의 코드를 참고하여 작성하는 것으로 플레이어 쪽 UI 틀은 만들었습니다. 이제 상태나 이벤트 등을 이용해서 UI 조작 매서드 호출 해주는 식으로 사용했습니다
'개발의 시작 TIL(Today I Learned)' 카테고리의 다른 글
개발의 시작 TIL - 모의면접 준비 (0) | 2024.12.27 |
---|---|
오늘의 TIL (Today I Learned) 포스트 프로세싱(Post-Processing) (0) | 2024.12.26 |
최종프로젝트 - 중간 발표최종프로젝트 - 중간 발표 (1) | 2024.12.23 |
개발의 시작 TIL(Today I Learned) 모의 면접을 준비하며 배운 점 (0) | 2024.12.20 |
개발의 시작 TIL(Today I Learned) 중간발표를 준비하며 프로젝트 돌아보기 (1) | 2024.12.19 |