Exemple #1
0
	private int creatable_block_num_ = 16; // 生成可能ブロック数

	// リモートオブジェクト生成
	public override void spawnRemote(NetworkObjectData nod)
	{
		// transform は Instantiate で更新済み
		name_ = nod.getName();	// 名前更新
		color_ = nod.color;		// 色更新
		Destroy(GetComponent<Collider>()); // リモートオブジェクトはコリジョンなしにする
	}
Exemple #2
0
	// 送信開始
	public void startSend(float freq)
	{
		Debug.Assert(isLocal);	// 送るのはローカルだけ
		send_frequency_ = freq;
		// 共有データを生成
		sharedNod = NetworkObjectData.create(NetworkManager.peerId, generation_);
		++generation_;			// 世代を進める
		StartCoroutine(send());	// 送信開始
	}
Exemple #3
0
	// ローカル(送信元)オブジェクト用の作成
	public static NetworkObjectData create(uint peer_id, uint object_id)
	{
		var nod = new NetworkObjectData();
		nod.peer_id_ = peer_id;
		nod.object_id_ = object_id;
		nod.data_ = new byte[DATA_SIZE];
		for (var i = 0; i < DATA_SIZE; ++i)
			nod.data_[i] = 0;
		return nod;
	}
Exemple #4
0
    public void InstantiateGameObject(byte[] data, Socket socket, int from)
    {
        NetworkObjectData objectData = ByteParser.ConvertDataToObject(data) as NetworkObjectData;

        if (objectData.index >= ClientManager.instance.GetClientSettings().networkedObjects.Count)
        {
            Logging.CreateLog("Error: Object not found: " + objectData.index + ", " + ClientManager.instance.GetClientSettings().networkedObjects.Count);
            return;
        }

        SNetwork.Network.Instantiate(ClientManager.instance.GetClientSettings().networkedObjects[objectData.index], objectData.position, objectData.rotation, false, objectData.fromId);
    }
    void ReceivePackage(NetPeer peer, NetPacketReader reader, DeliveryMethod deliveryMethod)
    {
        NetDataWriter writer = new NetDataWriter();
        ushort        msgid  = reader.GetUShort();

        print("receivepackage event: " + msgid);
        switch (msgid)
        {
        case 1:     //register to host
        {
            RegisterPlayer(reader);
        }
        break;

        case 101:     //create networkObject
        {
            int        objectId;
            int        lobjectId  = reader.GetUShort();
            ObjectData objectData = reader.GetBytesWithLength().ToStructure <ObjectData>();

            do
            {
                objectId = UnityEngine.Random.Range(1000000, 9999999);
            } while (NetworkObjects.ContainsKey(objectId));

            objectData.objectId = objectId;

            var netObj = new NetworkObjectData(objectId, objectData);
            NetworkObjects.Add(objectId, netObj);

            netObj.SendObjectData(peer, writer);
            writer.Put(lobjectId);
            client.SendToAll(writer, DeliveryMethod.ReliableOrdered);
        }
        break;
        }
    }
Exemple #6
0
	// 送信要求
	public void send(NetworkObjectData nod)
    {
		// 送信内容をキューイングして、後でまとめて送信する
		send_fifo.Enqueue(nod);
	}
Exemple #7
0
	// データ受信
	void OnReceiveEvent(NetworkObjectData nod)
	{
		ulong id = nod.getGlobalId();
		GameObject go = null;
		if (object_dict_.ContainsKey(id)) { // 過去に出現したことがある
			// 情報更新のみ
			go = object_dict_[id];
			var nobj = go.GetComponent<NetworkObject>();
			nobj.setRemoteData(nod);
		} else {				// 初めて登場する
			// 生成
			GameObject prefab = null;
			string name = "";
			switch (nod.type) {
				case NetworkObjectData.Type.Player:
					prefab = player_prefab_;
					name = "player_";
					break;
				case NetworkObjectData.Type.Block:
					prefab = block_prefab_;
					name = "block_";
					break;
			}
			if (prefab != null) {
				go = Instantiate(prefab, nod.position, nod.rotation) as GameObject;
				go.name = name + nod.getName();
				var nobj = go.GetComponent<NetworkObject>();
				nobj.isLocal = false;
				object_dict_[id] = go;
				nobj.spawnRemote(nod);
			}
		}

		if (go != null) {
			var nobj = go.GetComponent<NetworkObject>();
			nobj.latestUpdate = Time.time;
		}
	}
Exemple #8
0
	// 出現時の処理
	public abstract void spawnRemote(NetworkObjectData nod);
Exemple #9
0
	// 受信したリモートデータを設定
	public void setRemoteData(NetworkObjectData nod)
	{
		sharedNod = nod;
	}