mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-07 16:45:10 +00:00
更新demo
更新demo
This commit is contained in:
@@ -171,7 +171,7 @@ namespace GameLogic
|
||||
CurState = false;
|
||||
}
|
||||
|
||||
public override void OnDestroy()
|
||||
protected override void OnDestroy()
|
||||
{
|
||||
RemoveNotifyBind();
|
||||
}
|
||||
|
@@ -516,7 +516,7 @@ namespace GameLogic
|
||||
{
|
||||
if (paramList is { Count: > 0 })
|
||||
{
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -55,7 +55,7 @@ namespace GameLogic
|
||||
}
|
||||
}
|
||||
|
||||
public override void BindMemberProperty()
|
||||
protected override void BindMemberProperty()
|
||||
{
|
||||
m_selectNode = FindChild("SelectNode");
|
||||
m_noSelectNode = FindChild("NoSelectNode");
|
||||
|
@@ -86,7 +86,7 @@ namespace GameLogic
|
||||
{
|
||||
}
|
||||
|
||||
public override void RegisterEvent()
|
||||
protected override void RegisterEvent()
|
||||
{
|
||||
base.RegisterEvent();
|
||||
AddSelectEvt();
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
|
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d21fceb7ec2e3e04ab967b9273644e57
|
||||
guid: 02e23552959dc0e4eaf254fd6c5c21bf
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -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
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6793af44177448799777835de5cc4a53
|
||||
timeCreated: 1710746480
|
@@ -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);
|
||||
|
@@ -2,6 +2,7 @@ using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using GameBase;
|
||||
using GameLogic;
|
||||
using TEngine;
|
||||
|
||||
/// <summary>
|
||||
|
@@ -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": [],
|
||||
|
@@ -2,12 +2,9 @@
|
||||
"name": "GameProto",
|
||||
"rootNamespace": "",
|
||||
"references": [
|
||||
"GUID:d8b63aba1907145bea998dd612889d6b",
|
||||
"GUID:cbb0d51b565003841ae81cdbaf747114",
|
||||
"GUID:24c092aee38482f4e80715eaa8148782",
|
||||
"GUID:756335c0388f7114790e504ed368ae1d",
|
||||
"GUID:f51ebe6a0ceec4240a699833d6309b23",
|
||||
"GUID:e34a5702dd353724aa315fb8011f08c3"
|
||||
"GUID:f51ebe6a0ceec4240a699833d6309b23"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
@@ -1,11 +0,0 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace GameProto
|
||||
{
|
||||
public class GameProto_Empty
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0bf9618a577c38c40a5ff75c626deb98
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -56,8 +56,8 @@ namespace GameMain
|
||||
/// </summary>
|
||||
public static void HideAll()
|
||||
{
|
||||
GameModule.UI.CloseWindow<UILoadTip>();
|
||||
GameModule.UI.CloseWindow<UILoadUpdate>();
|
||||
GameModule.UI.CloseUI<UILoadTip>();
|
||||
GameModule.UI.CloseUI<UILoadUpdate>();
|
||||
}
|
||||
}
|
||||
}
|
@@ -25,7 +25,7 @@ namespace GameMain
|
||||
private Text m_textInfo;
|
||||
private Button m_btnIgnore;
|
||||
private Button m_btnUpdate;
|
||||
public override void ScriptGenerator()
|
||||
protected override void ScriptGenerator()
|
||||
{
|
||||
m_btnPackage = FindChildComponent<Button>("BgImage/m_btnPackage");
|
||||
m_textTittle = FindChildComponent<Text>("BgImage/m_textTittle");
|
||||
@@ -81,8 +81,18 @@ namespace GameMain
|
||||
|
||||
#endregion
|
||||
|
||||
public override void OnRefresh()
|
||||
protected override void OnRefresh()
|
||||
{
|
||||
OnOk = (Action)userDatas[1];
|
||||
OnCancel = (Action)userDatas[2];
|
||||
ShowType = (MessageShowType)userDatas[3];
|
||||
|
||||
var loadStyleUI = gameObject.GetComponent<LoadStyle>();
|
||||
if (loadStyleUI)
|
||||
{
|
||||
loadStyleUI.SetStyle((LoadStyle.StyleEnum)userDatas[4]);
|
||||
}
|
||||
|
||||
base.OnRefresh();
|
||||
m_btnIgnore.gameObject.SetActive(false);
|
||||
m_btnPackage.gameObject.SetActive(false);
|
||||
@@ -121,23 +131,7 @@ namespace GameMain
|
||||
Action onCancel = null,
|
||||
Action onPackage = null)
|
||||
{
|
||||
var operation = GameModule.UI.ShowUI<UILoadTip>(desc);
|
||||
if (operation == null || operation.Window == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var ui = operation.Window as UILoadTip;
|
||||
ui.OnOk = onOk;
|
||||
ui.OnCancel = onCancel;
|
||||
ui.ShowType = showtype;
|
||||
ui.OnRefresh();
|
||||
|
||||
var loadStyleUI = ui.gameObject.GetComponent<LoadStyle>();
|
||||
if (loadStyleUI)
|
||||
{
|
||||
loadStyleUI.SetStyle(style);
|
||||
}
|
||||
GameModule.UI.ShowUI<UILoadTip>(desc,onOk,onCancel,showtype,style);
|
||||
}
|
||||
}
|
||||
}
|
@@ -16,7 +16,7 @@ namespace GameMain
|
||||
private Button m_btnClear;
|
||||
private Text m_textAppid;
|
||||
private Text m_textResid;
|
||||
public override void ScriptGenerator()
|
||||
protected override void ScriptGenerator()
|
||||
{
|
||||
m_imgBackGround = FindChildComponent<Image>("m_imgBackGround");
|
||||
m_textDesc = FindChildComponent<Text>("m_textDesc");
|
||||
@@ -28,7 +28,7 @@ namespace GameMain
|
||||
}
|
||||
#endregion
|
||||
|
||||
public override void OnCreate()
|
||||
protected override void OnCreate()
|
||||
{
|
||||
base.OnCreate();
|
||||
LoadUpdateLogic.Instance.DownloadCompleteAction += DownLoad_Complete_Action;
|
||||
@@ -38,13 +38,13 @@ namespace GameMain
|
||||
m_btnClear.gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
public override void RegisterEvent()
|
||||
protected override void RegisterEvent()
|
||||
{
|
||||
base.RegisterEvent();
|
||||
AddUIEvent(RuntimeId.ToRuntimeId("RefreshVersion"),RefreshVersion);
|
||||
}
|
||||
|
||||
public override void OnRefresh()
|
||||
protected override void OnRefresh()
|
||||
{
|
||||
base.OnRefresh();
|
||||
}
|
||||
@@ -123,7 +123,7 @@ namespace GameMain
|
||||
m_scrollbarProgress.size = progress;
|
||||
}
|
||||
|
||||
public override void OnDestroy()
|
||||
protected override void OnDestroy()
|
||||
{
|
||||
base.OnDestroy();
|
||||
OnStop(null);
|
||||
|
@@ -29,94 +29,113 @@ namespace GameMain
|
||||
|
||||
private async UniTaskVoid InitPackage(ProcedureOwner procedureOwner)
|
||||
{
|
||||
if (GameModule.Resource.PlayMode == EPlayMode.HostPlayMode ||
|
||||
GameModule.Resource.PlayMode == EPlayMode.WebPlayMode)
|
||||
try
|
||||
{
|
||||
if (SettingsUtils.EnableUpdateData())
|
||||
if (GameModule.Resource.PlayMode == EPlayMode.HostPlayMode ||
|
||||
GameModule.Resource.PlayMode == EPlayMode.WebPlayMode)
|
||||
{
|
||||
UpdateData updateData = await RequestUpdateData();
|
||||
|
||||
if (updateData != null)
|
||||
if (SettingsUtils.EnableUpdateData())
|
||||
{
|
||||
if (!string.IsNullOrEmpty(updateData.HostServerURL))
|
||||
{
|
||||
SettingsUtils.FrameworkGlobalSettings.HostServerURL = updateData.HostServerURL;
|
||||
}
|
||||
UpdateData updateData = await RequestUpdateData();
|
||||
|
||||
if (!string.IsNullOrEmpty(updateData.FallbackHostServerURL))
|
||||
if (updateData != null)
|
||||
{
|
||||
SettingsUtils.FrameworkGlobalSettings.FallbackHostServerURL =
|
||||
updateData.FallbackHostServerURL;
|
||||
if (!string.IsNullOrEmpty(updateData.HostServerURL))
|
||||
{
|
||||
SettingsUtils.FrameworkGlobalSettings.HostServerURL = updateData.HostServerURL;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(updateData.FallbackHostServerURL))
|
||||
{
|
||||
SettingsUtils.FrameworkGlobalSettings.FallbackHostServerURL =
|
||||
updateData.FallbackHostServerURL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var initializationOperation = GameModule.Resource.InitPackage();
|
||||
var initializationOperation = await GameModule.Resource.InitPackage();
|
||||
|
||||
await UniTask.Delay(TimeSpan.FromSeconds(1f));
|
||||
|
||||
await initializationOperation.ToUniTask();
|
||||
|
||||
if (initializationOperation.Status == EOperationStatus.Succeed)
|
||||
{
|
||||
//热更新阶段文本初始化
|
||||
LoadText.Instance.InitConfigData(null);
|
||||
|
||||
GameEvent.Send(RuntimeId.ToRuntimeId("RefreshVersion"));
|
||||
|
||||
EPlayMode playMode = GameModule.Resource.PlayMode;
|
||||
|
||||
// 编辑器模式。
|
||||
if (playMode == EPlayMode.EditorSimulateMode)
|
||||
if (initializationOperation.Status == EOperationStatus.Succeed)
|
||||
{
|
||||
Log.Info("Editor resource mode detected.");
|
||||
ChangeState<ProcedurePreload>(procedureOwner);
|
||||
//热更新阶段文本初始化
|
||||
LoadText.Instance.InitConfigData(null);
|
||||
|
||||
GameEvent.Send(RuntimeId.ToRuntimeId("RefreshVersion"));
|
||||
|
||||
EPlayMode playMode = GameModule.Resource.PlayMode;
|
||||
|
||||
// 编辑器模式。
|
||||
if (playMode == EPlayMode.EditorSimulateMode)
|
||||
{
|
||||
Log.Info("Editor resource mode detected.");
|
||||
ChangeState<ProcedurePreload>(procedureOwner);
|
||||
}
|
||||
// 单机模式。
|
||||
else if (playMode == EPlayMode.OfflinePlayMode)
|
||||
{
|
||||
Log.Info("Package resource mode detected.");
|
||||
ChangeState<ProcedureInitResources>(procedureOwner);
|
||||
}
|
||||
// 可更新模式。
|
||||
else if (playMode == EPlayMode.HostPlayMode)
|
||||
{
|
||||
// 打开启动UI。
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate);
|
||||
|
||||
Log.Info("Updatable resource mode detected.");
|
||||
ChangeState<ProcedureUpdateVersion>(procedureOwner);
|
||||
}
|
||||
// 可更新模式。
|
||||
else if (playMode == EPlayMode.WebPlayMode)
|
||||
{
|
||||
Log.Info("WebPlayMode resource mode detected.");
|
||||
ChangeState<ProcedurePreload>(procedureOwner);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error("UnKnow resource mode detected Please check???");
|
||||
}
|
||||
}
|
||||
// 单机模式。
|
||||
else if (playMode == EPlayMode.OfflinePlayMode)
|
||||
{
|
||||
Log.Info("Package resource mode detected.");
|
||||
ChangeState<ProcedureInitResources>(procedureOwner);
|
||||
}
|
||||
// 可更新模式。
|
||||
else if (playMode == EPlayMode.HostPlayMode)
|
||||
else
|
||||
{
|
||||
// 打开启动UI。
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate);
|
||||
|
||||
Log.Info("Updatable resource mode detected.");
|
||||
ChangeState<ProcedureUpdateVersion>(procedureOwner);
|
||||
}
|
||||
// 可更新模式。
|
||||
else if (playMode == EPlayMode.WebPlayMode)
|
||||
{
|
||||
Log.Info("WebPlayMode resource mode detected.");
|
||||
ChangeState<ProcedurePreload>(procedureOwner);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Error("UnKnow resource mode detected Please check???");
|
||||
Log.Error($"{initializationOperation.Error}");
|
||||
|
||||
// 打开启动UI。
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate, $"资源初始化失败!");
|
||||
|
||||
UILoadTip.ShowMessageBox(
|
||||
$"资源初始化失败!点击确认重试 \n \n <color=#FF0000>原因{initializationOperation.Error}</color>",
|
||||
MessageShowType.TwoButton,
|
||||
LoadStyle.StyleEnum.Style_Retry
|
||||
, () => { Retry(procedureOwner); }, UnityEngine.Application.Quit);
|
||||
}
|
||||
}
|
||||
else
|
||||
catch (Exception e)
|
||||
{
|
||||
// 打开启动UI。
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate);
|
||||
|
||||
Log.Error($"{initializationOperation.Error}");
|
||||
|
||||
// 打开启动UI。
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate, $"资源初始化失败!");
|
||||
|
||||
UILoadTip.ShowMessageBox(
|
||||
$"资源初始化失败!点击确认重试 \n \n <color=#FF0000>原因{initializationOperation.Error}</color>",
|
||||
MessageShowType.TwoButton,
|
||||
LoadStyle.StyleEnum.Style_Retry
|
||||
, () => { Retry(procedureOwner); }, UnityEngine.Application.Quit);
|
||||
OnInitPackageFailed(procedureOwner, e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnInitPackageFailed(ProcedureOwner procedureOwner, string message)
|
||||
{
|
||||
// 打开启动UI。
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate);
|
||||
|
||||
Log.Error($"{message}");
|
||||
|
||||
// 打开启动UI。
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate, $"资源初始化失败!");
|
||||
|
||||
UILoadTip.ShowMessageBox($"资源初始化失败!点击确认重试 \n \n <color=#FF0000>原因{message}</color>", MessageShowType.TwoButton,
|
||||
LoadStyle.StyleEnum.Style_Retry
|
||||
, () => { Retry(procedureOwner); },
|
||||
Application.Quit);
|
||||
}
|
||||
|
||||
private void Retry(ProcedureOwner procedureOwner)
|
||||
{
|
||||
// 打开启动UI。
|
||||
|
@@ -2,7 +2,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
#if ENABLE_HYBRIDCLR
|
||||
using HybridCLR;
|
||||
#endif
|
||||
using UnityEngine;
|
||||
using TEngine;
|
||||
using System.Reflection;
|
||||
@@ -15,11 +17,6 @@ namespace GameMain
|
||||
/// </summary>
|
||||
public class ProcedureLoadAssembly : ProcedureBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否需要加载热更新DLL
|
||||
/// </summary>
|
||||
public bool NeedLoadDll => (int)GameModule.Resource.PlayMode > (int)EPlayMode.EditorSimulateMode;
|
||||
|
||||
private bool m_enableAddressable = true;
|
||||
public override bool UseNativeDialog => true;
|
||||
private int m_LoadAssetCount;
|
||||
@@ -59,7 +56,7 @@ namespace GameMain
|
||||
m_LoadMetadataAssemblyComplete = true;
|
||||
}
|
||||
|
||||
if (!NeedLoadDll || GameModule.Resource.PlayMode == EPlayMode.EditorSimulateMode)
|
||||
if (!SettingsUtils.HybridCLRCustomGlobalSettings.Enable || GameModule.Resource.PlayMode == EPlayMode.EditorSimulateMode)
|
||||
{
|
||||
m_MainLogicAssembly = GetMainLogicAssembly();
|
||||
}
|
||||
@@ -81,7 +78,7 @@ namespace GameMain
|
||||
|
||||
Log.Debug($"LoadAsset: [ {assetLocation} ]");
|
||||
m_LoadAssetCount++;
|
||||
GameModule.Resource.LoadAssetAsync<TextAsset>(assetLocation,LoadAssetSuccess);
|
||||
GameModule.Resource.LoadAsset<TextAsset>(assetLocation,LoadAssetSuccess);
|
||||
}
|
||||
|
||||
m_LoadAssemblyWait = true;
|
||||
@@ -141,6 +138,7 @@ namespace GameMain
|
||||
|
||||
private Assembly GetMainLogicAssembly()
|
||||
{
|
||||
m_HotfixAssemblys.Clear();
|
||||
Assembly mainLogicAssembly = null;
|
||||
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
||||
{
|
||||
@@ -170,20 +168,19 @@ namespace GameMain
|
||||
/// <summary>
|
||||
/// 加载代码资源成功回调。
|
||||
/// </summary>
|
||||
/// <param name="assetOperationHandle">资源操作句柄。</param>
|
||||
private void LoadAssetSuccess(AssetOperationHandle assetOperationHandle)
|
||||
/// <param name="textAsset">代码资产。</param>
|
||||
private void LoadAssetSuccess(TextAsset textAsset)
|
||||
{
|
||||
m_LoadAssetCount--;
|
||||
var assetName = assetOperationHandle.AssetObject.name;
|
||||
Log.Debug($"LoadAssetSuccess, assetName: [ {assetName} ]");
|
||||
|
||||
var textAsset = assetOperationHandle.AssetObject as TextAsset;
|
||||
if (textAsset == null)
|
||||
{
|
||||
Log.Warning($"Load text asset [ {assetName} ] failed.");
|
||||
Log.Warning($"Load Assembly failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
var assetName = textAsset.name;
|
||||
Log.Debug($"LoadAssetSuccess, assetName: [ {assetName} ]");
|
||||
|
||||
try
|
||||
{
|
||||
var assembly = Assembly.Load(textAsset.bytes);
|
||||
@@ -204,7 +201,7 @@ namespace GameMain
|
||||
{
|
||||
m_LoadAssemblyComplete = m_LoadAssemblyWait && 0 == m_LoadAssetCount;
|
||||
}
|
||||
assetOperationHandle.Dispose();
|
||||
GameModule.Resource.UnloadAsset(textAsset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -238,7 +235,7 @@ namespace GameMain
|
||||
|
||||
Log.Debug($"LoadMetadataAsset: [ {assetLocation} ]");
|
||||
m_LoadMetadataAssetCount++;
|
||||
GameModule.Resource.LoadAssetAsync<TextAsset>(assetLocation,LoadMetadataAssetSuccess);
|
||||
GameModule.Resource.LoadAsset<TextAsset>(assetLocation,LoadMetadataAssetSuccess);
|
||||
}
|
||||
m_LoadMetadataAssemblyWait = true;
|
||||
}
|
||||
@@ -246,27 +243,29 @@ namespace GameMain
|
||||
/// <summary>
|
||||
/// 加载元数据资源成功回调。
|
||||
/// </summary>
|
||||
/// <param name="assetOperationHandle">资源操作句柄。</param>
|
||||
private unsafe void LoadMetadataAssetSuccess(AssetOperationHandle assetOperationHandle)
|
||||
/// <param name="textAsset">代码资产。</param>
|
||||
private unsafe void LoadMetadataAssetSuccess(TextAsset textAsset)
|
||||
{
|
||||
m_LoadMetadataAssetCount--;
|
||||
string assetName = assetOperationHandle.AssetObject.name;
|
||||
Log.Debug($"LoadMetadataAssetSuccess, assetName: [ {assetName} ]");
|
||||
var textAsset = assetOperationHandle.AssetObject as TextAsset;
|
||||
if (null == textAsset)
|
||||
{
|
||||
Log.Debug($"LoadMetadataAssetSuccess:Load text asset [ {assetName} ] failed.");
|
||||
Log.Debug($"LoadMetadataAssetSuccess:Load Metadata failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
string assetName = textAsset.name;
|
||||
Log.Debug($"LoadMetadataAssetSuccess, assetName: [ {assetName} ]");
|
||||
try
|
||||
{
|
||||
byte[] dllBytes = textAsset.bytes;
|
||||
fixed (byte* ptr = dllBytes)
|
||||
{
|
||||
#if ENABLE_HYBRIDCLR
|
||||
// 加载assembly对应的dll,会自动为它hook。一旦Aot泛型函数的native函数不存在,用解释器版本代码
|
||||
HomologousImageMode mode = HomologousImageMode.SuperSet;
|
||||
LoadImageErrorCode err = (LoadImageErrorCode)HybridCLR.RuntimeApi.LoadMetadataForAOTAssembly(dllBytes,mode);
|
||||
Log.Warning($"LoadMetadataForAOTAssembly:{assetName}. mode:{mode} ret:{err}");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -278,8 +277,8 @@ namespace GameMain
|
||||
finally
|
||||
{
|
||||
m_LoadMetadataAssemblyComplete = m_LoadMetadataAssemblyWait && 0 == m_LoadMetadataAssetCount;
|
||||
|
||||
}
|
||||
GameModule.Resource.UnloadAsset(textAsset);
|
||||
}
|
||||
}
|
||||
}
|
@@ -22,19 +22,24 @@ namespace GameMain
|
||||
|
||||
private readonly bool _needProLoadConfig = true;
|
||||
|
||||
private bool _hadInitConfigXml = false;
|
||||
/// <summary>
|
||||
/// 预加载回调。
|
||||
/// </summary>
|
||||
private LoadAssetCallbacks m_PreLoadAssetCallbacks;
|
||||
|
||||
protected override void OnInit(ProcedureOwner procedureOwner)
|
||||
{
|
||||
base.OnInit(procedureOwner);
|
||||
m_PreLoadAssetCallbacks = new LoadAssetCallbacks(OnPreLoadAssetSuccess, OnPreLoadAssetFailure);
|
||||
}
|
||||
|
||||
|
||||
protected override void OnEnter(ProcedureOwner procedureOwner)
|
||||
{
|
||||
base.OnEnter(procedureOwner);
|
||||
|
||||
_loadedFlag.Clear();
|
||||
|
||||
if (GameModule.Resource.PlayMode == EPlayMode.EditorSimulateMode)
|
||||
{
|
||||
_hadInitConfigXml = true;
|
||||
}
|
||||
|
||||
UILoadMgr.Show(UIDefine.UILoadUpdate, Utility.Text.Format(LoadText.Instance.Label_Load_Load_Progress, 0));
|
||||
|
||||
GameEvent.Send("UILoadUpdate.RefreshVersion");
|
||||
@@ -87,11 +92,6 @@ namespace GameMain
|
||||
return;
|
||||
}
|
||||
|
||||
if (_hadInitConfigXml == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ChangeState<ProcedureLoadAssembly>(procedureOwner);
|
||||
}
|
||||
|
||||
@@ -120,51 +120,44 @@ namespace GameMain
|
||||
{
|
||||
LoadAllConfig();
|
||||
}
|
||||
else
|
||||
{
|
||||
_hadInitConfigXml = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadAllConfig()
|
||||
{
|
||||
if (GameModule.Resource.PlayMode == EPlayMode.EditorSimulateMode)
|
||||
{
|
||||
_hadInitConfigXml = true;
|
||||
return;
|
||||
}
|
||||
AssetInfo[] assetInfos = GameModule.Resource.GetAssetInfos("PRELOAD");
|
||||
foreach (var assetInfo in assetInfos)
|
||||
{
|
||||
LoadConfig(assetInfo.Address);
|
||||
PreLoad(assetInfo.Address);
|
||||
}
|
||||
#if UNITY_WEBGL
|
||||
AssetInfo[] webAssetInfos = GameModule.Resource.GetAssetInfos("WEBGL_PRELOAD");
|
||||
foreach (var assetInfo in webAssetInfos)
|
||||
{
|
||||
LoadConfig(assetInfo.Address);
|
||||
PreLoad(assetInfo.Address);
|
||||
}
|
||||
#endif
|
||||
_hadInitConfigXml = true;
|
||||
}
|
||||
|
||||
private void LoadConfig(string configName)
|
||||
private void PreLoad(string location)
|
||||
{
|
||||
_loadedFlag.Add(configName, false);
|
||||
GameModule.Resource.LoadAssetAsync<TextAsset>(configName, OnLoadSuccess);
|
||||
_loadedFlag.Add(location, false);
|
||||
GameModule.Resource.LoadAssetAsync(location, typeof(UnityEngine.Object), m_PreLoadAssetCallbacks, null);
|
||||
}
|
||||
|
||||
private void OnLoadSuccess(AssetOperationHandle assetOperationHandle)
|
||||
private void OnPreLoadAssetFailure(string assetName, LoadResourceStatus status, string errormessage, object userdata)
|
||||
{
|
||||
if (assetOperationHandle == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var location = assetOperationHandle.GetAssetInfo().Address;
|
||||
_loadedFlag[location] = true;
|
||||
GameModule.Resource.PushPreLoadAsset(location, assetOperationHandle.AssetObject);
|
||||
Log.Info("Load config '{0}' OK.", location);
|
||||
assetOperationHandle.Dispose();
|
||||
Log.Warning("Can not preload asset from '{0}' with error message '{1}'.", assetName, errormessage);
|
||||
_loadedFlag[assetName] = true;
|
||||
}
|
||||
|
||||
private void OnPreLoadAssetSuccess(string assetName, object asset, float duration, object userdata)
|
||||
{
|
||||
Log.Debug("Success preload asset from '{0}' duration '{1}'.", assetName, duration);
|
||||
_loadedFlag[assetName] = true;
|
||||
}
|
||||
}
|
||||
}
|
@@ -10,11 +10,6 @@ namespace GameMain
|
||||
{
|
||||
public override bool UseNativeDialog => true;
|
||||
|
||||
protected override void OnEnter(ProcedureOwner procedureOwner)
|
||||
{
|
||||
base.OnEnter(procedureOwner);
|
||||
}
|
||||
|
||||
protected override void OnUpdate(ProcedureOwner procedureOwner, float elapseSeconds, float realElapseSeconds)
|
||||
{
|
||||
base.OnUpdate(procedureOwner, elapseSeconds, realElapseSeconds);
|
||||
|
Reference in New Issue
Block a user