1. 程式人生 > >unity-unet-同步各個player唯一標識

unity-unet-同步各個player唯一標識

  • Multiplayer Game 中所有 player 都有一個唯一標識。在unet中可以通過 Network Identity 元件獲取到該 player 在整個網路整的 唯一 的連線 id
  • 這裡測試則隨便加了一個字首(Player_)+id 作為唯一的 name 賦值給 transform.name,然後可以在 RuntimeHierarchy 中可以觀察到

1. 整體思路:

  1. OnStartLocalPlayer 時,本機通過 Network Identity 元件的 id 生產唯一 name,設定的 transform.name 並 send 到服務端同步給其他客戶端
  2. 本機生成的其他玩家則在 Start 時通過服務端同步過來的name 設定為該玩家的 name

2. 程式碼:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class Player_Id : NetworkBehaviour
{
    [SyncVar]
    private string playerUniqueIdentity;
    private NetworkInstanceId playerNetId;
    private Transform myTransform;

    public
override void OnStartLocalPlayer() { GetNetIdentity(); SetIdentity(); } public void Start() { if (myTransform.name == "" || myTransform.name == "Player(Clone)") { SetIdentity(); //這裡設定唯一name的是本機客戶端中的其他玩家,本機玩家已經在OnStartLocalPlayer設定好了 } } public
void Awake() { myTransform = transform; } /// <summary> /// 獲取唯一id,生產一個唯一的name,並告訴服務端,同步到其他客戶端 /// </summary> void GetNetIdentity() { playerNetId = GetComponent<NetworkIdentity>().netId; CmdTellServerMyIdentity(MakeUniqueIdentiy()); } /// <summary> /// 如果是其他玩家,則從網路中同步唯一name /// 如果是本機玩家,則直接自己生成唯一name /// </summary> void SetIdentity() { if (!isLocalPlayer) { myTransform.name = playerUniqueIdentity; } else { myTransform.name = MakeUniqueIdentiy(); } } string MakeUniqueIdentiy() { string uniqueName = "Player_" + playerNetId.ToString(); return uniqueName; } [Command] void CmdTellServerMyIdentity(string name) { playerUniqueIdentity = name; } }

3. 測試

這裡寫圖片描述

ok,done

相關推薦

unity-unet-同步各個player唯一標識

Multiplayer Game 中所有 player 都有一個唯一標識。在unet中可以通過 Network Identity 元件獲取到該 player 在整個網路整的 唯一 的連線 i

unity-unet-多人線上同步問題解決方案

文中大體的思路: A玩家 移動時,本機自行移動,併發送移動指令給服務端,假設移動是成功的,服務端同步其他客戶端 B玩家,B玩家 中用一個佇列 Queue 來裝服務端來的移動指令,然後客戶端在updata中做插值 (lerp ) 處理,這樣 A玩家 在

Unity網路篇:Unet同步問題整合。

首先要認清一點,Unet是伺服器權威的。這在同步問題中很是重要。   狀態同步是從伺服器向客戶端方向上的。本地客戶端沒有序列化的資料,因為它和伺服器共享同一個場景。任何為本地客戶端序列化的資料都是多餘的。然而,SyncVar鉤子函式會被本地客戶端呼叫。注意資料不會從客戶

獲取iOS設備唯一標識

top vendor creates 方法 align hbm bnt after ebo 獲取iOS設備唯一標識 body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height:

生成唯一標識符 ,通用唯一標識符 UUID

字母 domu () fin and div final import bsp 1 import java.util.UUID; 2 3 /** 4 * UUID生成工具 5 * 6 */ 7 8 public final class Uuid

全局唯一標識符 (GUID)

urn mat tostring rst nbsp cti rand rep git Javascript生成GUID 算法一:3b96b619-0a23-4ca1-80d4-8d4838173431 function uuid() { var s = [

獲取微信用戶唯一標識openid | 小程序

func 發送 ref java *** api 關閉 函數 HR wx.login(OBJECT) 調用接口獲取登錄憑證(code)進而換取用戶登錄態信息,包括用戶的唯一標識(openid) 及本次登錄的 會話密鑰(session_key)。用戶數據的加解密通訊需要依賴會

微信小程序 唯一標識 加減

pre span dex color code data this goods ons var nums = ‘goods_list[‘ + e.currentTarget.dataset.indexs+‘].goods_num‘ //console.log(nun

Android開發 - 獲取Android設備的唯一標識碼(Android 6.0或更高)

申請 安全 地址 vat util new 應該 ret ati 在我們的APP開發中,通常需要獲取到設備的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬件的唯一標識,但是在Android6.0之後,Android系統大幅限制了我們獲取設備的硬件信息。

android獲取裝置唯一標識

IMEI 百度百科解釋:IMEI(International Mobile Equipment Identity)是國際移動裝置身份碼的縮寫,國際移動裝備辨識碼,是由15位數字組成的“電子串號”,它與每臺行動電話機一一對應,而且該碼是全世界唯一的。每一隻行動電話機在組裝完成後都將被賦予一個全

微信小程式使用spring boot獲取使用者唯一標識openId

1.app.js裡面呼叫wx.login(OBJECT) 獲取登入憑證(code)進而換取使用者登入態資訊,包括使用者的唯一標識(openid) 及本次登入的 會話金鑰(session_key)等。 //app.js App({ onLaunch: function() {

通過androidId和系統引數生成手機唯一標識

/** * 獲取儲存的uuid,未儲存時候重新生成 * @param context * @return */ public static String getDeviceUUID(Context context) { String u

vue根據陣列物件總某個唯一標識去重

由於在vue中,會自動在陣列和物件中加入_obser__觀察者模式的一些屬性,所以直接用陣列的filter去重(下面這種),indexOf不能準確識別 var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7]; var arr2 = arr.filter(function(x

iOS唯一標識 的最優解決方案

iOS裝置UUID的獲取方法(不變的唯一值) UDID被棄用,使用UUID來作為裝置的唯一標識。獲取到UUID後,如果用NSUserDefaults儲存,當程式被解除安裝後重裝時,再獲得的UUID和之前就不同了。使用keychain儲存可以保證程式解除安裝重灌時,UUID不變。但當刷機或

Android開發 - 獲取Android裝置的唯一標識碼(Android 6.0或更高)

在我們的APP開發中,通常需要獲取到裝置的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬體的唯一標識,但是在Android6.0之後,Android系統大幅限制了我們獲取裝置的硬體資訊。 Android6.0之前的方法(已過時) DEVICE_ID通getSyste

Android獲取手機唯一標識

//獲取手機唯一標識 private String getId() { StringBuilder deviceId = new StringBuilder(); // 渠道標誌 deviceId.append("a");

初學:資料庫操作(個能記錄,生成唯一標識的方法)

關於sql server 的資料操作(生成唯一標示ID) 1.SQL 操作語句 http://www.w3school.com.cn/sql/sql_in.asp 2.生成一個唯一標示 IDNEWID() 插入一條: insert into W_1(id,account,pas

微信小程式從入門第一講 java&&jFinal 小程式登陸功能實現以及獲取唯一標識openid和unionid

在我以前的一篇部落格中講到了獲取openid的方法,這裡就不做過多的講解java獲取微信小程式openid。這裡主要講解微信小程式登陸的實現和獲取unionid。需要提醒的是我後端框架使用的是jFinal,傳值方式跟spring的那套有些許的差別。 1、首先要知道微信小程式的開發本身就是基於

獲取iOS裝置唯一標識

轉自:https://www.cnblogs.com/fdyjm/p/7125710.html UDID 在之前的版本是可以被使用的,iOS5及以後,被蘋果禁止使用了(棄用了)。雖然,這個UDID用得很廣泛,但是,不得不說的是,它在慢慢的遠離開發者,不能在考慮使用UDID了。至於這個標示符是

iOS獲取裝置的唯一標識的方法總結

轉自:https://www.jianshu.com/p/686958c352f1     各種獲取裝置唯一標識的方法介紹 一.UDID(Unique Device Identifier) UDID的全稱是Unique Device Identifier,它就是蘋