2025/04 19

250423

오전에는 리팩터링을 했다오래 걸리지는 않았다 점프 로직과 사격 로직에 문제가 있었고 일단 쉬워 보이는 점프 로직을 수정하려고 했지만 photon fusion은 생각보다 더 어려웠다 플레이어의 이동과 관련된 동작을 할 때에는NetworkCharacterController를 사용하는데내장되어있는 함수를 사용할 때이동키를 눌렀는데 점프가 되어버리는 일이 발생했다..아마 내가 커스텀으로 점프를 구현한 로직과 NetworkCharacterController에 내장된 로직이 맞지 않았기 때문일거다 그리고 오늘은유료 에셋을 프로젝트로 관리하는 방법을 배웠다저번에 에셋을 직접 받아서 import해서 그렇게 했는 줄 알았는데private에서 repository로 팀원들이 에셋을 프로젝트로 공유하면에셋파일을 전송할 필요 ..

카테고리 없음 2025.04.23

250417

심화강의를 기반으로 플레이어의 상태머신을 만들었는데이동과 회전로직이 이상하다 두 키의 입력이 동시에 안되는 문제를 발견했다 아마 원인은 상태 변경과, 실제 동작을 서로 다른 곳에서 처리하고 있기 때문인 것 같다 처음에는 상태와 동작은 다르니까 단일책임원칙을 위해서 서로 다른 곳에서 구현해야 하지 않을까 싶었는데이렇게 하니까 로직이 복잡해져서 그런 문제가 생긴 것 같다 실제 동작도 해당 상태 안에서 가능하게 만들면 해결될 듯하다

Player의 Controller와 State Machine 연결

Player의 Controller와 StateMachine을 연결하기가 어려웠다 네트워크라서 따로 업데이트를 해야 하는 줄 알았지만photon fusion2에서는host와 각 client가 OnInput을 호출해서 로컬 좌표 등 데이터를 NetworkInput에 저장해서 서버로 전송하면나머지 사람들에게 "자동으로" 업데이트를 해준다(디버그가 되지 않는 것으로 보아 콜백함수 인 듯 하다) 따라서 각각의 플레이어는 자신의 위치, 회전 등의 값들만 OnInput으로 전송하면 충분하다다른 플레이어들의 정보를 내가 직접 구현해서 가져올 필요는 없다이미 알아서 업데이트가 되어있다! 이제 구현해본다 구현이 되면 추가로 작성하자

유니티의 parent에 대해서

child, parent는 상속 구조가 아니다하이러키 뷰에서 보여주는 오브젝트 간의 위계관계다 이를 transform.SetParent() 를 이용하면 해당 오브젝트가 하이러키뷰에서 부모를 바꾼다 문제는 collider가 팔에 달려있어야하는데팔은 model의 구조를 깊이 들어가야한다그래서 collider를 상위 오브젝트에 옮기고 싶다문제는, 옮기게 되면팔이 움직일때 collider가 함께 움직이지 않는다는 점이다 이때 이런 방법을 쓰면 좋다단순히 parent로 사용할 transform만 저장하고, 하이러키뷰에서는 바꾸지 않는 방법이다 클래스에 Transform parent를 선언하고 해당 멤버변수에 parent로 사용할 transform을 저장한다그러면 원하는 떄에 transform.SetParent()..

250414

플레이어 구조를 작성하고StateMachine을 만드는데쉽지 않다 여러 레퍼런스들을 참고했고어디서 무엇을 할지 역할 분배를 확정했다 오래 고민했던 부분은 1. Input을 하는 변수와 하지 않는 변수를 같이 NetworkInputData에 저장할 것인가?→ 아니다예를 들어 땅에 닿았는지 확인하는 bool 변수는 입력을 통해 바뀌는 값이 아니다따라서 내부에서 상태를 바꿀 때만 사용하며, 이 변수를 NetworkInputData에 저장하지 않는다상태를 저장하는 것으로 충분하다 2. Input한 값을 어떻게 하여 StateMachine으로 가져갈 것인가?→ InputHandler안에 Get함수를 만들어서 Controller와 StateMachine에서 호출한다 3. 수많은 상태를 어떻게 관리할것인가?→ 처음에..

플레이어의 구조 개선 2. State Machine 만들기

플레이어의 입력을 받고 상태를 바꾸려고하는데입력을 어떻게 처리해야할지 아직 해결이 되지 않았다 특히 서버에 정보를 보내고, 서버로부터 정보를 받는 것을 어떻게 해야하는지 아직 해결이 되지 않았다 오래 생각했다4월 13일 일요일 저녁에 생각났고, 수정했다 기존의입력을 받으면 PlayerInputHandler에 저장하고PlayerInputSender에서 서버로 전송을 하는것은 같다 이제 NetworkInputs에 기본상태인 Idle을 넣는다그러면 입력이 없는 상태는 Idle상태로 전송이 될 것이며 입력이 있는 경우PlayerStateMachine에서 상태를 변경하고, PlayerController에서 상태를 가져와서 업데이트하고PlayerInputSender에 변경된 상태를 대입하면 되지 않을까 생각이 들었..