说你有
使用“新”Unity 网络,您必须具备(据我所知) a NetworkManager
某处。它将产生可笑的“玩家”对象。
可笑的“玩家”对象必须有一个继承自的类NetworkBehaviour
.
大多数团队将该类称为“Comms”或“AbstractPlayer”或“Junction”。
public class Comms : NetworkBehaviour { }
因此,每个命令(如“Jump”)都必须由“Comms”类来协调。
对于每个命令(例如“Jump”)你需要一对函数在通讯类中:
public class Comms : NetworkBehaviour {
// for every command (say, "Jump") you need THIS PAIR of functions:
public void CommandJump() {
Debug.Log("this is comms - client, do a Jump");
CmdJump();
}
[Command]
void CmdJump() {
Debug.Log("this is comms - server. a Jump arrived");
// simply pass on that command to the correct script on a server...
s = Object.FindObjectOfType<Some Class On The Server>();
s.ClientJumped();
}
}
So!
借助新的 Unity 网络,在客户端,每次您想要
send to server Jump()
事实上,您必须通过抽象播放器上的“comms”类发送它。
public class Jumping: MonoBehavior...
// here in the client side ... we want to send "Jump"
Comms comms = Object.FindObjectOfType<Comms>();
comms.CommandClick1();
(注意 - 显然,您可以在那里缓存“通讯”。这只是一个示例。)
旁白:极其重要:这只是一个概要示例。
在
实践你必须这样做:
https://stackoverflow.com/a/51759299/294884
So!
事情是这样的:
在“旧”Unity 网络中,任何旧客户端脚本可以直接进行网络调用(示例中的“CmdJump”)。您所需要的只是一个指向 NetworkView 的链接。
现在您必须拥有这个新的“中间”类,即示例中的“Comms”。
我试图理解,
有没有办法让客户端的普通脚本(例如 Jumping - MonoBehavior)直接调用Command
?
据我所知,只有NetworkBehaviour
派生类可以做到这一点。在旧的网络中,任何类都可以进行这样的调用。
据我所知,在“新”Unity 网络中must you通过一个NetworkBehaviour
派生类,如我的示例所示。
正如你所看到的,如果我“遗漏了一些东西”,而像 Jumping 这样的类可以直接做到这一点,那么我的代码就是令人发指的:)
你可以打电话吗Command
直接来自 MonoBehaviour 吗?
事实上,我是否完全错误,你必须拥有可笑的自动生成的“玩家”对象等等?也许还有一种完全不同的调用方式Command
s.