Unet - добавление функции [Command] в Action C#
Я работаю в Unity с Unet, и у меня есть один вопрос:
-Могу ли я добавить командные функции непосредственно к действию?
По-видимому, я не могу, поэтому мой код выдает ошибку "RPC-функция RpcNextMaterial вызвана на клиенте"
Я исправил мой код так, что он работает, делая то, что кажется "уродливым": вместо того, чтобы добавить в свой Action.OnInteraction функцию Cmd, я создал функцию, которая вызывает функцию CMD.
Итак, исправлена следующая строка кода:
this.OnInteraction + = NmCmdNextMaterial;
Но должно быть просто:
this.OnInteraction + = CmdNextMaterial;
Это код, который в данный момент работает, просто запускает функцию "nextMaterial", когда пользователь (сервер или клиент) нажимает на нее.
public class InteractiveObject : NetworkBehaviour, IPointerClickHandler {
private Action OnInteraction;
//when the user clicks on GameObject collider
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
{
nextMaterial();
}
}
//callback fired on the client when the network authority changes
public override void OnStartAuthority()
{
if (!isServer)
{
if(OnInteraction != null)
{
OnInteraction();
OnInteraction = null;
}
}
}
//Set Next Material
#region nextMaterial
private void nextMaterial()
{
if (isServer)
{
RpcNextMaterial();
}
else
{
if (!hasAuthority)
{
//this.OnInteraction += CmdNextMaterial; // THIS IS WHAT I WANT
this.OnInteraction += NmCmdNextMaterial;
setLocalAuthority();
}
else
{
CmdNextMaterial();
}
}
}
public void NmCmdNextMaterial()
{
CmdNextMaterial();
}
[Command]
public void CmdNextMaterial()
{
RpcNextMaterial();
}
[ClientRpc]
private void RpcNextMaterial()
{
//change Material code
}
#endregion
}
Является ли этот "уродливый" способ единственным решением этой проблемы? Или есть какой-то потрясающий синтаксис, который мне в настоящее время не хватает для достижения этого?
Спасибо