기억할 것
TextMeshPro 컴포넌트 가져올 때 TextMeshProUGUI를 가져와야 함.
Tip) 컴포넌트명을 모르겠으면 Edit Script로 확인할 수 있는 컴포넌트가 있음
고민사항
public 변수의 사용을 막기 위해 싱글톤을 사용했는데 InfoUIManager를 public으로 받아서
Managers를 통해 다른 클래스에서 사용할 수 있도록 구성
이 구조대로 가면 지난번에 설계한 것과 비슷한 흐름으로 갈 거 같은데
InfoUIManager를 싱글톤 처리하면 어떠려나..
근데 이걸 싱글톤 처리하면 앞으로 생기는 매니저들도 싱글톤을 사용해서
결국 메모리 관리에 비효율적이게 될거 같다.
해야할 일
<정보창>
타이핑 효과
클릭했을 때 다음 문구로 넘어가도록
230210 이전 내용
스트레스 게이지바 (체력바)
[사용 컴포넌트] UI - Slider / Image(게이지 색)
[GameObject 구조] Health Bar(Health Bar.cs) - Fill()
코드 구조
[스크립트] HealthBar.cs / PlayerTest.cs
>> PlayerTest에서 HealthBar의 메소드를 호출하는 구조
기능
시간에 따라 게이지가 차게 하기
[흐름]
PlayerTest에 IncreaseStress 메소드 구현
키보드 입력 O를 받았을 때 Coroutine을 사용하여 IncreaseStress 함수 호출
[구현]
IEnumerator IncreaseStress(float health)
{
while(health < maxHealth)
{
health += Time.deltaTime * stressSpeed;
currentHealth = health;
healthBar.SetHealth(currentHealth);
yield return new WaitForFixedUpdate();
}
Debug.Log("스트레스 만땅");
}
참고자료
Brackeys - Unity에서 HEALTH BAR를 만드는 방법!
230210 개발 일지
캐릭터 움직임
[사용 컴포넌트] : Rigidbody2D
코드 구조
[스크립트] PlayerTest.cs
기능
키보드 A, D(혹은 좌우 방향키) 입력시 좌우 이동 및 캐릭터 좌우 반전
[흐름]
Input.GetAxisRaw("Horizontal")로 키보드 입력 받기
입력값에 따라 캐릭터 좌우 설정 (Spine 파일밖에 없어서 spine으로 설정 / 이후 코드변경 필요)
rigidbody.position = 입력된 방향값(hAxis) * 이동속도(speed)
[구현]
// Move
float hAxis = Input.GetAxisRaw("Horizontal");
if(hAxis == 0)
skeletonAnimation.AnimationState.SetAnimation(0, "animation", true);
else
{
if(hAxis < 0)
skeletonAnimation.skeleton.ScaleX = Mathf.Abs(skeletonAnimation.skeleton.ScaleX);
else
skeletonAnimation.skeleton.ScaleX = -Mathf.Abs(skeletonAnimation.skeleton.ScaleX);
}
rigid.position += Vector2.right * hAxis * speed;
마우스 아이템 상호작용
1. 상호작용 가능한 아이템 위에 마우스를 올리면 Cursor 모양 변경
[사용 컴포넌트] : BoxCollider2D
코드 구조
[스크립트] ItemTest.cs
기능
상호작용 가능한 아이템 위에 마우스를 올리면 Cursor 모양 변경
[흐름]
Resources.Load<Texture2D>로 마우스 이미지 가져오기
MonoBehaviour의 OnMouseOver, OnMouseExit 함수에 Cursor.Setcursor로 커서 모양 변경
[구현]
Texture2D cursorOverImage;
Texture2D cursorOriginImage;
void Start()
{
cursorOverImage = Resources.Load<Texture2D>("Sprites/UI/플레이어 커서");
cursorOriginImage = Resources.Load<Texture2D>("Sprites/UI/마우스포인터");
}
private void OnMouseOver()
{
Cursor.SetCursor(cursorOverImage, Vector2.zero, CursorMode.Auto);
}
private void OnMouseExit()
{
Cursor.SetCursor(cursorOriginImage, Vector2.zero, CursorMode.Auto);
}
2. 상호작용 가능한 아이템 클릭시 정보창 출력
[사용 컴포넌트] : BoxCollider2D
코드 구조
[스크립트] Managers.cs / InfoUIManger.cs / ItemTest.cs
>> 싱글톤 인스턴스 Managers에서 public 변수인 infoUIManager를 itemTest에서 메소드 호출
기능
상호작용 가능한 아이템 위에 마우스를 올리면 Cursor 모양 변경
[흐름]
1. 싱글톤 인스턴스 Managers 생성
2. ItemTest.cs에서 MonoBehaviour의 OnMouseDown 함수에 정보창 text 설정 및 오브젝트 활성화
[구현]
InfoUIManager.cs
public void EnableUI()
{
imageGo.SetActive(true);
}
public void DisableUI()
{
imageGo.SetActive(false);
}
public void SetInfoText(string text)
{
TextMeshProUGUI textMeshPro = imageGo.transform.GetChild(0).GetComponent<TextMeshProUGUI>();
textMeshPro.SetText(text);
}
ItemTest.cs
private void OnMouseDown()
{
Managers.Instance.infoUIManager.SetInfoText(infoText);
Managers.Instance.infoUIManager.EnableUI();
}
구현 영상
'개발 > 게임' 카테고리의 다른 글
Unity:: TDD / Unity Test Framework (업무 회고) (0) | 2023.08.27 |
---|---|
Unity:: ScrollRect의 개념 & 동적 정렬 (0) | 2023.08.06 |
Unity:: Layout Group & Layout Element (0) | 2023.07.23 |
Unity:: UI 해상도 대응 (0) | 2023.07.16 |
Unity:: RectTransform 개념 (0) | 2023.07.09 |