• Multiplayer Game 中所有 player 都有一个唯一标识。在unet中可以通过 Network Identity 组件获取到该 player 在整个网络整的 唯一 的连接 id
  • 这里测试则随便加了一个前缀(Player_)+id 作为唯一的 name 赋值给 transform.name,然后可以在 Runtime 时 Hierarchy 中可以观察到

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. 测试

我个人感觉这个代码有问题,首先作为客户端没有将ID传给服务端,导致服务端现实的ID都为同一ID,过一阵放上自己的代码

unity-unet-同步各个player唯一标识的更多相关文章

  1. iOS开发简记(5):设备唯一标识与全局变量

    这里记录两个iOS开发中经常用到的知识点,一个是唯一标识,一个是全局变量. (1)唯一标识 唯一标识一台设备(比如iPhone.iPad等)是一个基本的实现与业务上的需求,因为这个唯一标识在许多场景都 ...

  2. iOS开发(5):设备唯一标识与全局变量

    这里记录两个iOS开发中经常用到的知识点,一个是唯一标识,一个是全局变量. (1)唯一标识 唯一标识一台设备(比如iPhone.iPad等)是一个基本的实现与业务上的需求,因为这个唯一标识在许多场景都 ...

  3. 实现一个简易的Unity网络同步引擎——netgo

    实现一个简易的Unity网络同步引擎Netgo 目前GOLANG有大行其道的趋势,尤其是在网络编程方面.因为和c/c++比较起来,虽然GC占用了一部分机器性能,但是出错概率小了,开发效率大大提升,而且 ...

  4. iOS获取设备唯一标识的8种方法

    8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...

  5. Android 手机上获取物理唯一标识码[转]

    所有添加有谷歌账户的设备可以返回一个 ANDROID_ID 所有的CDMA设备对于 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在设置时添 ...

  6. 获取设备唯一标识 uuid(采用第三方库SSKeychain)

    SSKeyChain 下载链接: http://pan.baidu.com/s/1booV3VD 密码: ivdi /** *  获取设备唯一标识 uuid */ +(NSString*) uuid ...

  7. 用ThreadLocal为线程生成唯一标识及实现原理

    1.在多线程编程中,有时候需要自动为每个启动的线程生成一个唯一标识,这个时候,通过一个ThreadLocal变量来保存每个线程的标识是最有效.最方便的方式了. 2.ThreadLocal 实例通常是类 ...

  8. sqlserver 中的GUID 全局唯一标识 -摘自网络

    --简单实用全局唯一标识 DECLARE @myid uniqueidentifierSET @myid = NEWID()PRINT 'Value of @myid is: '+ CONVERT(v ...

  9. ios开发——实用技术篇OC篇&获取设备唯一标识

    获取设备唯一标识 WWDC 2013已经闭幕,IOS7 Beta随即发布,界面之难看无以言表...,简直就是山寨Android. 更让IOS程序猿悲催的是,设备唯一标识的MAC Address在IOS ...

随机推荐

  1. java 处理word文档 (含图片,表格内容)

    因为本人长期从事Oa相关项目的开发,所以处理word文档,Pdf,Excel等是在所难免的. 1.需求      处理Excel 能够用jxl        或者poi 2需求     用户在系统上填 ...

  2. ES6学习笔记(九)Set和Map数据结构

    1.set 基本等于Java的Set集合类型,无序不可重复集,常被用来去重. 基本用法 const s = new Set();//通过Set()构造函数创建 [2, 3, 5, 4, 5, 2, 2 ...

  3. Hi3531D搭建环境时,出现的问题

    1.展开SDK包得时候,运行./sdk.unpack得时候出现: 原因:ubuntu14.04中默认得是dash,要将dash改成bash. 解决方法:sudo ln -fs /bin/bash /b ...

  4. 关于【搭建LAMP环境时,php测试页面打不开】解决

    关于[搭建LAMP环境时,php测试页面打不开]解决 〇.我的测试页面是: http://172.30.124.10/index.php 用火狐打不开,如下图. 一.httpd已经启动了(system ...

  5. modelForm所遇问题

    1. 通过modelForm创建表单所遇问题 id 在modelForm中无法创建使用 因为它是django的设置,自增的字段,而不是模型中所设置的字段. 当关联外键时,创建多选的下拉框时,需要注意此 ...

  6. UVALive 7146 Defeat The Enemy

    Defeat The Enemy Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Long long ...

  7. Activiti工作流(4):编写一个HelloWorld

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.使用eclipse的activiti插件画流程图 在resource文件夹下新建一个工作流diagram 右键——new——other...— ...

  8. OpenCASCADE Extended Data Exchange - XDE

    OpenCASCADE Extended Data Exchange - XDE eryar@163.com Abstract. OpenCASCADE Data Exchange allows de ...

  9. LuoguP1251 餐巾计划问题(费用流)

    题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri​块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...

  10. CMDB学习之五服务端api

    服务端api 对发送来的数据进行处理,并返回结果,首先要创建一个Django项目 第一步,就是写URL路由在分支中写url api 主路由 from django.conf.urls import u ...