更新demo

更新demo
This commit is contained in:
ALEXTANG
2024-03-18 15:35:15 +08:00
parent 17a5d7425c
commit a2255b80cd
1028 changed files with 55353 additions and 35278 deletions

View File

@@ -171,7 +171,7 @@ namespace GameLogic
CurState = false;
}
public override void OnDestroy()
protected override void OnDestroy()
{
RemoveNotifyBind();
}

View File

@@ -516,7 +516,7 @@ namespace GameLogic
{
if (paramList is { Count: > 0 })
{
return false;
return true;
}
return false;

View File

@@ -7,14 +7,14 @@ namespace GameLogic
public class RedNoteWidget : UIWidget
{
#region
public override void ScriptGenerator()
protected override void ScriptGenerator()
{
}
#endregion
private Image m_image;
public RedNoteBehaviour m_redNote;
public override void OnCreate()
protected override void OnCreate()
{
m_redNote = CreateWidget<RedNoteBehaviour>(gameObject);
m_image = gameObject.GetComponent<Image>();
@@ -42,10 +42,10 @@ namespace GameLogic
public void SetSprite(string sprite)
{
m_image.SetSprite(sprite);
// m_image.SetSprite(sprite);
}
public override void OnUpdate()
protected override void OnUpdate()
{
/*if (!m_redNote.CurState)
{

View File

@@ -377,7 +377,7 @@ namespace GameLogic
private GridItemPool TryCreateItemPool(string itemPrefabName)
{
string resPath = itemPrefabName;
GameObject go = GameModule.Resource.LoadAsset<GameObject>(resPath, _containerTrans);
GameObject go = GameModule.Resource.LoadGameObject(resPath, parent: _containerTrans);
if (go != null)
{
go.SetActive(false);

View File

@@ -669,7 +669,7 @@ namespace GameLogic
private ItemPool TryCreateItemPool(string itemPrefabName)
{
string resPath = itemPrefabName;
GameObject go = GameModule.Resource.LoadAsset<GameObject>(resPath, _containerTrans);
GameObject go = GameModule.Resource.LoadGameObject(resPath, parent: _containerTrans);
if (go != null)
{
go.SetActive(false);

View File

@@ -55,7 +55,7 @@ namespace GameLogic
}
}
public override void BindMemberProperty()
protected override void BindMemberProperty()
{
m_selectNode = FindChild("SelectNode");
m_noSelectNode = FindChild("NoSelectNode");

View File

@@ -86,7 +86,7 @@ namespace GameLogic
{
}
public override void RegisterEvent()
protected override void RegisterEvent()
{
base.RegisterEvent();
AddSelectEvt();

View File

@@ -30,19 +30,19 @@ namespace GameLogic
/// </summary>
public List<TItem> items => m_items;
public override void BindMemberProperty()
protected override void BindMemberProperty()
{
base.BindMemberProperty();
LoopRectView = rectTransform.GetComponent<LoopGridView>();
}
public override void OnCreate()
protected override void OnCreate()
{
base.OnCreate();
LoopRectView.InitGridView(0, OnGetItemByIndex);
}
public override void OnDestroy()
protected override void OnDestroy()
{
base.OnDestroy();
m_itemCache.Clear();

View File

@@ -10,13 +10,13 @@ namespace GameLogic
private GameFrameworkDictionary<int, T> m_itemCache = new GameFrameworkDictionary<int, T>();
public override void BindMemberProperty()
protected override void BindMemberProperty()
{
base.BindMemberProperty();
LoopRectView = this.rectTransform.GetComponent<LoopListView>();
}
public override void OnDestroy()
protected override void OnDestroy()
{
base.OnDestroy();
m_itemCache.Clear();

View File

@@ -31,19 +31,19 @@ namespace GameLogic
/// </summary>
public List<TItem> items => m_items;
public override void BindMemberProperty()
protected override void BindMemberProperty()
{
base.BindMemberProperty();
LoopRectView = rectTransform.GetComponent<LoopListView>();
}
public override void OnCreate()
protected override void OnCreate()
{
base.OnCreate();
LoopRectView.InitListView(0, OnGetItemByIndex);
}
public override void OnDestroy()
protected override void OnDestroy()
{
base.OnDestroy();
m_itemCache.Clear();

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d21fceb7ec2e3e04ab967b9273644e57
guid: 02e23552959dc0e4eaf254fd6c5c21bf
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@@ -25,7 +25,7 @@ public class EntityAsteroid : MonoBehaviour
if (name.StartsWith("player"))
{
GameEvent.Send(ActorEventDefine.AsteroidExplosion,this.transform.position, this.transform.rotation);
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}
void OnTriggerExit(Collider other)
@@ -33,7 +33,7 @@ public class EntityAsteroid : MonoBehaviour
var name = other.gameObject.name;
if (name.StartsWith("Boundary"))
{
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}
}

View File

@@ -1,3 +1,4 @@
using GameLogic;
using TEngine;
using UnityEngine;
@@ -28,7 +29,7 @@ public class EntityBullet : MonoBehaviour
{
if (name.StartsWith("enemy") == false)
{
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}
@@ -36,7 +37,7 @@ public class EntityBullet : MonoBehaviour
{
if (name.StartsWith("player") == false)
{
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}
}
@@ -45,7 +46,7 @@ public class EntityBullet : MonoBehaviour
var name = other.gameObject.name;
if (name.StartsWith("Boundary"))
{
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}
}

View File

@@ -1,4 +1,5 @@
using TEngine;
using GameLogic;
using TEngine;
using UnityEngine;
public class EntityEffect : MonoBehaviour
@@ -11,6 +12,6 @@ public class EntityEffect : MonoBehaviour
}
private void DelayDestroy()
{
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}

View File

@@ -69,7 +69,7 @@ public class EntityEnemy : MonoBehaviour
if (name.StartsWith("player"))
{
GameEvent.Send(ActorEventDefine.EnemyDead,this.transform.position, this.transform.rotation);
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}
void OnTriggerExit(Collider other)
@@ -77,7 +77,7 @@ public class EntityEnemy : MonoBehaviour
var name = other.gameObject.name;
if (name.StartsWith("Boundary"))
{
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}

View File

@@ -51,7 +51,7 @@ public class EntityPlayer : MonoBehaviour
if (name.StartsWith("enemy") || name.StartsWith("asteroid"))
{
GameEvent.Send(ActorEventDefine.PlayerDead,transform.position, transform.rotation);
GameModule.Resource.FreeGameObject(this.gameObject);
PoolManager.Instance.PushGameObject(this.gameObject);
}
}
}

View File

@@ -11,239 +11,241 @@ using Random = UnityEngine.Random;
/// 战斗房间
/// </summary>
[Update]
public class BattleSystem:BehaviourSingleton<BattleSystem>
public class BattleSystem : BehaviourSingleton<BattleSystem>
{
private enum ESteps
{
None,
Ready,
Spawn,
WaitSpawn,
WaitWave,
GameOver,
}
private enum ESteps
{
None,
Ready,
Spawn,
WaitSpawn,
WaitWave,
GameOver,
}
private GameObject _roomRoot;
private GameObject _roomRoot;
// 关卡参数
private const int EnemyCount = 10;
private const int EnemyScore = 10;
private const int AsteroidScore = 1;
private readonly Vector3 _spawnValues = new Vector3(6, 0, 20);
private readonly string[] _entityLocations = new string[]
{
"asteroid01", "asteroid02", "asteroid03", "enemy_ship"
};
// 关卡参数
private const int EnemyCount = 10;
private const int EnemyScore = 10;
private const int AsteroidScore = 1;
private readonly Vector3 _spawnValues = new Vector3(6, 0, 20);
private ESteps _steps = ESteps.None;
private int _totalScore = 0;
private int _waveSpawnCount = 0;
//
// private UniTimer _startWaitTimer = UniTimer.CreateOnceTimer(1f);
// private UniTimer _spawnWaitTimer = UniTimer.CreateOnceTimer(0.75f);
// private UniTimer _waveWaitTimer = UniTimer.CreateOnceTimer(4f);
private readonly string[] _entityLocations = new string[]
{
"asteroid01", "asteroid02", "asteroid03", "enemy_ship"
};
private float _startWaitTimer = 1f;
private float _spawnWaitTimer = 0.75f;
private float _waveWaitTimer = 4f;
private ESteps _steps = ESteps.None;
private int _totalScore = 0;
/// <summary>
/// 加载房间
/// </summary>
public async UniTaskVoid LoadRoom()
{
_startWaitTimer = 1f;
await UniTask.Yield();
// 创建房间根对象
_roomRoot = new GameObject("BattleRoom");
private int _waveSpawnCount = 0;
//
// private UniTimer _startWaitTimer = UniTimer.CreateOnceTimer(1f);
// private UniTimer _spawnWaitTimer = UniTimer.CreateOnceTimer(0.75f);
// private UniTimer _waveWaitTimer = UniTimer.CreateOnceTimer(4f);
// 加载背景音乐
GameModule.Audio.Play(AudioType.Music, "music_background", true);
private float _startWaitTimer = 1f;
private float _spawnWaitTimer = 0.75f;
private float _waveWaitTimer = 4f;
// 创建玩家实体对象
var handle = GameModule.Resource.LoadAsset<GameObject>("player_ship", _roomRoot.transform);
var entity = handle.GetComponent<EntityPlayer>();
/// <summary>
/// 加载房间
/// </summary>
public async UniTaskVoid LoadRoom()
{
_startWaitTimer = 1f;
// 显示战斗界面
GameModule.UI.ShowUIAsync<UIBattleWindow>();
await UniTask.Yield();
// 创建房间根对象
_roomRoot = new GameObject("BattleRoom");
// 监听游戏事件
GameEvent.AddEventListener<Vector3,Quaternion>(ActorEventDefine.PlayerDead,OnPlayerDead);
GameEvent.AddEventListener<Vector3,Quaternion>(ActorEventDefine.EnemyDead,OnEnemyDead);
GameEvent.AddEventListener<Vector3,Quaternion>(ActorEventDefine.AsteroidExplosion,OnAsteroidExplosion);
GameEvent.AddEventListener<Vector3,Quaternion>(ActorEventDefine.PlayerFireBullet,OnPlayerFireBullet);
GameEvent.AddEventListener<Vector3,Quaternion>(ActorEventDefine.EnemyFireBullet,OnEnemyFireBullet);
// 加载背景音乐
GameModule.Audio.Play(AudioType.Music, "music_background", true);
_steps = ESteps.Ready;
}
/// <summary>
/// 销毁房间
/// </summary>
public void DestroyRoom()
{
// 加载背景音乐
GameModule.Audio.Stop(AudioType.Music, true);
// 创建玩家实体对象
var handle = PoolManager.Instance.GetGameObject("player_ship",parent: _roomRoot.transform);
var entity = handle.GetComponent<EntityPlayer>();
// if (_entitySpawner != null)
// {
// _entitySpawner.DestroyAll(true);
// }
// 显示战斗界面
GameModule.UI.ShowUIAsync<UIBattleWindow>();
if (_roomRoot != null)
Object.Destroy(_roomRoot);
// 监听游戏事件
GameEvent.AddEventListener<Vector3, Quaternion>(ActorEventDefine.PlayerDead, OnPlayerDead);
GameEvent.AddEventListener<Vector3, Quaternion>(ActorEventDefine.EnemyDead, OnEnemyDead);
GameEvent.AddEventListener<Vector3, Quaternion>(ActorEventDefine.AsteroidExplosion, OnAsteroidExplosion);
GameEvent.AddEventListener<Vector3, Quaternion>(ActorEventDefine.PlayerFireBullet, OnPlayerFireBullet);
GameEvent.AddEventListener<Vector3, Quaternion>(ActorEventDefine.EnemyFireBullet, OnEnemyFireBullet);
GameModule.UI.CloseWindow<UIBattleWindow>();
// 监听游戏事件
GameEvent.RemoveEventListener<Vector3,Quaternion>(ActorEventDefine.PlayerDead,OnPlayerDead);
GameEvent.RemoveEventListener<Vector3,Quaternion>(ActorEventDefine.EnemyDead,OnEnemyDead);
GameEvent.RemoveEventListener<Vector3,Quaternion>(ActorEventDefine.AsteroidExplosion,OnAsteroidExplosion);
GameEvent.RemoveEventListener<Vector3,Quaternion>(ActorEventDefine.PlayerFireBullet,OnPlayerFireBullet);
GameEvent.RemoveEventListener<Vector3,Quaternion>(ActorEventDefine.EnemyFireBullet,OnEnemyFireBullet);
}
_steps = ESteps.Ready;
}
public override void Update()
{
UpdateRoom();
}
/// <summary>
/// 销毁房间
/// </summary>
public void DestroyRoom()
{
// 加载背景音乐
GameModule.Audio.Stop(AudioType.Music, true);
/// <summary>
/// 更新房间
/// </summary>
public void UpdateRoom()
{
if (_steps == ESteps.None || _steps == ESteps.GameOver)
return;
// if (_entitySpawner != null)
// {
// _entitySpawner.DestroyAll(true);
// }
if (_steps == ESteps.Ready)
{
_startWaitTimer -= Time.deltaTime;
if (_startWaitTimer <= 0)
{
_steps = ESteps.Spawn;
}
}
if (_roomRoot != null)
Object.Destroy(_roomRoot);
if (_steps == ESteps.Spawn)
{
var enemyLocation = _entityLocations[Random.Range(0, 4)];
Vector3 spawnPosition = new Vector3(Random.Range(-_spawnValues.x, _spawnValues.x), _spawnValues.y, _spawnValues.z);
Quaternion spawnRotation = Quaternion.identity;
GameModule.UI.CloseUI<UIBattleWindow>();
if (enemyLocation == "enemy_ship")
{
// 生成敌人实体
var gameObject = GameModule.Resource.LoadAsset<GameObject>(enemyLocation, _roomRoot.transform);
gameObject.transform.position = spawnPosition;
gameObject.transform.rotation = spawnRotation;
var entity = gameObject.GetComponent<EntityEnemy>();
entity.InitEntity();
}
else
{
// 生成小行星实体
var gameObject = GameModule.Resource.LoadAsset<GameObject>(enemyLocation, _roomRoot.transform);
gameObject.transform.position = spawnPosition;
gameObject.transform.rotation = spawnRotation;
var entity = gameObject.GetComponent<EntityAsteroid>();
entity.InitEntity();
}
// 监听游戏事件
GameEvent.RemoveEventListener<Vector3, Quaternion>(ActorEventDefine.PlayerDead, OnPlayerDead);
GameEvent.RemoveEventListener<Vector3, Quaternion>(ActorEventDefine.EnemyDead, OnEnemyDead);
GameEvent.RemoveEventListener<Vector3, Quaternion>(ActorEventDefine.AsteroidExplosion, OnAsteroidExplosion);
GameEvent.RemoveEventListener<Vector3, Quaternion>(ActorEventDefine.PlayerFireBullet, OnPlayerFireBullet);
GameEvent.RemoveEventListener<Vector3, Quaternion>(ActorEventDefine.EnemyFireBullet, OnEnemyFireBullet);
}
_waveSpawnCount++;
if (_waveSpawnCount >= EnemyCount)
{
_steps = ESteps.WaitWave;
}
else
{
_steps = ESteps.WaitSpawn;
}
}
public override void Update()
{
UpdateRoom();
}
if (_steps == ESteps.WaitSpawn)
{
_spawnWaitTimer -= Time.deltaTime;
if (_spawnWaitTimer <= 0)
{
_spawnWaitTimer = 0.75f;
_steps = ESteps.Spawn;
}
}
/// <summary>
/// 更新房间
/// </summary>
public void UpdateRoom()
{
if (_steps == ESteps.None || _steps == ESteps.GameOver)
return;
if (_steps == ESteps.WaitWave)
{
_waveWaitTimer -= Time.deltaTime;
if (_waveWaitTimer <= 0)
{
_waveWaitTimer = 4f;
_waveSpawnCount = 0;
_steps = ESteps.Spawn;
}
}
}
if (_steps == ESteps.Ready)
{
_startWaitTimer -= Time.deltaTime;
if (_startWaitTimer <= 0)
{
_steps = ESteps.Spawn;
}
}
if (_steps == ESteps.Spawn)
{
var enemyLocation = _entityLocations[Random.Range(0, 4)];
Vector3 spawnPosition = new Vector3(Random.Range(-_spawnValues.x, _spawnValues.x), _spawnValues.y, _spawnValues.z);
Quaternion spawnRotation = Quaternion.identity;
if (enemyLocation == "enemy_ship")
{
// 生成敌人实体
var gameObject = PoolManager.Instance.GetGameObject(enemyLocation,parent: _roomRoot.transform);
gameObject.transform.position = spawnPosition;
gameObject.transform.rotation = spawnRotation;
var entity = gameObject.GetComponent<EntityEnemy>();
entity.InitEntity();
}
else
{
// 生成小行星实体
var gameObject = PoolManager.Instance.GetGameObject(enemyLocation,parent: _roomRoot.transform);
gameObject.transform.position = spawnPosition;
gameObject.transform.rotation = spawnRotation;
var entity = gameObject.GetComponent<EntityAsteroid>();
entity.InitEntity();
}
_waveSpawnCount++;
if (_waveSpawnCount >= EnemyCount)
{
_steps = ESteps.WaitWave;
}
else
{
_steps = ESteps.WaitSpawn;
}
}
if (_steps == ESteps.WaitSpawn)
{
_spawnWaitTimer -= Time.deltaTime;
if (_spawnWaitTimer <= 0)
{
_spawnWaitTimer = 0.75f;
_steps = ESteps.Spawn;
}
}
if (_steps == ESteps.WaitWave)
{
_waveWaitTimer -= Time.deltaTime;
if (_waveWaitTimer <= 0)
{
_waveWaitTimer = 4f;
_waveSpawnCount = 0;
_steps = ESteps.Spawn;
}
}
}
#region
#region
private void OnPlayerDead(Vector3 position,Quaternion rotation)
{
// 创建爆炸效果
var gameObject = GameModule.Resource.LoadAsset<GameObject>("explosion_player", _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityEffect>();
entity.InitEntity();
_steps = ESteps.GameOver;
GameEvent.Send(ActorEventDefine.GameOver);
}
private void OnPlayerDead(Vector3 position, Quaternion rotation)
{
// 创建爆炸效果
var gameObject = PoolManager.Instance.GetGameObject("explosion_player",parent: _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityEffect>();
entity.InitEntity();
_steps = ESteps.GameOver;
GameEvent.Send(ActorEventDefine.GameOver);
}
private void OnEnemyDead(Vector3 position,Quaternion rotation)
{
// 创建爆炸效果
var gameObject = GameModule.Resource.LoadAsset<GameObject>("explosion_enemy", _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityEffect>();
entity.InitEntity();
private void OnEnemyDead(Vector3 position, Quaternion rotation)
{
// 创建爆炸效果
var gameObject = PoolManager.Instance.GetGameObject("explosion_enemy",parent: _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityEffect>();
entity.InitEntity();
_totalScore += EnemyScore;
GameEvent.Send(ActorEventDefine.ScoreChange,_totalScore);
}
_totalScore += EnemyScore;
GameEvent.Send(ActorEventDefine.ScoreChange, _totalScore);
}
private void OnAsteroidExplosion(Vector3 position,Quaternion rotation)
{
// 创建爆炸效果
var gameObject = GameModule.Resource.LoadAsset<GameObject>("explosion_asteroid", _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityEffect>();
entity.InitEntity();
private void OnAsteroidExplosion(Vector3 position, Quaternion rotation)
{
// 创建爆炸效果
var gameObject = PoolManager.Instance.GetGameObject("explosion_asteroid",parent: _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityEffect>();
entity.InitEntity();
_totalScore += AsteroidScore;
GameEvent.Send(ActorEventDefine.ScoreChange,_totalScore);
}
_totalScore += AsteroidScore;
GameEvent.Send(ActorEventDefine.ScoreChange, _totalScore);
}
private void OnPlayerFireBullet(Vector3 position,Quaternion rotation)
{
// 创建子弹实体
var gameObject = GameModule.Resource.LoadAsset<GameObject>("player_bullet", _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityBullet>();
entity.InitEntity();
}
private void OnEnemyFireBullet(Vector3 position,Quaternion rotation)
{
// 创建子弹实体
var gameObject = GameModule.Resource.LoadAsset<GameObject>("enemy_bullet", _roomRoot.transform);
private void OnPlayerFireBullet(Vector3 position, Quaternion rotation)
{
// 创建子弹实体
var gameObject = PoolManager.Instance.GetGameObject("player_bullet",parent: _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityBullet>();
entity.InitEntity();
}
}
#endregion
private void OnEnemyFireBullet(Vector3 position, Quaternion rotation)
{
// 创建子弹实体
var gameObject = PoolManager.Instance.GetGameObject("enemy_bullet",parent: _roomRoot.transform);
gameObject.transform.position = position;
gameObject.transform.rotation = rotation;
var entity = gameObject.GetComponent<EntityBullet>();
entity.InitEntity();
}
#endregion
}

View File

@@ -0,0 +1,181 @@
using System;
using System.Collections.Generic;
using TEngine;
using UnityEngine;
namespace GameLogic
{
public class PoolManager : MonoBehaviour
{
private static PoolManager _instance;
public static PoolManager Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType<PoolManager>();
}
if (_instance == null)
{
GameObject gameObject = new GameObject();
gameObject.name = nameof(PoolManager);
_instance = gameObject.AddComponent<PoolManager>();
_instance.poolRootObj = gameObject;
DontDestroyOnLoad(_instance);
}
return _instance;
}
}
[SerializeField] private GameObject poolRootObj;
public Dictionary<string, GameObjectPoolData> gameObjectPoolDic = new Dictionary<string, GameObjectPoolData>();
public Dictionary<string, ObjectPoolData> objectPoolDic = new Dictionary<string, ObjectPoolData>();
public GameObject GetGameObject(string assetName, Transform parent = null)
{
GameObject obj = null;
if (gameObjectPoolDic.TryGetValue(assetName, out var gameObjectPoolData) && gameObjectPoolData.poolQueue.Count > 0)
{
obj = gameObjectPoolData.GetObj(parent);
}
if (obj == null)
{
obj = GameModule.Resource.LoadGameObject(assetName, parent: parent);
obj.name = assetName;
}
return obj;
}
public void PushGameObject(GameObject obj)
{
string objName = obj.name;
if (gameObjectPoolDic.TryGetValue(objName, out var gameObjectPoolData))
{
gameObjectPoolData.PushObj(obj);
}
else
{
gameObjectPoolDic.Add(objName, new GameObjectPoolData(obj, poolRootObj));
}
}
public T GetObject<T>() where T : class, new()
{
return CheckObjectCache<T>() ? (T)objectPoolDic[typeof(T).FullName].GetObj() : new T();
}
public void PushObject(object obj)
{
string fullName = obj.GetType().FullName;
if (objectPoolDic.ContainsKey(fullName))
{
objectPoolDic[fullName].PushObj(obj);
}
else
{
objectPoolDic.Add(fullName, new ObjectPoolData(obj));
}
}
private bool CheckObjectCache<T>()
{
string fullName = typeof(T).FullName;
return fullName != null && objectPoolDic.ContainsKey(fullName) && objectPoolDic[fullName].poolQueue.Count > 0;
}
public void Clear(bool clearGameObject = true, bool clearCObject = true)
{
if (clearGameObject)
{
for (int index = 0; index < poolRootObj.transform.childCount; ++index)
{
Destroy(poolRootObj.transform.GetChild(index).gameObject);
}
gameObjectPoolDic.Clear();
}
if (!clearCObject)
{
return;
}
objectPoolDic.Clear();
}
public void ClearAllGameObject() => Clear(clearCObject: false);
public void ClearGameObject(string prefabName)
{
GameObject obj = poolRootObj.transform.Find(prefabName).gameObject;
if (obj == null)
{
return;
}
Destroy(obj);
gameObjectPoolDic.Remove(prefabName);
}
public void ClearGameObject(GameObject prefab) => ClearGameObject(prefab.name);
public void ClearAllObject() => Clear(false);
public void ClearObject<T>() => objectPoolDic.Remove(typeof(T).FullName);
public void ClearObject(Type type) => objectPoolDic.Remove(type.FullName);
}
public class ObjectPoolData
{
public readonly Queue<object> poolQueue = new Queue<object>();
public ObjectPoolData(object obj) => PushObj(obj);
public void PushObj(object obj) => poolQueue.Enqueue(obj);
public object GetObj() => poolQueue.Dequeue();
}
public class GameObjectPoolData
{
public readonly GameObject fatherObj;
public readonly Queue<GameObject> poolQueue;
public GameObjectPoolData(GameObject obj, GameObject poolRootObj)
{
fatherObj = new GameObject(obj.name);
fatherObj.transform.SetParent(poolRootObj.transform);
poolQueue = new Queue<GameObject>();
PushObj(obj);
}
public GameObjectPoolData(GameObject fatherObj)
{
this.fatherObj = fatherObj;
}
public void PushObj(GameObject obj)
{
poolQueue.Enqueue(obj);
obj.transform.SetParent(fatherObj.transform);
obj.SetActive(false);
}
public GameObject GetObj(Transform parent = null)
{
GameObject go = poolQueue.Dequeue();
go.SetActive(true);
go.transform.SetParent(parent);
if (parent == null)
{
UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(go, UnityEngine.SceneManagement.SceneManager.GetActiveScene());
}
return go;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6793af44177448799777835de5cc4a53
timeCreated: 1710746480

View File

@@ -15,7 +15,7 @@ namespace GameLogic
private Button m_btnRestart;
private Button m_btnHome;
public override void ScriptGenerator()
protected override void ScriptGenerator()
{
m_textScore = FindChildComponent<Text>("ScoreView/m_textScore");
m_goOverView = FindChild("m_goOverView").gameObject;
@@ -27,13 +27,13 @@ namespace GameLogic
#endregion
public override void RegisterEvent()
protected override void RegisterEvent()
{
AddUIEvent<int>(ActorEventDefine.ScoreChange, OnScoreChange);
AddUIEvent(ActorEventDefine.GameOver, OnGameOver);
}
public override void OnRefresh()
protected override void OnRefresh()
{
m_textScore.text = "Score : 0";
m_goOverView.SetActive(false);

View File

@@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.Reflection;
using Cysharp.Threading.Tasks;
using GameBase;
using GameLogic;
using TEngine;
/// <summary>

View File

@@ -3,13 +3,11 @@
"rootNamespace": "GameLogic",
"references": [
"GUID:6055be8ebefd69e48b49212b09b47b2f",
"GUID:15fc0a57446b3144c949da3e2b9737a9",
"GUID:cbb0d51b565003841ae81cdbaf747114",
"GUID:8f58f15387c7a6f4fad9857024eb47f7",
"GUID:24c092aee38482f4e80715eaa8148782",
"GUID:e34a5702dd353724aa315fb8011f08c3",
"GUID:f51ebe6a0ceec4240a699833d6309b23",
"GUID:2b91a2c0e3055f54a8aab905c4163009"
"GUID:e34a5702dd353724aa315fb8011f08c3"
],
"includePlatforms": [],
"excludePlatforms": [],

View File

@@ -2,12 +2,9 @@
"name": "GameProto",
"rootNamespace": "",
"references": [
"GUID:d8b63aba1907145bea998dd612889d6b",
"GUID:cbb0d51b565003841ae81cdbaf747114",
"GUID:24c092aee38482f4e80715eaa8148782",
"GUID:756335c0388f7114790e504ed368ae1d",
"GUID:f51ebe6a0ceec4240a699833d6309b23",
"GUID:e34a5702dd353724aa315fb8011f08c3"
"GUID:f51ebe6a0ceec4240a699833d6309b23"
],
"includePlatforms": [],
"excludePlatforms": [],

View File

@@ -1,11 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace GameProto
{
public class GameProto_Empty
{
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 0bf9618a577c38c40a5ff75c626deb98
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: