1 回答

TA貢獻1780條經驗 獲得超1個贊
我回到這個問題,現在我可以回答了。我首先認為這是基于 C# 的解決方案。我認為在 c# 中,我們也許能夠停止方法的當前調用(就像您將“返回”添加到第一行”),并且您可以跟蹤或將其注冊到類似“在調用但在執行之前 -> do”之類的事件一些東西”。但是在再次研究之后代碼發生了什么變化。@caxapexac 已經提到了。
回答問題
Unity本身只是在編譯后更改代碼,但我們看不到它。
本守則
if (Input.GetKeyDown(shootKey))
{
CmdFire();
}
編譯后會變成
if (Input.GetKeyDown(shootKey))
{
CallCmdFire();
}
但 CmdFire 仍然被定義。
[Command]
void CmdFire() ...
并且生成/添加了 CallCmdFire。
public void CallCmdFire()
{
if (base.isServer)
{
CmdFire();
return;
}
NetworkWriter writer = NetworkWriterPool.GetWriter();
SendCommandInternal(typeof(Tank), "CmdFire", writer, 0);
NetworkWriterPool.Recycle(writer);
}
設計非常巧妙。
- 1 回答
- 0 關注
- 170 瀏覽
添加回答
舉報