protected virtual void Awake()
        {
#if UNITY_WEBGL && !UNITY_EDITOR
            // Force to use websocket transport if it's running as webgl
            if (transportFactory == null || !transportFactory.CanUseWithWebGL)
            {
                transportFactory = gameObject.AddComponent <WebSocketTransportFactory>();
            }
#else
            if (useWebSocket)
            {
                if (transportFactory == null || !transportFactory.CanUseWithWebGL)
                {
                    transportFactory = gameObject.AddComponent <WebSocketTransportFactory>();
                }
            }
            else
            {
                if (transportFactory == null)
                {
                    transportFactory = gameObject.AddComponent <LiteNetLibTransportFactory>();
                }
            }
#endif
            transport = TransportFactory.Build();

            if (offlineTransport == null)
            {
                offlineTransport = new OfflineTransport();
            }

            Client = new LiteNetLibClient(this);
            Server = new LiteNetLibServer(this);
        }
        protected void PrepareTransportFactory()
        {
#if UNITY_WEBGL && !UNITY_EDITOR
            // Force to use websocket transport if it's running as webgl
            if (transportFactory == null || !(transportFactory is IWebSocketTransportFactory))
            {
                WebSocketTransportFactory webSocketTransportFactory = gameObject.AddComponent <WebSocketTransportFactory>();
                webSocketTransportFactory.Secure = webSocketSecure;
                webSocketTransportFactory.CertificateFilePath = webSocketCertificateFilePath;
                webSocketTransportFactory.CertificatePassword = webSocketCertificatePassword;
                transportFactory = webSocketTransportFactory;
            }
#else
            if (useWebSocket)
            {
                if (transportFactory == null || !(transportFactory is IWebSocketTransportFactory))
                {
                    WebSocketTransportFactory webSocketTransportFactory = gameObject.AddComponent <WebSocketTransportFactory>();
                    webSocketTransportFactory.Secure = webSocketSecure;
                    webSocketTransportFactory.CertificateFilePath = webSocketCertificateFilePath;
                    webSocketTransportFactory.CertificatePassword = webSocketCertificatePassword;
                    transportFactory = webSocketTransportFactory;
                }
            }
            else
            {
                if (transportFactory == null)
                {
                    transportFactory = gameObject.AddComponent <LiteNetLibTransportFactory>();
                }
            }
#endif
        }