浏览代码

Use the state machine to change Game State to and from Combat

/main
uChema 3 年前
当前提交
3faf99a1
共有 26 个文件被更改,包括 241 次插入2 次删除
  1. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Alert.asset
  2. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Dying.asset
  3. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Fighting.asset
  4. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Idle.asset
  5. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/Actions/ChasingTargetAction.asset
  6. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Alert.asset
  7. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Dying.asset
  8. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Idle.asset
  9. 1
      UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Roaming.asset
  10. 4
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ChasingTargetActionSO.cs
  11. 25
      UOP1_Project/Assets/Scripts/Gameplay/GameStateSO.cs
  12. 2
      UOP1_Project/Assets/Scripts/StateMachine/Debugging/StateMachineDebugger.cs
  13. 8
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState.meta
  14. 76
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ChangeGameStateActionSO.cs
  15. 11
      UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ChangeGameStateActionSO.cs.meta
  16. 8
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions.meta
  17. 17
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnEnter.asset
  18. 8
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnEnter.asset.meta
  19. 17
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnExit.asset
  20. 8
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnExit.asset.meta
  21. 17
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnEnter.asset
  22. 8
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnEnter.asset.meta
  23. 17
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnExit.asset
  24. 8
      UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnExit.asset.meta

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Alert.asset


_actions:
- {fileID: 11400000, guid: 4b49e9d3d876bba458ffce6292758942, type: 2}
- {fileID: 11400000, guid: b3e528708050add49837de9f6a3d6b48, type: 2}
- {fileID: 11400000, guid: cb39249adcc9b7048993808ba9aa4d92, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Dying.asset


_actions:
- {fileID: 11400000, guid: 0b27e7b7a119315429d153652b19d7ba, type: 2}
- {fileID: 11400000, guid: 3df03613ad6365246bd2d591eddabc10, type: 2}
- {fileID: 11400000, guid: cb39249adcc9b7048993808ba9aa4d92, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Fighting.asset


m_EditorClassIdentifier:
_actions:
- {fileID: 11400000, guid: 4b49e9d3d876bba458ffce6292758942, type: 2}
- {fileID: 11400000, guid: 19db8963f6fcdb74ea7f0f13ef76d687, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/PlantCritter/States/Idle.asset


m_EditorClassIdentifier:
_actions:
- {fileID: 11400000, guid: 5cc2ce97159d08647a4577ccf90bd204, type: 2}
- {fileID: 11400000, guid: cb39249adcc9b7048993808ba9aa4d92, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/Actions/ChasingTargetAction.asset


m_EditorClassIdentifier:
_targetTransform: {fileID: 11400000, guid: 35fc4039342b6ba458d0d4429e89ee74, type: 2}
_chasingSpeed: 2
_gameState: {fileID: 11400000, guid: 159f9c22d98e249ceb08f2c5de2311a4, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Alert.asset


- {fileID: 11400000, guid: b3e528708050add49837de9f6a3d6b48, type: 2}
- {fileID: 11400000, guid: 46af8bb2ed6efed4ab26d05dfc1b560f, type: 2}
- {fileID: 11400000, guid: 865756d55a4aa2644be7ab9959c408fb, type: 2}
- {fileID: 11400000, guid: 19db8963f6fcdb74ea7f0f13ef76d687, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Dying.asset


- {fileID: 11400000, guid: 0b27e7b7a119315429d153652b19d7ba, type: 2}
- {fileID: 11400000, guid: 3df03613ad6365246bd2d591eddabc10, type: 2}
- {fileID: 11400000, guid: 071fecb332ceabb4ba338d86d34759ac, type: 2}
- {fileID: 11400000, guid: cb39249adcc9b7048993808ba9aa4d92, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Idle.asset


- {fileID: 11400000, guid: 5cc2ce97159d08647a4577ccf90bd204, type: 2}
- {fileID: 11400000, guid: d33b24ef9d2a6ac4fb91c11c189b81f2, type: 2}
- {fileID: 11400000, guid: 071fecb332ceabb4ba338d86d34759ac, type: 2}
- {fileID: 11400000, guid: cb39249adcc9b7048993808ba9aa4d92, type: 2}

1
UOP1_Project/Assets/ScriptableObjects/StateMachine/Critters/SlimeRockCritter/States/Roaming.asset


_actions:
- {fileID: 11400000, guid: 46af8bb2ed6efed4ab26d05dfc1b560f, type: 2}
- {fileID: 11400000, guid: 976208a7240935042a5f8bbcb0d35914, type: 2}
- {fileID: 11400000, guid: cb39249adcc9b7048993808ba9aa4d92, type: 2}

4
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ChasingTargetActionSO.cs


private NavMeshAgent _agent;
private bool _isActiveAgent;
public override void Awake(StateMachine stateMachine)
{
_config = (ChasingTargetActionSO)OriginSO;

_agent.speed = _config.ChasingSpeed;
}
}
}

25
UOP1_Project/Assets/Scripts/Gameplay/GameStateSO.cs


private GameState _currentGameState = default;
private GameState _previousGameState = default;
public GameState CurrentGameState => _currentGameState;
List<Transform> _enemiesInCombat = new List<Transform>();
public void ChangeStateToCombat(Transform enemy)
{
if (!_enemiesInCombat.Exists(o => o == enemy))
{
_enemiesInCombat.Add(enemy);
}
UpdateGameState(GameState.Combat);
}
public void ChangeStateFromCombat(Transform enemy)
{
if (_enemiesInCombat.Exists(o => o == enemy))
{
_enemiesInCombat.Remove(enemy);
}
if (_enemiesInCombat.Count > 0)
{
UpdateGameState(GameState.Combat);
}
else
{
UpdateGameState(GameState.Gameplay);
}
}
public void UpdateGameState(GameState newGameState)
{
if (newGameState != CurrentGameState)

}
}
public void ResetToPreviousGameState()
{

2
UOP1_Project/Assets/Scripts/StateMachine/Debugging/StateMachineDebugger.cs


_logBuilder.AppendLine();
_logBuilder.Append("--------------------------------");
Debug.Log(_logBuilder.ToString());
// Debug.Log(_logBuilder.ToString());
}
}
}

8
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState.meta


fileFormatVersion: 2
guid: 670daf1e45193284cae64af901f60ddd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

76
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ChangeGameStateActionSO.cs


using UnityEngine;
using UOP1.StateMachine;
using UOP1.StateMachine.ScriptableObjects;
using Moment = UOP1.StateMachine.StateAction.SpecificMoment;
/// <summary>
/// This Action handles horizontal movement while in the air, keeping momentum, simulating air resistance, and accelerating towards the desired speed.
/// </summary>
[CreateAssetMenu(fileName = "ChangeGameState", menuName = "State Machines/Actions/Change GameState")]
public class ChangeGameStateActionSO : StateActionSO
{
public GameState NewGameState => _newGameState;
[Tooltip("GameState to change to")]
[SerializeField] GameState _newGameState = default;
[SerializeField] Moment _whenToRun = default;
[SerializeField] private GameStateSO _gameState = default;
protected override StateAction CreateAction() => new ChangeGameStateAction(_newGameState, _gameState, _whenToRun);
}
public class ChangeGameStateAction : StateAction
{
[Tooltip("GameState to change to")]
private GameState _newGameState = default;
private GameStateSO _gameStateSO = default;
private Moment _whenToRun = default;
public ChangeGameStateAction()
{
}
public ChangeGameStateAction(GameState newGameState, GameStateSO gameStateSO, Moment whenToRun)
{
_newGameState = newGameState;
_gameStateSO = gameStateSO;
_whenToRun = whenToRun;
}
Transform _transform = default;
public override void Awake(StateMachine stateMachine)
{
_transform = stateMachine.transform;
}
void ChangeState()
{
switch (_newGameState)
{
case GameState.Combat:
_gameStateSO.ChangeStateToCombat(_transform);
break;
case GameState.Gameplay:
_gameStateSO.ChangeStateFromCombat(_transform);
break;
default:
_gameStateSO.UpdateGameState(_newGameState);
break;
}
}
public override void OnStateEnter()
{
if (_whenToRun == Moment.OnStateEnter)
ChangeState();
}
public override void OnStateExit()
{
if (_whenToRun == Moment.OnStateExit)
ChangeState();
}
public override void OnUpdate()
{
}
}

11
UOP1_Project/Assets/Scripts/Characters/StateMachine/Actions/ChangeGameStateActionSO.cs.meta


fileFormatVersion: 2
guid: 3be03a75143f41647ac5a3e0f60e7462
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

8
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions.meta


fileFormatVersion: 2
guid: 478e7bbbdfb8d7a4dac3fee0f6e0a288
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

17
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnEnter.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3be03a75143f41647ac5a3e0f60e7462, type: 3}
m_Name: ChangeGameStateToCombatOnEnter
m_EditorClassIdentifier:
_newGameState: 6
_whenToRun: 0
_gameState: {fileID: 11400000, guid: 159f9c22d98e249ceb08f2c5de2311a4, type: 2}

8
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnEnter.asset.meta


fileFormatVersion: 2
guid: 19db8963f6fcdb74ea7f0f13ef76d687
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

17
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnExit.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3be03a75143f41647ac5a3e0f60e7462, type: 3}
m_Name: ChangeGameStateToCombatOnExit
m_EditorClassIdentifier:
_newGameState: 6
_whenToRun: 1
_gameState: {fileID: 11400000, guid: 159f9c22d98e249ceb08f2c5de2311a4, type: 2}

8
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToCombatOnExit.asset.meta


fileFormatVersion: 2
guid: 47db69ce0da162640b18df6746b79cf0
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

17
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnEnter.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3be03a75143f41647ac5a3e0f60e7462, type: 3}
m_Name: ChangeGameStateToGamePlayOnEnter
m_EditorClassIdentifier:
_newGameState: 0
_whenToRun: 0
_gameState: {fileID: 11400000, guid: 159f9c22d98e249ceb08f2c5de2311a4, type: 2}

8
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnEnter.asset.meta


fileFormatVersion: 2
guid: cb39249adcc9b7048993808ba9aa4d92
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

17
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnExit.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3be03a75143f41647ac5a3e0f60e7462, type: 3}
m_Name: ChangeGameStateToGamePlayOnExit
m_EditorClassIdentifier:
_newGameState: 0
_whenToRun: 1
_gameState: {fileID: 11400000, guid: 159f9c22d98e249ceb08f2c5de2311a4, type: 2}

8
UOP1_Project/Assets/ScriptableObjects/StateMachine/GameState/Actions/ChangeGameStateToGamePlayOnExit.asset.meta


fileFormatVersion: 2
guid: 56c86f11cbcd0b04b8882a1ff5391094
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
正在加载...
取消
保存