/**
         * @brief   Inspector に追加されたときの処理.
         */
        public void Awake()
        {
            // 変数取得
            m_View = target as MonobitView;
            if (m_View == null)
            {
                return;
            }
            m_GameObject = m_View.gameObject;

            // シーン内のオブジェクトでIDが重複している場合、警告を促す
            m_ViewIdOverlapped = MonobitView.OverlappedSceneViewID(m_View.viewID);
        }
示例#2
0
        /**
         * @brief   Inspector に追加されたときの処理.
         */
        public void Awake()
        {
            // 変数取得
            m_View = target as MonobitView;
            if (m_View == null)
            {
                return;
            }
            m_GameObject = m_View.gameObject;

            // 0 が入っていた場合には MonobitView.AllocateSceneViewID() で自動割り当て
            bool bPrefab = EditorUtility.IsPersistent(m_View.gameObject);

            if (!bPrefab && m_View.viewID == 0)
            {
                Int32 tmp = MonobitView.AllocateSceneViewID();
                m_View.viewID = (tmp >= MonobitNetwork.PERSONAL_VIEW_ID_MAX) ? 0 : tmp;
            }

            // シーン内のオブジェクトでIDが重複している場合、警告を促す
            m_ViewIdOverlapped = MonobitView.OverlappedSceneViewID(m_View.viewID);
        }
        /**
         * 統括設定.
         *
         * @param bPrefab プレハブかどうかのフラグ
         */
        private void GeneralSettings(bool bPrefab)
        {
            GUILayout.Space(5);

            // 標題の表示
            EditorGUILayout.LabelField("General Settings", EditorStyles.boldLabel);

            EditorGUI.indentLevel = 2;

            // MonobitView ID の表示
            if (bPrefab)
            {
                EditorGUILayout.LabelField("MonobitView ID", "Decide at runtime");
                if (0 != m_View.viewID)
                {
                    m_View.viewID = 0;
                }
            }
            else if (EditorApplication.isPlaying)
            {
                EditorGUILayout.LabelField("MonobitView ID", m_View.viewID.ToString());
            }
            else
            {
                // MonobitView ID の手動登録
                int viewID = (int)EditorGUILayout.IntField("MonobitView ID", m_View.viewID);
                if (viewID != m_View.viewID)
                {
                    MonobitView.RemoveSceneViewID(m_View.viewID);
                    m_View.viewID      = MonobitView.AssignedSceneViewID(viewID);
                    m_ViewIdOverlapped = MonobitView.OverlappedSceneViewID(viewID);
                }

                // MonobitView ID の退避
                m_ViewID = m_View.viewID;

                // シーン内のオブジェクトでIDが重複している場合、警告を促す
                if (m_ViewIdOverlapped)
                {
                    EditorGUILayout.HelpBox("This \"MonobitView ID\" is stored in another object.", MessageType.Warning, true);
                }

                // 登録されたIDが不正である場合、エラーを出力する
                if (m_View.viewID < 0 || m_View.viewID >= MonobitNetwork.PERSONAL_VIEW_ID_MAX)
                {
                    EditorGUILayout.HelpBox("This \"MonobitView ID\" doesn't allowed as this value (must between 0 to 999).", MessageType.Error, true);
                }
            }

            // Owner の表示
            if (bPrefab)
            {
                EditorGUILayout.LabelField("Owner", "Decide at runtime");
            }
            else if (m_View.isSceneView)
            {
                EditorGUILayout.LabelField("Owner", "Scene(HostClient)");
            }
            else
            {
                MonobitPlayer player     = MonobitPlayer.Find(m_View.ownerId);
                string        playerInfo = (player != null) ? player.name : "<MonobitPlayer is not found>";

                if (string.IsNullOrEmpty(playerInfo))
                {
                    playerInfo = "<playername is not set>";
                }

                EditorGUILayout.LabelField("Owner", "[" + m_View.ownerId + "]" + playerInfo);
            }

            // Ownerの所有権委譲の設定
            GUI.enabled = !EditorApplication.isPlaying;
            m_View.ownershipTransfer = (MonobitEngineBase.OwnershipOption)EditorGUILayout.EnumPopup("Ownership Transfer", m_View.ownershipTransfer);
            GUI.enabled = true;

            // 制御権の表示
            if (EditorApplication.isPlaying && MonobitNetwork.player != null)
            {
                EditorGUILayout.Toggle("Enable Control" + (MonobitNetwork.isHost ? " <master>" : ""), m_View.isMine);
            }
            else
            {
                GUI.enabled = false;
                EditorGUILayout.Toggle("Enable Control", true);
                GUI.enabled = true;
            }

            // 暗号化の有効/無効フラグ
            m_View.Encrypt = EditorGUILayout.Toggle("Enable Sync Encrypt Network", m_View.Encrypt);

            // 所有者がルーム退室時にオブジェクトを削除するかどうか
            if (m_View.isInstantiated)
            {
                GUI.enabled = false;
                EditorGUILayout.Toggle("Is Dont Destroy On Room", m_View.isDontDestroyOnRoom);
                GUI.enabled = true;
            }

            EditorGUI.indentLevel = 0;

            GUILayout.Space(5);
        }