플레이어 두 명을 스왑하면서 진행하는 게임을 구상중인데,
하나의 뉴 인풋 액션을 만들어놓고 인풋매니저에서 어떤 캐릭터를 움직일지 결정하는 방식으로 구성을 해봤습니다...!
그런데, 움직일 플레이어가 바뀌는 것을 고려하여 인풋매니저가 모든 플레이어를 가지고 있게 하려고
private List<string> _playerNames = new List<string>();
private Dictionary<string, PlayerController> _players = new Dictionary<string, PlayerController>();
이렇게 구성을 해놨고, 플레이어에서는 Start 시점에서 싱글턴으로 인풋매니저에 접근하여 본인을 추가하도록 하였습니다.
여기서 문제가 인풋 매니저에서 가장 처음 움직일 캐릭터를 지정해줘야하는데, 인풋매니저의 Start시점에서 그 부분을 실행하기에는
스크립트의 실행순서가 정해지지 않아서 이게 맞나 싶습니다...
물론 Script Execution Order를 통해 스크립트 실행 순서를 지정할 수 있겠지만
그런 방식을 사용해야 한다는 거부터가 제가 구조를 잘못짠거 같고, Find를 통하여 그냥 모든 플레이어를 받아오는 방법 또한
제가 Find의 사용은 최대한 피해야한다고 알고있어서 쓰지않고 구성을 해보고 싶습니다... 혹시 방법이 있을까요...?
이게 InputManager의 초기 코드이고, 아직 Dont Destroy같은 처리는 안해준 상태입니다. 곧 할 예정입니다.
그리고 이게 PlayerController 초기 부분입니다...! 제발 도와주세요 ㅠㅠ
플레이어 매니저 - 인풋 매니저가 맵핑되었고 입력, 조작, 스위칭 기능을 가지고 있다. 플레이어 스크립트를 가진 오브젝트를 직접 컨트롤 한다. 플레이어 스크립트를 상속하는 여러 캐릭터 조작에 의해 이동, 공격, 스킬 등등의 변수나 애니메이션 값을 처리한다. 스위칭 기능을 누르면, 원하는 캐릭터를 플레이어 매니저가 참조하게 한다.
인풋 매니저를 캐릭터마다 바인딩 바꿔줄 필요는 없음
@noble 음... 제 생각에는 스위칭 시에 바뀔 캐릭터를 알려면 플레이어 매니저가 모든 플레이어 정보를 알고 있어야한다고 생각하는데 혹시 모든 플레이어 정보가 없더라도 스위칭 할 캐릭터를 알 수 있는 방법이 있을까요???
뭐 어떤방식으로 움직이는지 모르겠네 인풋매니저에서 SetPlayer하면 그 플레이어가 움직일 수 있는 권한을 얻게되는거임? 플레이어 클래스에는 FSM 들어가있는데 움직이는 로직을 InputManager에서 처리함? 아니면 MoveState 이런곳에서 처리함?
머 암튼 내생각엔 걍 AddPlayer하면 딕셔너리에 플레이어가 들어가는것같은데 그럼 딕셔너리가 비어있을때 AddPlayer로 등록하면 SetPlayer해주면 될것같음
그리고 인풋매니저는 그냥 인풋액션 래핑한 싱글톤 클래스로만 활용하는게 좋을것같음 스왑까지 인풋매니저가 관리하면 나중에 머리아플수도있음 그냥 스왑만을 담당하는 클래스를 따로파서 책임분리해주는게 좋음