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

Unity3D脚本中文教程2.37-4

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

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

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





var imaserver: boolean;

var serverIP: String;

var serverPort: int;

var serverUsesNAT: boolean;

function Awake(){

//设置自定义代理服务器地址

Network.proxyIP = "1.1.1.1";

Network.proxyPort = 1111;

if (imaserver)

StartServerWithProxy();

else

ConnectToServerWithProxy();

}

function StartServerWithProxy(){

Network.useProxy = ***e;

Network.InitializeServer(2,25000);

}

function OnServerInitialized(player: NetworkPlayer){

if (Network.useProxy)

Debug.Log ("Successfully started server with proxy support. We are connectable through "+ player.ipAddress + ":" + player.port);

}

function OnFailedToConnect(msg: NetworkConnectionError){

if (Network.useProxy && imaserver){

Debug.LogError("Failed to connect to proxy server: " + msg);

}

}

function ConnectToServerWithProxy(){

Network.useProxy = ***e;

Network.useNat = serverUsesNAT;

Network.Connect(serverIP, serverPort);

}

function OnConnectedToServer(){

Debug.Log("Connected successfully to server");

}

类方法

◆ static function AllocateViewID():NetworkViewID

描述:查询下一个可用的网络视ID数并分配它(保留)。这个数字又可以被赋予一个实例化物体的网络视。注意,为了使其可正常工作,必须有一个NetworkView附加到这个物体,这个物体必须有这个脚本并必须使这个脚本作为它的观察属性。必须有一个Cube预设,带有一个NetworkView它监视某些东西(例如该Cube的Transform)。脚本中的cubePrefab变量必须设置为立方体预设。使用智能的AllocateViewID是最简单的方法。如果有超过一个NetworkView附加在初始化的Cube上着将变得更复杂。

var cubePrefab : Transform;

function OnGUI (){

if (GUILayout.Button("SpawnBox")){

var viewID = Network.AllocateViewID();

networkView.RPC("SpawnBox", RPCMode.AllBuffered, viewID, transform.position);

}

}

@RPC

function SpawnBox (viewID : NetworkViewID, location : Vector3) {

//实例化本地的prefab

var clone : Transform;

clone = Instantiate(cubePrefab, location, Quaternion.identity);

var nView : NetworkView;

nView = clone.GetComponent(NetworkView);

nView.viewID = viewID;

}


◆ static function CloseConnection (target : NetworkPlayer, sendDisconnectionNotification : bool) : void

描述:关闭与其他系统的连接。/target/定义连接到的那个系统将被关闭,如果我们是客户端,连接到服务器的连接将会关闭。如果我们是服务器目标玩家,将会被踢出。sednDisconnectionNotification启用或禁用通知将被发送到另一端。如果禁用连接被丢弃,如果没有断开连接通知被发送到远端,那么之后的连接将被丢弃。

function OnGUI() {

if (GUILayout.Button ("Disconnect from server")) {

if (Network.connections.length == 1) {

Debug.Log("Disconnecting: "+Network.connections[0].ipAddress+":"+Network.connections[0].port);

Network.CloseConnection(Network.connections[0], ***e);

}

else if (Network.connections.length == 0)

Debug.Log("No one is connected");

else if (Network.connections.length > 1)

Debug.Log("Too many connections. Are we***nning a server?");

}

if (GUILayout.Button ("Disconnect first player")) {

if (Network.connections.length > 0) {

Debug.Log("Disconnecting: "+Network.connections[0].ipAddress+":"+Network.connections[0].port);

Network.CloseConnection(Network.connections[0], ***e);

}

}

}

◆ static function Connect (IP:string, remotePort:int, password:string = ""):NetworkConnectionError

描述:连接到特定的主机(IP或域名)和服务器端口。参数是主机的IP地址,点IP地址或一个域名。remotePort,指定连接到远端机器的端口。password,它是一个可选的用于服务器的密码。这个密码必须设置为与服务器的Network.incomingPassword相同。

function ConnectToServer () {

Network.Connect("127.0.0.1", 25000);

}

◆ static function Connect(Ips:string[], remotePort:int, password:string = ""):NetworkConnectionError

描述:该函数与Network.Connect类似,但是可以接受一个IP地址数组。当从一个主服务器的主机信息返回多个内部IP地址时,IP数据结构可以被直接传入这个函数。它将实际的连接到相应ping的第一个IP(可连接)。

◆ static function Destroy (viewID : NetworkViewID) : void

描述:跨网络销毁与该视ID相关的物体。本地的于远端的都会被销毁。

var timer : float;

function Awake () {

timer = Time.time;

}

//通过网络销毁拥有该脚本的物体

//其必须具备NetworkView属性

function Update() {

if (Time.time - timer >

2)

{

Network.Destroy(GetComponent(NetworkView).viewID);

}

}

function Update() {

if (Time.time - timer > 2){

Network.Destroy(GetComponent(NetworkView).viewID);

}

}

◆ static function Destroy (gameObject : GameObject) : void

描述:跨网络销毁该物体。本地的与远端的都会被销毁。

var timer : float;

function Awake () {

timer = Time.time;

}//通过网络销毁拥有该脚本的物体

function Update() {

if (Time.time - timer > 2){

Network.Destroy(gameObject);

}

}

◆ static function DestroyPlayerObjects (playerID : NetworkPlayer) : void

描述:基于视ID销毁所有属于这个玩家的所有物体。这个只能在服务器上调用。例如,清理一个已断开的玩家留下的网络物体。

function OnPlayerDisconnected(player: NetworkPlayer) {

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

Network.RemoveRPCs(player);

Network.DestroyPlayerObjects(player);

}

◆ static function Disconnect (timeout : int = 200) : void

描述:关闭所有开放的连接并关闭网络接口。timeout参数表示网络接口在未收到信号的情况下,多长时间会关闭。网络状态,入安全和密码,也会被重置。

function OnGUI() {

if (GUILayout.Button ("Disconnect")) {

Network.Disconnect();

MasterServer.UnregisterHost();

}

}

◆ static function GetAveragePing (player : NetworkPlayer) : int

描述:到给定player的最后平均ping时间,以毫秒计。如果没有发现玩家,返回-1。Ping会每隔几秒自动发出。

function OnGUI() {

var i: int;

GUILayout.Label("layer ping values");

for (i=0; i < Network.connections.length; i++) {

GUILayout.Label("layer " + Network.connections + " - " + Network.GetAveragePing(Network.connections) + " ms");

}

}、
◆ static function GetLastPing (player : NetworkPlayer) : int

描述:到给定player的最后平均ping时间,以毫秒计。

如果没有发现玩家,返回-1。Ping会每隔几秒自动发出。

function OnGUI() {

var i: int;

GUILayout.Label("layer ping values");

for (i=0; i < Network.connections.length; i++) {

GUILayout.Label("layer " + Network.connections + " - " + Network.GetLastPing(Network.connections) + " ms");

}

}

◆ static function HavePublicAddress () : bool

描述:检查该机器是否有一个公共IP地址。检查所有接口来获取Ipv4公共地址。如发现返回真。

function OnGUI() {

if (GUILayout.Button ("Start Server")){

// 如果没有公共IP地址,使用NAT穿透

Network.useNat = !Network.HavePublicAddress();

Network.InitializeServer(32, 25002);

MasterServer.RegisterHost("MyUniqueGameType", "JohnDoes game", "l33t game for all");

}

}

◆ static function InitializeSecurity () : void

描述:初始化安全层。你需要再Network.InitializeServer调用之后在服务器上调用这个函数。不要再客户端调用该函数你的在线游戏达到一定知名度时就有人试图***。你讲需要再游戏层和网络层处理这个。如果你希望使用它们,Unity可以通过提供安全连接处理网络层。

使用AES加密,阻止未授权读取并阻止重复攻击,添加CRC来检测数据篡改,使用随机的、加密的SYNCookies来组织未授权登录,使用RSA加密保护这个AES密钥

大多数游戏将使用安全连接。然后,它们会向每个数据包添加15自己并需要时间计算,所以你也许想限制使用此功能。

function Start (){

Network.InitializeSecurity();

Network.InitializeServer(32, 25000);

}

◆ static function InitializeServer (connections:int,listenPort:int) : NetworkConnectionError

描述:初始化安全层。connections是允许进入的连接或玩家的数量。listenPort是我们要监听的端口。

function LaunchServer () {

Network.incomingPassword = "HolyMoly";

Network.InitializeServer(32, 25000);

}
◆ static function Instantiate (prefab:Object, position:Vector3, rotationuaternion, group:int):Object







web3D纳金网www.narkii.com/
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

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

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

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

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

© 2008-2019 Narkii Inc.

回顶部