U侠 发表于 2012-12-18 22:43

Unity3D网络功能系列教程之三 RPC函数的应用

RPC是个好东西。以 ChatRoom 为例子,我们来看看如何使用之。先弄个连接管理的代码 Connection.js:var ServerAddr : String = "127.0.0.1";var ServerPort : int = 2224;function OnGUI(){ GUILayout.BeginArea(Rect(Screen.width-200,0,200,200)); if (Network.peerType == NetworkPeerType.Disconnected) {GUILayout.Label("Connection status: Disconnected");ServerAddr = GUILayout.TextField(ServerAddr, GUILayout.MinWidth(100));ServerPort = parseInt(GUILayout.TextField(ServerPort.ToString()));if (GUILayout.Button("Connect as client")){   Network.Connect(ServerAddr, ServerPort);}if (GUILayout.Button("Start Server")){   Network.InitializeServer(32, ServerPort, false);} } else {if (Network.peerType == NetworkPeerType.Connecting){   GUILayout.Label("Connection status: Connecting");}else if (Network.peerType == NetworkPeerType.Client){   GUILayout.Label("Connection status: Connected");}else if (Network.peerType == NetworkPeerType.Server){   GUILayout.Label("Connection status: Server!");   GUILayout.Label("Connection: " + Network.connections.length);}if (GUILayout.Button("Disconnect")){   Network.Disconnect(200);} } GUILayout.EndArea();}------------------------------------然后弄个 Chat.js,负责写聊天的逻辑:------------------------------------var chatWords : String = "";var inputWord : String = "input words here.";
function OnGUI (){ if (Network.isClient) {GUILayout.BeginArea(Rect(0,0,300,600));GUILayout.TextArea(chatWords);GUILayout.BeginHorizontal();inputWord = GUILayout.TextArea(inputWord);if (GUILayout.Button("Send")){   networkView.RPC("SomeoneSay", RPCMode.All, inputWord);   inputWord = "";}GUILayout.EndHorizontal();if (GUILayout.Button("Disconnect")){   Network.Disconnect(200);}GUILayout.EndArea(); }}@RPCfunction SomeoneSay(sayWord : String, info : NetworkMessageInfo){ chatWords = chatWords + "\n" + info.sender + ":" + sayWord;}--------------------------------------------好,代码就完毕了。继续下面的一些拖拽操作:1. 建立一个场景,把 Connection.js、Chat.js 绑到 MainCamera 上2. 给 MainCamera 弄个 NetworkView Component,并将 State Synchronization = off,因为不需要同步位置等等信息。3. 运行一下,哈哈,是不是很简单。
代码细解通过 networkView.RPC("funcname", RPCMode, args ...) 调用 remote function。其中 RPCMode 可以决定哪些人可以收到此 RPC,具体参见:http://unity3d.com/support/docum ... erence/RPCMode.html以 @RPC 开头的函数,则为被调用的函数。RPC函数最后的 info 参数是可选项,表示 sender 的一些信息。Unity网络层核心思想把这个 ChatRoom 完成,我才真正理解了 Unity 对网络层的管理。:-PScene ==1:N ==> GameObject ==1:N==> Component。一个场景挂着多个 GameObject,每个 GameObject 上挂了很多 Component (比如 NetworkView、各个Script 等等)一个 GameObject 要挂上一个 NetworkView,这个 GameObject 才能收发网络数据。对,数据的收发,都是针对一个个 GameObject 而言的。参考资料RPC Details,http://unity3d.com/support/docum ... net-RPCDetails.html
本文转自:http://kasicass.blog.163.com/blog/static/395619201112663538463/

shengbin88 发表于 2013-1-26 21:05

看不太懂啊

zumg 发表于 2013-6-5 14:47

这个我看不太懂,试过好像不行啊{:5_385:}

bug-maker 发表于 2017-2-10 08:54

很不错

bug-maker 发表于 2017-2-10 08:50

楼主是超人

kavenGw 发表于 2017-2-10 08:50

真心顶

zhangjia517 发表于 2017-2-10 09:06

不错不错

zzpanzer 发表于 2017-2-10 08:28

LZ真是人才

明静 发表于 2017-4-6 13:02

很不错

胡桃夹子 发表于 2017-4-6 13:11

好帖就是要顶
页: [1]
查看完整版本: Unity3D网络功能系列教程之三 RPC函数的应用