Unity ゲーム フレームワーク - コンポーネント拡張 - エンティティ コンポーネント拡張

エンティティ関数の拡張

以前に 3DUI の拡張機能を書きましたが、3DUI の拡張機能と同様に、ゲーム オブジェクトをシーン内のゲームオブジェクトのサブオブジェクトとしてフレームの外に作成します。
コードは以下に直接アップロードされており、機能も非常に単純で、シーン内のオブジェクト コンポーネントが ChangeGroupPos を呼び出してエンティティ グループの親オブジェクトを変更します。シーンが切り替わり、シーン内のオブジェクトが破棄されると、ReGroupPos を呼び出してエンティティ グループをフレームワークに返します。

using GameFramework;
using GameFramework.Entity;
using GameFramework.ObjectPool;
using GameFramework.Resource;
using System;
using System.Collections.Generic;
using UnityEngine;


namespace UnityGameFramework.Runtime
{
    
    
    /// <summary>
    /// 实体组件。
    /// </summary>
    [DisallowMultipleComponent]
    [AddComponentMenu("Game Framework/EntityFree")]
    public class EntityFreeComponent : EntityComponent
    {
    
    
        private Dictionary<string, Transform> CustomEntityGroupHelpers;
        private float Scale = 1f;

        /// <summary>
        /// 游戏框架组件初始化。
        /// </summary>
        protected override void Awake()
        {
    
    
            base.Awake();
            CustomEntityGroupHelpers = new Dictionary<string, Transform>();
        }

        /// <summary>
        /// 增加实体组。
        /// </summary>
        /// <param name="entityGroupName">实体组名称。</param>
        /// <param name="instanceAutoReleaseInterval">实体实例对象池自动释放可释放对象的间隔秒数。</param>
        /// <param name="instanceCapacity">实体实例对象池容量。</param>
        /// <param name="instanceExpireTime">实体实例对象池对象过期秒数。</param>
        /// <param name="instancePriority">实体实例对象池的优先级。</param>
        /// <returns>是否增加实体组成功。</returns>
        public override bool AddEntityGroup(string entityGroupName, float instanceAutoReleaseInterval, int instanceCapacity, float instanceExpireTime, int instancePriority)
        {
    
    
            if (m_EntityManager.HasEntityGroup(entityGroupName))
            {
    
    
                return false;
            }

            EntityGroupHelperBase entityGroupHelper = Helper.CreateHelper(m_EntityGroupHelperTypeName, m_CustomEntityGroupHelper, EntityGroupCount);
            if (entityGroupHelper == null)
            {
    
    
                Log.Error("Can not create entity group helper.");
                return false;
            }

            entityGroupHelper.name = Utility.Text.Format("Entity Group - {0}", entityGroupName);
            Transform transform = entityGroupHelper.transform;
            transform.SetParent(m_InstanceRoot);
            transform.localPosition = Vector3.zero;
            transform.localEulerAngles = Vector3.zero;
            transform.localScale = Vector3.one * Scale;
            CustomEntityGroupHelpers.Add(entityGroupName, transform);
            return m_EntityManager.AddEntityGroup(entityGroupName, instanceAutoReleaseInterval, instanceCapacity, instanceExpireTime, instancePriority, entityGroupHelper);
        }
        /// <summary>
        /// 改变界面组坐标
        /// </summary>
        /// <param name="uiGroupName">界面组名称。</param>
        /// <param name="depth">界面组父物体。</param>
        public bool ChangeGroupPos(string EntityGroupName, Transform parents)
        {
    
    
            if (!m_EntityManager.HasEntityGroup(EntityGroupName))
            {
    
    
                return false;
            }
            Transform transform = CustomEntityGroupHelpers[EntityGroupName];
            if (transform == null)
            {
    
    
                Log.Error("Can not find entity group helper.");
                return false;
            }
            transform.SetParent(parents);
            transform.localPosition = Vector3.zero;
            transform.localEulerAngles = Vector3.zero;
            transform.localScale = Vector3.one * Scale;
            return true;
        }
        /// <summary>
        /// 恢复界面组层级
        /// </summary>
        /// <param name="uiGroupName">界面组名称。</param>
        /// <param name="depth">界面组父物体。</param>
        public bool ReGroupPos(string EntityGroupName)
        {
    
    
            if (!m_EntityManager.HasEntityGroup(EntityGroupName))
            {
    
    
                return false;
            }
            Transform transform = CustomEntityGroupHelpers[EntityGroupName];
            if (transform == null)
            {
    
    
                Log.Error("Can not find entity group helper.");
                return false;
            }
            transform.SetParent(m_InstanceRoot);
            transform.localPosition = Vector3.zero;
            transform.localEulerAngles = Vector3.zero;
            transform.localScale = Vector3.one;
            return true;
        }
    }
}

コードが完成すると、元の Entity コンポーネントが置き換えられ、コード内の登録ロジックも EntityFree に変更されます。
GameEntry.組み込み

        /// <summary>
        /// 获取实体组件。
        /// </summary>
        public static EntityFreeComponent EntityFree
        {
    
    
            get;
            private set;
        }

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_37619255/article/details/129287321