// 쿼리 - 이사를 마쳐도 되는가?. public QueryHouseMoveEnd queryHouseMoveEnd(bool local = true) { QueryHouseMoveEnd query = null; do { query = new QueryHouseMoveEnd(); this.queries.Add(query); } while(false); // 이사 종료 요청을 보냅니다. GameObject netObj = GameObject.Find("Network"); if (netObj && local) { // Network 클래스의 컴포넌트를 획득합니다. Network network = netObj.GetComponent <Network>(); // 이사 종료 요청을 보냅니다. MovingData moving = new MovingData(); moving.characterId = GameRoot.getInstance().account_name_local; moving.houseId = ""; moving.moving = false; MovingPacket packet = new MovingPacket(moving); network.SendReliable <MovingData>(packet); } return(query); }
// 이동 정보 패킷 획득 함수 public void OnReceiveMovingPacket(PacketId id, byte[] data) { MovingPacket packet = new MovingPacket(data); MovingData moving = packet.GetPacket(); Debug.Log(moving + " 수신완료(마우스)."); // 수신 후 사용 예 // navAgent(moving.index).destinaion(new Vector3(moving.destX, moving.destY, moving.dextZ); }
// 이동 정보 패킷 획득 함수 public void OnReceiveMovingPacket(PacketId id, byte[] data) { MovingPacket packet = new MovingPacket(data); //바이트 데이터 역직렬 MovingData moving = packet.GetPacket(); // Debug.Log(moving + " 수신완료(이동)"); Vector3 destination = new Vector3(moving.destX, moving.destY, moving.destZ); // 2020 02 01 상대 단말에서 상대의 로컬 캐릭터가 이동했을 때 송신한 정보를 수신한 것이므로 내 단말에서 리모트 캐릭터를 이동시킨다. //GameManager.instance.MoveEnemyCharacter(moving.index, destination); //// 2020 02 07 상대의 캐릭터의 이동속도 보정값을 저장. //remoteAgentSpeed[moving.index] = GameManager.instance.SetInterpolatedSpeed(moving.index, destination); }
// 이동정보를 상대에게 전송하는 함수 // 매개변수는 수정해도 상관 없음. // 결과적으로 함수 내 MovingData의 멤버변수를 채워주기만 하면 됨. public void SendLocalMovingInfo(int index, Vector3 dest) { // 이동정보 데이터 생성 후 정보 입력 MovingData movingData = new MovingData(); movingData.index = index; movingData.destX = dest.x; movingData.destY = dest.y; movingData.destZ = dest.z; Debug.Log("전송 " + movingData); // 생성자로 데이터에 패킷을 연결 MovingPacket packet = new MovingPacket(movingData); // UDP 전송 networkManager.SendUnreliable <MovingData>(packet); }
public void OnReceiveMovingPacket(PacketId id, byte[] data) { Debug.Log("OnReceiveMovingPacket"); MovingPacket packet = new MovingPacket(data); MovingData moving = packet.GetPacket(); Debug.Log("[CharId]" + moving.characterId); Debug.Log("[HouseName]" + moving.houseId); Debug.Log("[Moving]" + moving.moving); chrController remote = CharacterRoot.get().findCharacter(moving.characterId); // 이사 쿼리 발행. if (remote != null) { if (moving.moving) { Debug.Log("cmdQueryHouseMoveStart"); QueryHouseMoveStart query = remote.cmdQueryHouseMoveStart(moving.houseId, false); if (query != null) { query.set_done(true); query.set_success(true); } } else { Debug.Log("cmdQueryHouseMoveEnd"); QueryHouseMoveEnd query = remote.cmdQueryHouseMoveEnd(false); if (query != null) { query.set_done(true); query.set_success(true); } } } // 이사 정보 보존. GlobalParam.get().remote_moving = moving; }
// 쿼리-이사 시작해도 되는가?. public QueryHouseMoveStart queryHouseMoveStart(string house_name, bool local = true) { QueryHouseMoveStart query = null; do { chrBehaviorNPC_House house = CharacterRoot.getInstance().findCharacter <chrBehaviorNPC_House>(house_name); if (house == null) { break; } query = new QueryHouseMoveStart(house_name); this.queries.Add(query); } while(false); // 이사 시작 요청을 보냅니다. GameObject netObj = GameObject.Find("Network"); if (netObj && local) { // Network 클래스의 컴포넌트 획득합니다. Network network = netObj.GetComponent <Network>(); // 이사 시작 요청을 보냅니다. MovingData moving = new MovingData(); moving.characterId = GameRoot.getInstance().account_name_local; moving.houseId = house_name; moving.moving = true; MovingPacket packet = new MovingPacket(moving); network.SendReliable <MovingData>(packet); // 이사 정보 보존. GlobalParam.get().local_moving = moving; } return(query); }