Unity 77

플레이어 아이템 상호작용

플레이어가 주변 아이템을 회수할 수 있도록 상호작용하는 스크립트를 만들예정이다. 게임중에서 아이템에 에임을 대고 줍는 게임이 있다면, 주변 범위를 인식하여 리스트로 뽑아내는 게임이 있다. 콜라이더를 플레이어 내에 배치하여 원하는 만큼 범위를 주고, Enter한 오브젝트들을 List에 담아 표시해주는 식으로 하였다. public TMP_Text interactionText; // UI Text 요소를 가리키는 변수 public LayerMask LayerMask; private Collider _interactCollider; [SerializeField] private Collider _playerCollider; private List _interactionLayerList = new List(); p..

Unity 2024.01.30

Onclick.AddListener 사용시 주의점

문제 Onclick.AddListener이벤트를 팝업에서 완료버튼을 눌렀을 때 수량만큼 인벤토리에 전달하는 기능을 하던 도중 수치가 계속 중복되어 올라가는 문제가 생겼다. 시도 및 해결 처음에는 OnEnable에서 중복으로 받는것이 아닌가도 생각해봤지만 머리를 식히고 다시 보니 초기화를 시키지 않았던 탓에 계속 계산이 중복된다는 것을 깨달았다. 알게된 점 초기화 실수는 가끔 하는 편이지만 특히 AddListener의 경우에는 RemoveListener 를 해줘야 한다는 것을 알게 되었고 그래서 이번 포스트에 이에 대해 정리해 볼 예정이다. Onclick.AddListener 유니티에서 Onclick.AddListener를 통해 버튼의 클릭과 같은 이벤트를 코드로 처리할 수 있다. 이를 이용해서 특정한 이..

Unity 2024.01.25

상점 슬롯 버튼에서 팝업창으로 기능

문제 상점에서 아이템을 선택하고 그 아이템을 다시 한번 팝업으로 전달해주는 기능을 만드는 도중 이를 전달하지 못하는 문제가 생겼다. 포션을 클릭하면 해당 포션의 정보를 아래 알려주고 구매버튼을 눌렀을 때 새로 나오는 팝업에 다시 한번 정보를 전달해줘야 한다. 시도 시도했던 내용 중 하나는 단순하게 아이템을 배치할 때 팝업 정보도 같이 반복문을 돌렸던 점이다. 그러나 이런식으로 하면 가장 마지막에 들어간 스태미나 포션 (대) 만 출력되어서 문제가 생긴다. 해결 맞는 방식인지는 모르겠지만, 슬롯 아이템 즉, 포션을 눌렀을 때 이벤트에서 아래 정보만 전달해줬다면 새로운 함수를 만들어서 팝업에 정보도 같이 전달하게 해줬다. 쉽게 말해서 포션 아이템을 클릭하면 아래정보와 팝업정보 두 개가 같이 전달이 된다고 보면..

Unity 2024.01.24

스킬 애니메이터 오류를 sub-statemachine으로 해결

이전에는 그냥 오브젝트 나누듯 sub-statemachine으로 구분해서 편하게 나누는 줄만 알았지만 오늘 오류를 겪고나서야 왜 이런식으로 나누어 사용하는지 깨닫게 되었다. 문제 스킬을 연타하게 되면 애니메이션이 끝나기 전에 다시 Idle상태로 돌아옴 q 와 e로 스킬을 사용하는데, q를 한번만 누른다면 문제가 없으나 연타를 하면 바로 skill 트랜지션이 false가 되어 Idle상태로 돌아오고 이로인해 애니메이션 모션이 캔슬되는 문제가 생긴다. 물론 게임중에서는 애니메이션을 캔슬하면서 스킬을 쓰는 경우도 있지만, 로직에서 현재 애니메이션이 지나가는 시간을 0~1로 정규화하여 1이 넘어가는 순간 Collider를 disable해주는 코드라면 말이 달라진다. 애니메이션이 중간이 끊기게 되면 1보다 크거나..

Unity 2024.01.22

캐릭터 스킬구현시 스킬을 시전하고 이전 행동으로 돌아오지 않았던 버그

1.문제점 FSM 디자인패턴으로 개발하던 중 스킬시전시에 애니메이션이 끝났는데 Idle로 돌아가지 않는 버그가 있었다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerFirstSkillState : PlayerGroundState { SkillInfoData _skillData; public PlayerFirstSkillState(PlayerStateMachine playerStateMachine) : base(playerStateMachine) { } /// /// 스태미너 깎이기 /// 데미지 넣기 /// 쿨타임 적용 /// public override void Enter(..

Unity 2024.01.18

[JSON] JSON을 제네릭으로 받아오기 및 실수 기록 (문.시.해.알)

연달은 같은 실수를 해서 확실하게 기록에 남기기 위해 블로그에 포스팅을 하기로 했다. 1. JSON파일을 불러오면서 실수했던 내용 2. JSON파일을 계속 불러올 예정이기 때문에 이를 제네릭으로 변경한 내용 1. 문제: JSON파일을 인식하지 못하는 점 디버깅을 했을 때 텍스트 파일은 읽어와 지고 값도 들어오는데 클래스로 옮길 때 문제가 생겼다. 하루를 날렸지만 지금 포스팅을 하면서 글로 읽어보니 클래스로 옮길 때 문제면 클래스 쪽을 확인했으면 되었던 것 같다. 위 사진과 같이 리스트에 받아오지 못하는 경우이다. 2) 시도했던 것들 1. JSON To Converter 사용 JSON파일이 잘못된 부분이 있는지 확인부터 했다. 이전 포스트에서도 언급을 했지만 해당 사이트를 사용해서 JSON파일을 C# 클래..

Unity 2024.01.17

JSON 을 받아오지 못하는 오류 + FSM 대쉬 구현중 쿨타임 오류

1. JSON을 받아오지 못하는 오류 1. 문제점 역직렬화 해서 FromJson으로 JSON파일을 파싱하는 것까지는 했으나, 이를 받아오지 못하는 버그가 있었다. using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public class JsonReader : MonoBehaviour { public PlayerSO PlayerSO; private void Awake() { // JSON 파일 경로 설정 string jsonFilePath = "Assets/Resources/JSON/PlayerData.json"; // JSON 파일에서 데이터 읽기 string jsonText = Fi..

Unity 2024.01.15

[FSM] 5. 플레이어 점프 만들기

이전 FSM 4편에서 플레이어의 움직임 그리고 달리기까지 만들었다면 이번에는 플레이어의 점프를 만들어 보도록 하자. ForceReciver 를 통한 떨어짐 구현 ForceReciver는 힘을 받아 주는 역할을 하는 스크립트이며 여기서는 점프시의 중력값과 점프 힘 등을 받아주는 역할을 한다. 스크립트 생성 Player에 컴포넌트 추가 ForceReceiver.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class ForceReceiver : MonoBehaviour { [SerializeField] private CharacterController controller; [SerializeFie..

Unity 2024.01.12

[FSM] 4. 플레이어 이동 상태 만들기

https://dochistory.tistory.com/121 [FSM] 플레이어 상태머신 3 플레이어 상태 만들기 https://dochistory.tistory.com/112 플레이어 상태머신 (2) 이전 포스트에서 Cinemachtine, ProBuilder, Input Action까지 설치하고 세팅까지 완료했다. 그렇다면 이제 FSM 디자인 패턴에 따라 상태들을 스크립트로 나 dochistory.tistory.com FSM 시리즈 4편 플레이어 이동상태 만들기이다. 저번 시간에는 플레이어의 기본 상태머신을 만들고, 대기중인 Idle상태의 플레이어까지 만들었다. 이번에는 이동관련 상태머신을 만들어야 하기 때문에 Player 폴더에서 PlayerRunState와 PlayerWalkState를 각각 만..

Unity 2024.01.11

디자인 패턴 2

많이쓰이는 디자인 패턴 2편 저번에 이어 유니티에서 적절하고 많이 쓰이는 패턴 3가지이다. 1. 오브젝트 풀 패턴으로 최적화하기 - 프레임 속도를 유지하려면, 자주 생성되는 요소를 일부 메모리에 예약하는게 좋다. - 최근 죽인 적을 메모리에서 없애는 대신 다시 사용할 수 있도록 오브젝트 풀에 추가하는 형식이다. - 엔티티의 새로운 인스턴스를 로드하는 초기의 초기화 비용이 들지 않는다. - Unity에는 오브젝트 풀링이 API에 구현되어있다. 2. 오브젝트 풀 패턴 - ObjectPool: 객체의 풀을 관리함. 즉, 객체를 생성하고 관리하고 파기하는 역할을 한다. - ResuablePool: 실제로 재사용되는 객체이다. ObjectPool이 이 객체들을 관리한다. - Client: 클라이언트는 필요할 때 ..

Unity 2024.01.10