unity3d实现玩家上线另一个玩家也能看见 .
网络方面我喜欢写成C/S的形式,但是官方的例子是peer-to-peer形式的,把客服端和服务端写在一起,我在看的时候就遇到了很问题。下面看看代码吧,以C/S的形式写的,参考官方的例子改的。
1. Server:服务端就是负责生成服务器,代码很简单和聊天室的一样。
2. Client:也很简单,也只是连接服务器,然后再加一个当连接服务器成功就实例化一个游戏对象的代码。再在客服端放入一个cube的prefab预制,再给cube预制加一个NetworkView,最后再给cube预制来段运动控制移动的代码就行了。
代买如下:
- <SPAN style="COLOR: #333333; FONT-SIZE: 10px">public var playerPrefab : Transform;
- function OnConnectedToServer(){
- Spawnplayer();
- }
- function Spawnplayer(){
- var myNewTrans : Transform = Network.Instantiate(playerPrefab, transform.position, transform.rotation, 0);
- }
- function OnPlayerDisconnected(player: NetworkPlayer) {
- Debug.Log("Clean up after player " + player);
- Network.RemoveRPCs(player);
- Network.DestroyPlayerObjects(player);
- }
- function OnDisconnectedFromServer(info : NetworkDisconnection) {
- Debug.Log("Clean up a bit after server quit");
- Network.RemoveRPCs(Network.player);
- Network.DestroyPlayerObjects(Network.player);
- Application.LoadLevel(Application.loadedLevel);
- }</SPAN>
public var playerPrefab : Transform;
function OnConnectedToServer(){
Spawnplayer();
}
function Spawnplayer(){
var myNewTrans : Transform = Network.Instantiate(playerPrefab, transform.position, transform.rotation, 0);
}
function OnPlayerDisconnected(player: NetworkPlayer) {
Debug.Log("Clean up after player " + player);
Network.RemoveRPCs(player);
Network.DestroyPlayerObjects(player);
}
function OnDisconnectedFromServer(info : NetworkDisconnection) {
Debug.Log("Clean up a bit after server quit");
Network.RemoveRPCs(Network.player);
Network.DestroyPlayerObjects(Network.player);
Application.LoadLevel(Application.loadedLevel);
}
3. 把服务器开着,后面打开两个客服端,在两个客服端里分别有两个物体(物体被重叠了,你在一个客服端移动一个物体就能看到了)
4.我发现这些天出现很多错误都是出自于NetworkView是否同步,还有端口号的重复。如果遇到问题,大家可以从这两方面试试。还有就是,当客户端强制断开时,该客户端再次连接服务器时,场景中会比所有的客户端数多一个,所以大家最好不要强制断开,如果已经强制断开了,那好,你把端口号重新改一下。
5.数据交互方面随着慢慢的研究我再写出来。大家一起进步哈~~~~QQ:397319689(有点笨)~~~