목록Unity/Unity 개발 일지 (16)
skyf의 게임 개발기

CPP 스크립트로 바로 씬에 배치하기 위해서는 처음 빌드를 CPP 프로젝트로 빌드해주어야 한다. 또한, 블루프린트에서 정의해서 사용할 함수를 사용할때 스크립트 상에서 UFUNCTION 속성을 쓰게 되는데 이때 BlueprintNativeEvent태그를 붙여주게 될 경우 해당 함수의 이름뒤에 _Implementation이 붙은 함수를 하나 더 선언/정의 해주어야 한다. 솔루션의 빌드는 조심해야한다. 되도록 안하는게 좋다. 스크립트상의 실제 내용과 꼬이는 현상이 있어 보인다. 가상함수 선언시 정의하지 않은 경우 순수가상함수 처리를 해주어야 한다. 이번에 테스트하면서 가상함수를 정의를 했음에도, 가상함수로 처리했음에도 버그가 있었는데(프로젝트 자체가 열리지도 않는다. 솔루션 상에서의 문제인듯 하다) 일단, 프..
0. MVR서버측과 클라이언트 연동을 시킨다.(서로 정보를 주고 받을 수 있는 상태) , 즉 실행 1. MVR 서버측에서 설정된 정보들 (성별 정도)을 클라들에게 보낸다. 2. 클라측에서 정보를 받아서 정보를 토대로 XML파일을 Asset경로에 생성(수정)한다. 3. 클라측에서 유니티 게임을 실행 시킨다.
*애니메이터 동기화* 일단 지난번 이슈였던 자식 오브젝트의 애니메이터 동기화 문제는.. 결국 부모 스크립트에서 뿌려질 정보를 전달받아서 Cmd/Rpc 해주는 방식으로 처리하였다. 애니메이터가 있는 오브젝트에 NetworkBehaviour를 달아주려 했으나, Spawn을 시켜줘야하는 부분 처리가 난해해서 Monobehaviour로 처리하였다. *접속/비접속 처리* NetworkServer.RegisterHandler를 이용해볼까 했는데, Callback함수로 처리해보았다. //서버측 호출 public override void OnServerDisconnect(NetworkConnection conn)//클라이언트 접속이 끊길때 { base.OnServerDisconnect(conn); var target ..
* 접속/비접속 처리할 방법 고안 * 방식1. Handler 이용 NetworkClient wc = NetworkManager.singleton.StartHost (); if (wc != null) { wc.RegisterHandler (MsgType.Disconnect, OnDisconnectClient); wc.RegisterHandler (MsgType.Error, OnErrorClient) * SyncvarList 관련, 동기화 관련 * 방식1. // Define a new class which inherits from the generic SyncListStruct public class RoomPlayerInfoList : SyncListStruct {} // [...] public class..
*특징 1. UNET의 한계점으로, 스폰된 네트워크 오브젝트의 자식 오브젝트의 애니메이션을 동기화할 수 있는 기능이 따로 제공되지 않는다는 점이다. 그래서 따로 처리해주기로 했다. 2. Network Identity 컴포넌트는 NetworkServer.Spawn을 통해 스폰이 된 오브젝트일때 정상 작동하는것 같다. 스폰을 시키기 위해서는 네트워크 매니저에 등록시켜주어야 하는것 같다. *이슈 1. 플레이어 모델을 남/여 정보에 따라 남자모델, 여자모델로 스폰 시켜 주어야하는데, 이 부분 처리에서 '자식 오브젝트' 애니메이터 동기화 문제 때문에, 하이어라키를 공유를 한 형태(스폰오브젝트 하위에 모델이 있고 모델 하위에 남/여 메시들이 한꺼번에 다 있는 형태)로 해야하나 했는데, SyncVar를 이용해서 애니..

컨트롤러로 손을 조작할때 손목 바로 위의 ForeArm(팔목 부분)이 자연스럽게 함께 돌아가게끔 해야하는 작업이였다. 에디터상에서 보이는 수치로 봤을때와 transform.localEulerAngles의 수치가 달라서 혼동이 됐다. transform.localEulerAngles에서는 양수로 표현이 된다. case ArmType.Left: { limit_palmDown_handZ = -90; limit_palmUp_handZ = 90; float angle_handZ = targetHand.transform.localEulerAngles.z; float deltaZ = Mathf.DeltaAngle(0,angle_handZ); if(Mathf.Abs(deltaZ)