• 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,过一阵放上自己的代码

最新文章

  1. 工业串口和网络软件通讯平台(SuperIO 2.0)发布
  2. 用Android Studio 开发Android应用
  3. JVM内存管理------JAVA语言的内存管理概述
  4. 连接UI到代码
  5. linux内核hash list
  6. ListView的item选中效果
  7. [ES7] Exploring ES2016 Decorators
  8. 《开源分享2》:《开源框架实战宝典电子书V1.0.0》完整版!
  9. 10步教你来优化WordPress速度 为服务器和访客减压
  10. 指定hive输出格式
  11. C语言中给数组赋随机值
  12. NBUT 1120 线段树
  13. UVa 10033 - Interpreter
  14. 微信JS图片上传与下载功能--微信JS系列文章(三)
  15. Algorithm --&gt; 爬楼梯求最大分数
  16. oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)
  17. Python学习笔记第八周
  18. Oracle数据库拼接字符串
  19. pytesser模块WindowsError错误解决方法
  20. Gevent-socket

热门文章

  1. 对照 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 假设也能添加个prepareForSegue回调就好了
  2. .Net中字典的使用
  3. Red Hat Linux 安装 (本地、网络安装)
  4. 使用js实现简单放大镜的效果
  5. RQNOJ PID496/[IOI1999]花店橱窗布置
  6. android 动态设置TextView值,例:金额添加
  7. SQL Server 为代码减负之存储过程
  8. Visual Studio Set Project Environment Variables
  9. vim-normal多行操作命令的使用
  10. android图像处理系列之三-- 图片色调饱和度、色相、亮度处理