查看: 1472|回复: 0
打印 上一主题 下一主题

Unity3D脚本中文教程2.37-5

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-5-29 14:45:01 |只看该作者 |倒序浏览
Network





描述:网络实例化预设。给定的预设将在所有的客户端上初始化。同步被自动设置所以没有额外的工作需要做。位置、旋转和网络组数值作为给定的参数。这是一个RPC调用,因此
当Network.RemoveRPCs为这个组调用的使用,这个物体将被移除。注意在编辑器中必须设置playerPrefab,你能在Object.Instantiate物体参考中获取更多实例化信息。

//当成功连接到服务器上时

//立即实例化新连接的玩家角色

var playerPrefab : Transform;

function OnConnectedToServer (){

Network.Instantiate(playerPrefab, transform.position, transform.rotation, 0);

}

◆ static function RemoveRPCs (playerID : NetworkPlayer) : void

描述:移除所有属于这个玩家ID的RPC函数。

function OnPlayerDisconnected(player: NetworkPlayer) {

Debug.Log("Clean up after player " + player);

Network.RemoveRPCs(player);

Network.DestroyPlayerObjects(player);

}

UID9227 帖子247 精华0 积分1474 阅读权限70 在线时间6 小时 注册时间2012-5-8 最后登录2012-5-29 查看◆ static function RemoveRPCs (playerID : NetworkPlayer, group : int) : void

描述:移除所有属于这个玩家ID并给予给定组的所有RPC函数。

◆ static function RemoveRPCs (viewID : NetworkViewID) : void

描述:移除所有与这个视ID数相关的RPC函数调用。

◆ static function RemoveRPCsInGroup (group : int) : void

描述:移除所有属于给定组数值的RPC函数。

◆ static function SetLevelPrefix (prefix : int) : void

描述:设置关卡前缀,然后所有网络视ID都会使用该前缀。此处提供了一些保护,可以防止来自前一个关卡的旧的网络更新影响新的关卡。此处可以设置为任何数字并随着新关卡的加载而增加。这不会带来额外的网络负担,只会稍微减小网络视ID池。Network level loading有如何使用该函数的例子。

◆ static function SetReceivingEnabled (player : NetworkPlayer, group : int, enabled : bool) : void

描述:启用或禁用特定组中来自特定玩家的信息接收。在你不希望任何网络消息进入的时候可以使用这个函数,然后在你准备好的时候启用。例如,可用于停止网络消息,知道关卡被加载。

//停止接收来自所有玩家(客户端)的组0的信息

for (var player : NetworkPlayer in Network.connections)

Network.SetReceivingEnabled(player, 0, false);

◆ static function SetSendingEnabled (group : int, enabled : bool) : void

描述:启用或禁用特定网络组上的信息传输和RPC调用。当你知道你不发送任何有用的信息到其他客户端时,可以设置这个。例如在你完全你家在关卡之前。Network level loading中有例子。

static function SetSendingEnabled (player : NetworkPlayer, group : int, enabled : bool) : void

描述:基于目标玩家和网络组启用或禁用消息传说和RPC调用。当在客户端使用时,唯一可能的NetworkPlayer就是服务器。

◆ static function TestConnection (forceTest : bool = false) : ConnectionTesterStatus

描述:测试这个机器的网络连接。执行两种测试,这取决机器有公用IP还是只有一个私有IP。公用IP测试主要用于服务器,不需要测试具有公用地址的客户端。为了公用IP测试成功,必须开启一个服务器实例。一个测试服务器将尝试连接到本地服务器的IP地址和端口,因此它被显示在服务器中位可连接状态。如果不是,那么防火墙是最有可能阻断服务端口的。服务器实例需要运行以便测试服务器能连接到它。另一个试验检测NAT穿透能力。服务器和客户端都可以进行,无需任何事先设定。如果用于服务器NAT测试失败,那么不设置端口转发是一个坏主意。本地LAN网络之外的客户端将不能连接。如果测试失败,客户端就不能使用NAT连接到服务器,这些服务器将不会提供给用户作为主机。这个函数是异步的,并可能不会返回有效结果。因为这个测试需要一些时间来完成(1-2秒)。测试完成后,测试的结果只在函数被再次调用时返回。这样,频繁访问该函数是安全的。如果需要其他的测试,入网络连接已改变,那么forcTest参数应该为真。该函数返回一个ConnectionTesterStatus枚举。

//是否应该在主机列表上隐藏NAT主机?

private var filterNATHosts = false;

private var doneProbingPublicIP = false;

function OnGUI (){

//开始/轮询连接测试

//在标签上显示结果并按照结果做出相应的反应

natCapable = Network.TestConnection();

if (natCapable == -2)

GUILayout.Label("roblem determining NAT capabilities");

else if (natCapable == -1)

GUILayout.Label("Undetermined NAT capabilities");

else if (natCapable == 0){

GUILayout.Label("Cannot do NAT punchthrough, " +"filtering NAT enabled hosts for client connections, " +"impossible to***n a server.");

filterNATHosts = ***e;

Network.useNat = false;

}

else if (natCapable == 1){

if (doneProbingPublicIP)

GUILayout.Label("Non-connectable public IP address (port "+ serverPort +" blocked), NAT unchthrough can circumvent the firewall.");

else

GUILayout.Label("NAT punchthrough capable. " +"Enabling NAT punchthrough functionality.");

//一旦服务器开始NAT功能被启用

//客户端是否开启这个基于主机是否需要

Network.useNat = ***e;

}

else if (natCapable == 2){

GUILayout.Label("Directly connectable public IP address.");

Network.useNat = false;

}

else if (natCapable == 3){

GUILayout.Label("Non-connectble public IP address (port " + serverPort +" blocked),***nning a

server is impossible.");

Network.useNat = false;

if (!doneProbingPublicIP){

natCapable = Network.TestConnectionNAT();

doneProbingPublicIP = ***e;

}

}

else if (natCapable == 4){

GUILayout.Label("ublic IP address but server not initialized, "+"it must be started to check server accessibility.");

Network.useNat = false;

}

if (GUILayout.Button ("Retest connection")){

Debug.Log("Redoing connection test");

doneProbingPublicIP = false;

natCapable = Network.TestConnection(***e);

}

}

◆ static function TestConnectionNAT () : ConnectionTesterStatus

描述:测试NAT穿透的连接性。这个就像Network.TestConnection,只不过NAT穿透是强制的,即使该机器有一个公用地址。请参考Network.TestConnection。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-6-14 09:10 , Processed in 0.063157 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部