【问题标题】:Unity 5 networking color syncUnity 5 联网颜色同步
【发布时间】:2016-09-11 00:16:04
【问题描述】:

我正在尝试从我的服务器脚本同步我的立方体的颜色。我有网络转换和网络身份组件,转换同步效果很好,现在我需要同步颜色。我需要像 Network Material 组件这样的东西,或者我应该怎么做?谢谢 :) (我希望你明白我的意思,对不起英语。)

【问题讨论】:

    标签: c# networking unity3d


    【解决方案1】:

    您可以使用 SyncVar 属性同步值:

    [SyncVar]
    Color myColor;
    

    这将使更改在客户端和服务器上保持同步。但这只是你的颜色类型类中的一个字段,它实际上并不会改变你的渲染颜色。

    您可以在 Update 回调中将渲染的颜色更改为 myColor 值,但即使颜色没有变化,它也会更新它。

    最好的方法是使用钩子:

    [SyncVar (hook = "OnColorChanged")]
    Color myColor;
    

    这将在每次颜色更新时调用“OnColorChanged”函数。

    这样的事情应该可以工作(如果你正在使用 SpriteRenders):

    [SyncVar (hook = "OnColorChanged")]
    Color myColor;
    
    void OnColorChanged(Color value)
    {
        myColor = value;
        GetComponent<SpriteRenderer>().color = myColor;
    }
    

    【讨论】:

    • 感谢您的回答,因此我已将此代码添加到我的客户端和网络脚本中,但我现在收到此错误:UNetWeaver 错误:脚本 UnityEngine.Networking.ConnectClient 使用 [SyncVar] myColor但不是 NetworkBehaviour。
    • 在声明类时,它通常派生自 MonoBehaviour,但要使 SyncVar 工作,它必须派生自 NetworkBehaviour。将类声明从public Class myClass : MonoBehaviour 更改为public Class myClass : NetworkBehaviour
    • 谢谢,将 MonoBehaviour 更改为 Network 解决了该错误。但是我的立方体没有改变它的颜色。我的代码:pastebin.com/TAStVciy
    • 我提到的代码不应该在 NetworkManager 上,而应该在分配给你的多维数据集的脚本中,这应该是一个网络标识。
    • 哦,我明白了。非常感谢您的帮助:) 我会接受您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多