예제 #1
0
    //캐릭터 위치 -> Client
    public IEnumerator CharacterPositionSend()
    {
        if (characterManager == null)
        {
            characterManager = GameObject.FindGameObjectWithTag("Player").GetComponent <CharacterManager>();
        }
        Debug.Log("캐릭터 위치 보내기 시작");

        while (true)
        {
            yield return(new WaitForSeconds(0.016f));

            bool  dir  = characterManager.charDir;
            float xPos = characterManager.transform.position.x;
            float yPos = characterManager.transform.position.y;
            float zPos = characterManager.transform.position.z;

            CharacterPositionData   CharacterPosition       = new CharacterPositionData(dir, (byte)characterManager.UserNum, xPos, yPos, zPos);
            CharacterPositionPacket characterPositionPacket = new CharacterPositionPacket(CharacterPosition);
            characterPositionPacket.SetPacketId((int)P2PPacketId.CharacterPosition);

            byte[] msg = CreatePacket(characterPositionPacket);

            for (int index = 0; index < networkManager.UserIndex.Count; index++)
            {
                int userIndex = networkManager.UserIndex[index].UserNum;

                if (networkManager.MyIndex != userIndex)
                {
                    DataPacket packet = new DataPacket(CreateUdpPacket(characterPositionPacket, udpId[userIndex]), networkManager.UserIndex[index].EndPoint);
                    sendMsgs.Enqueue(packet);
                }
            }
        }
    }
예제 #2
0
        public bool Deserialize(ref CharacterPositionData element)
        {
            if (GetDataSize() == 0)
            {
                // 데이터가 설정되지 않았다.
                return(false);
            }

            bool  ret       = true;
            bool  dir       = true;
            byte  userIndex = 0;
            float posX      = 0;
            float posY      = 0;
            float posZ      = 0;

            ret              &= Deserialize(ref dir);
            ret              &= Deserialize(ref userIndex);
            ret              &= Deserialize(ref posX);
            ret              &= Deserialize(ref posY);
            ret              &= Deserialize(ref posZ);
            element.dir       = dir;
            element.userIndex = userIndex;
            element.posX      = posX;
            element.posY      = posY;
            element.posZ      = posZ;

            return(ret);
        }
예제 #3
0
    //Client
    public void CharacterPosition(DataPacket packet, int udpId)
    {
        CharacterPositionPacket characterPositionPacket = new CharacterPositionPacket(packet.msg);
        CharacterPositionData   characterPositionData   = characterPositionPacket.GetData();

        CharacterManager characterManager = dungeonManager.characters[characterPositionData.userIndex];

        characterManager.SetPosition(characterPositionData);
    }
예제 #4
0
        public bool Serialize(CharacterPositionData data)
        {
            bool ret = true;

            ret &= Serialize(data.dir);
            ret &= Serialize(data.userIndex);
            ret &= Serialize(data.posX);
            ret &= Serialize(data.posY);
            ret &= Serialize(data.posZ);
            return(ret);
        }
예제 #5
0
    public void SetPosition(CharacterPositionData newPositionData)
    {
        Debug.Log("캐릭터 위치 설정 유저 번호 : " + userNum);

        if (newPositionData.dir)
        {
            transform.rotation = Quaternion.Euler(new Vector3(0, 0.0f, 0));
            charDir            = true;
        }
        else
        {
            transform.rotation = Quaternion.Euler(new Vector3(0, 180.0f, 0));
            charDir            = false;
        }
        transform.position = new Vector3(newPositionData.posX, newPositionData.posY, newPositionData.posZ);
    }