// *********************************************************************** // Assembly : Unity // Author : Kimch // Created : 2019-06-01 // Description : 实体表现类 // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using F.ObjectPool; using UnityEngine; namespace G { public class EntityView : System.IDisposable { private readonly Entity _entity; /// /// 所属实体 /// public Entity entity { get { return _entity; } } /// /// /// public bool initSuccess { get; private set; } /// /// /// public GameObject gameObject { get; private set; } /// /// /// public Transform transform { get { return gameObject.transform; } } /// /// /// public Renderer mainRenderer { get; private set; } #region Method public EntityView(Entity entity) { _entity = entity; } /// /// /// /// public async void Init(System.Action callback) { var entityType = _entity.entityType; switch (entityType) { case EntityType.Minion: var minionItem = ItemProxy.Instance.GetStaticItem(_entity.itemId); var minionPrefab = await AssetProxy.Instance.TryGetAssetAsync(minionItem.assets.ToLower(), EntityManager.ASSET_POOL_NAME).Task; gameObject = SpawnPool.Spawn(minionPrefab, Vector3.zero, Vector3.zero, _entity.transform); callback?.Invoke(); break; case EntityType.Boss: var bossItem = ItemProxy.Instance.GetStaticItem(_entity.itemId); var bossPrefab = await AssetProxy.Instance.TryGetAssetAsync(bossItem.assets.ToLower(), EntityManager.ASSET_POOL_NAME).Task; gameObject = SpawnPool.Spawn(bossPrefab, Vector3.zero, Vector3.zero, _entity.transform); callback?.Invoke(); break; case EntityType.MainPlayer: var playerEntity = (EntityPlayer)_entity; //var chaSkin = PlayerProxy.Instance.GetCurrentChaSkin(); //int skinIndex = chaSkin != null ? Mathf.Clamp(chaSkin.id - 2000 + 1, 1, 4) : 1; var chaPrefabName = PlayerProxy.Instance.GetCurrentChaModel(); var chaPrefab = await AssetProxy.Instance.TryGetAssetAsync(chaPrefabName, EntityManager.ASSET_POOL_NAME).Task; gameObject = Object.Instantiate(chaPrefab, playerEntity.transform); gameObject.SetActive(true); gameObject.AddComponent(); //playerEntity.SetModel(gameObject); mainRenderer = gameObject.GetComponentInChildren(); callback?.Invoke(); break; case EntityType.Pet: var petEntity = (EntityPet)_entity; var petPrefab = await AssetProxy.Instance.TryGetAssetAsync(petEntity.petAsset, EntityManager.ASSET_POOL_NAME).Task; gameObject = Object.Instantiate(petPrefab, petEntity.transform); gameObject.SetActive(true); callback?.Invoke(); break; default: callback?.Invoke(); break; } this.initSuccess = true; } public void Disappear() { if (gameObject) gameObject.SetActive(false); } public void Appear() { if (gameObject) gameObject.SetActive(true); } public void OnUpdate(float deltaTime) { } #endregion #region IDisposable Support // 添加此代码以正确实现可处置模式。 public void Dispose() { switch (_entity.entityType) { case EntityType.Minion: case EntityType.Boss: if (gameObject) { SpawnPool.Despawn(gameObject); gameObject = null; } break; default: break; } } #endregion } }