游戏逻辑循环

This commit is contained in:
yangjing 2022-02-09 19:36:47 +08:00
parent 76925714d9
commit 061937275d
16 changed files with 1985 additions and 925 deletions

View File

@ -46,7 +46,7 @@ ParticleSystem:
cullingMode: 0 cullingMode: 0
ringBufferMode: 0 ringBufferMode: 0
ringBufferLoopRange: {x: 0, y: 1} ringBufferLoopRange: {x: 0, y: 1}
looping: 0 looping: 1
prewarm: 0 prewarm: 0
playOnAwake: 1 playOnAwake: 1
useUnscaledTime: 0 useUnscaledTime: 0

View File

@ -2,7 +2,7 @@
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1107 &-4659606680046192436 --- !u!1107 &-4659606680046192436
AnimatorStateMachine: AnimatorStateMachine:
serializedVersion: 5 serializedVersion: 6
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
@ -11,7 +11,7 @@ AnimatorStateMachine:
m_ChildStates: m_ChildStates:
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 3947085986465062884} m_State: {fileID: 3947085986465062884}
m_Position: {x: 200, y: 0, z: 0} m_Position: {x: 160, y: 260, z: 0}
m_ChildStateMachines: [] m_ChildStateMachines: []
m_AnyStateTransitions: [] m_AnyStateTransitions: []
m_EntryTransitions: [] m_EntryTransitions: []
@ -46,12 +46,12 @@ AnimatorController:
m_Controller: {fileID: 9100000} m_Controller: {fileID: 9100000}
--- !u!1102 &3947085986465062884 --- !u!1102 &3947085986465062884
AnimatorState: AnimatorState:
serializedVersion: 5 serializedVersion: 6
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: clap-stick m_Name: Action
m_Speed: 1 m_Speed: 1
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: [] m_Transitions: []

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -165,12 +165,6 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
mCtnStage: {fileID: 2101175959} mCtnStage: {fileID: 2101175959}
--- !u!224 &464670185 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 6904755265700125195, guid: 6ebd5f76171ee4e0b8d96b2eae97c251,
type: 3}
m_PrefabInstance: {fileID: 3844714965480532569}
m_PrefabAsset: {fileID: 0}
--- !u!1 &493959135 --- !u!1 &493959135
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -311,8 +305,8 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 6858361774777129065} - {fileID: 4946020809530057780}
- {fileID: 464670185} - {fileID: 7676866811056894034}
- {fileID: 987875187} - {fileID: 987875187}
- {fileID: 1714038173902949465} - {fileID: 1714038173902949465}
- {fileID: 923398010} - {fileID: 923398010}
@ -538,9 +532,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 1bdd22e611e6942489e40ead15305a34, type: 3} m_Script: {fileID: 11500000, guid: 1bdd22e611e6942489e40ead15305a34, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
mAudioListener: {fileID: 0}
mMusicPlayer: {fileID: 0}
mSoundPlayer: {fileID: 0}
soundPacks: [] soundPacks: []
--- !u!4 &1345696984 --- !u!4 &1345696984
Transform: Transform:
@ -1030,7 +1021,7 @@ RectTransform:
type: 3} type: 3}
m_PrefabInstance: {fileID: 1203140506473995672} m_PrefabInstance: {fileID: 1203140506473995672}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &3844714965480532569 --- !u!1001 &1969282075732289138
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
@ -1154,7 +1145,13 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6ebd5f76171ee4e0b8d96b2eae97c251, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 6ebd5f76171ee4e0b8d96b2eae97c251, type: 3}
--- !u!1001 &4321345554119791874 --- !u!224 &4946020809530057780 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 6887168216434345711, guid: 841ca4be8d96342da81473d244f04f57,
type: 3}
m_PrefabInstance: {fileID: 5298792260618257231}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &5298792260618257231
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
@ -1353,11 +1350,48 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 841ca4be8d96342da81473d244f04f57, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 841ca4be8d96342da81473d244f04f57, type: 3}
--- !u!224 &6858361774777129065 stripped --- !u!1 &7676866810232408422 stripped
RectTransform: GameObject:
m_CorrespondingSourceObject: {fileID: 6887168216434345711, guid: 841ca4be8d96342da81473d244f04f57, m_CorrespondingSourceObject: {fileID: 6904755265547789119, guid: 6ebd5f76171ee4e0b8d96b2eae97c251,
type: 3} type: 3}
m_PrefabInstance: {fileID: 4321345554119791874} m_PrefabInstance: {fileID: 1969282075732289138}
m_PrefabAsset: {fileID: 0}
--- !u!114 &7676866810232408423
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7676866810232408422}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 791356b2c7d5c444980c1472ffa8f1ff, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!95 &7676866810232408424
Animator:
serializedVersion: 3
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7676866810232408422}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: 7c5794036b4624dd7a0d12e3ceb6bb4a, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorControllerStateOnDisable: 0
--- !u!224 &7676866811056894034 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 6904755265700125195, guid: 6ebd5f76171ee4e0b8d96b2eae97c251,
type: 3}
m_PrefabInstance: {fileID: 1969282075732289138}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &9049642900195122466 --- !u!1001 &9049642900195122466
PrefabInstance: PrefabInstance:

View File

@ -22,6 +22,22 @@ public class LevelData
public string LevelColorCode; public string LevelColorCode;
public int SlotCount; public int SlotCount;
public List<EndingData> Endings; public List<EndingData> Endings;
public EndingData GetMatchingEnding(string pEndingStr)
{
EndingData tData = null;
for (int i = 0; i < Endings.Count; i++)
{
if (Endings[i].IsMatching(pEndingStr))
{
tData = Endings[i];
break;
}
}
return tData;
}
} }
[Serializable] [Serializable]
@ -30,4 +46,37 @@ public class EndingData
public string EndingName;//only for editor display public string EndingName;//only for editor display
public bool IsGoodEnding; public bool IsGoodEnding;
public string EndingCode;//eg: 12X;132; public string EndingCode;//eg: 12X;132;
public bool IsMatching(string pEndingStr)
{
bool tMatching = false;
string[] tTemplateEndingStrs = EndingCode.Split(';');
for (int i = 0; i < tTemplateEndingStrs.Length; i++)
{
if (CompareEndingStr(pEndingStr, tTemplateEndingStrs[i]))
{
tMatching = true;
break;
}
}
return tMatching;
}
private bool CompareEndingStr(string pRefStr, string pTemplateStr)
{
bool tMatching = true;
for (int i = 0; i < pRefStr.Length; i++)
{
if (pTemplateStr[i] != 'X' && pRefStr[i] != pTemplateStr[i])
{
tMatching = false;
break;
}
}
return tMatching;
}
} }

View File

@ -8,6 +8,7 @@ public class GameLogic : MonoBehaviour
private Film mFilm; private Film mFilm;
private int[] mSoundOrder; private int[] mSoundOrder;
private string mEndingStr;
private int mCurIndex; private int mCurIndex;
private void Start() private void Start()
@ -27,26 +28,59 @@ public class GameLogic : MonoBehaviour
{ {
mSoundOrder = pSoundOrder; mSoundOrder = pSoundOrder;
string tOrderStr = ""; mEndingStr = "";
for (int i = 0; i < mSoundOrder.Length; i++) for (int i = 0; i < mSoundOrder.Length; i++)
{ {
tOrderStr += (mSoundOrder[i] + 1).ToString(); mEndingStr += (mSoundOrder[i] + 1).ToString();
if (i < mSoundOrder.Length - 1) if (i < mSoundOrder.Length - 1)
{ {
tOrderStr += "_"; mEndingStr += "_";
} }
} }
mFilm.PlayScene(tOrderStr); mFilm.PlayScene(mEndingStr);
mCurIndex = 0; mCurIndex = 0;
AudioManager.Instance.PlaySound(ResourceManager.Instance.LoadRes<AudioClip>(Const.Path.GetSound(PlayerData.Instance.CurrentLevelID, mSoundOrder[mCurIndex]))); AudioManager.Instance.PlaySound(ResourceManager.Instance.LoadRes<AudioClip>(Const.Path.GetSound(PlayerData.Instance.CurrentLevelID, mSoundOrder[mCurIndex])));
TimerManager.Instance.Schedule(PlaySound, 1.5f, mSoundOrder.Length - 1); TimerManager.Instance.Schedule(PlaySound, 1.5f, mSoundOrder.Length);
} }
private void PlaySound() private void PlaySound()
{ {
mCurIndex++; mCurIndex++;
if (mCurIndex < mSoundOrder.Length)
{
AudioManager.Instance.PlaySound(ResourceManager.Instance.LoadRes<AudioClip>(Const.Path.GetSound(PlayerData.Instance.CurrentLevelID, mSoundOrder[mCurIndex]))); AudioManager.Instance.PlaySound(ResourceManager.Instance.LoadRes<AudioClip>(Const.Path.GetSound(PlayerData.Instance.CurrentLevelID, mSoundOrder[mCurIndex])));
} }
else
{
//end
LevelData tLvData = GameConfig.Instance.GetLevelData(PlayerData.Instance.CurrentLevelID);
EndingData tEdData = tLvData.GetMatchingEnding(mEndingStr.Replace("_",""));
UIManager.Instance.CloseUI<PanelGame>();
PanelResult tUIResult = UIManager.Instance.OpenUI<PanelResult>();
if (tEdData != null)
{
tUIResult.Init(tEdData.EndingName, tEdData.IsGoodEnding, false);
}
else
{
tUIResult.Init("", false, false);
}
tUIResult.DelAgain = PlayAgain;
}
}
private void PlayAgain()
{
UIManager.Instance.CloseUI<PanelResult>();
PanelGame tUIGame = UIManager.Instance.OpenUI<PanelGame>();
tUIGame.Init();
mFilm.PlayScene("0");
}
} }

View File

@ -0,0 +1,17 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : D_MonoSingleton<GameManager>
{
public void LoadMain()
{
SceneManager.LoadScene("Main");
}
public void LoadGame()
{
SceneManager.LoadScene("Game");
}
}

View File

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

View File

@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using DG.Tweening;
public class PanelGame : BasePanel public class PanelGame : BasePanel
{ {
@ -23,10 +24,15 @@ public class PanelGame : BasePanel
[SerializeField] GameObject mGobPlayProgress; [SerializeField] GameObject mGobPlayProgress;
[SerializeField] Image mImgPlayProgress; [SerializeField] Image mImgPlayProgress;
[SerializeField] Animator mAtrAction;
[SerializeField] GameObject mGobOpMask;
private int mTotalSlot; private int mTotalSlot;
private int mCurSlotIndex; private int mCurSlotIndex;
private int[] mSoundOrder; private int[] mSoundOrder;
private PanelGameAni mAni;
private void Awake() private void Awake()
{ {
UIUtils.BindBtn(mBtnLevel, OnClickLevel); UIUtils.BindBtn(mBtnLevel, OnClickLevel);
@ -34,6 +40,8 @@ public class PanelGame : BasePanel
UIUtils.BindBtn(mBtnPlay, OnClickPlay); UIUtils.BindBtn(mBtnPlay, OnClickPlay);
mBtnEndings.DelClick = OnClickEndings; mBtnEndings.DelClick = OnClickEndings;
mAni = GetComponent<PanelGameAni>();
} }
public void Init() public void Init()
@ -70,6 +78,13 @@ public class PanelGame : BasePanel
mBtnSounds[i].SetSoundPic(ResourceManager.Instance.LoadRes<Sprite>(Const.Path.GetSoundPic(PlayerData.Instance.CurrentLevelID, i))); mBtnSounds[i].SetSoundPic(ResourceManager.Instance.LoadRes<Sprite>(Const.Path.GetSoundPic(PlayerData.Instance.CurrentLevelID, i)));
mBtnSounds[i].DelClick = OnClickSound; mBtnSounds[i].DelClick = OnClickSound;
} }
mGobPlay.SetActive(false);
mGobPlayProgress.SetActive(false);
mAtrAction.gameObject.SetActive(false);
mGobOpMask.SetActive(false);
mAni.Init();
} }
private void OnClickLevel() private void OnClickLevel()
@ -88,10 +103,29 @@ public class PanelGame : BasePanel
} }
private void OnClickPlay() private void OnClickPlay()
{
mGobPlay.SetActive(false);
mGobOpMask.SetActive(true);
mAni.ReadyPlay(0.5f);
TimerManager.Instance.Schedule(Action, 0.5f);
}
private void Action()
{
mAtrAction.gameObject.SetActive(true);
mAtrAction.Play("Action");
TimerManager.Instance.Schedule(StartPlay, 1.5f);
}
private void StartPlay()
{ {
DelPlay?.Invoke(mSoundOrder); DelPlay?.Invoke(mSoundOrder);
mGobPlay.SetActive(false); mGobPlayProgress.SetActive(true);
mImgPlayProgress.fillAmount = 0;
mImgPlayProgress.DOFillAmount(1, mSoundOrder.Length * 1.5f).SetEase(Ease.Linear);
} }
private void OnClickSlot(int pIndex) private void OnClickSlot(int pIndex)

View File

@ -0,0 +1,45 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class PanelGameAni : MonoBehaviour
{
[SerializeField] RectTransform mRctTop;
[SerializeField] RectTransform mRctCenter;
[SerializeField] RectTransform mRctEndingsBtn;
[SerializeField] RectTransform mRctSlotBG;
[SerializeField] RectTransform mRctSlotBtns;
[SerializeField] RectTransform mRctSoundBtns;
public void Init()
{
mRctTop.anchoredPosition = new Vector2(0, 180);
mRctCenter.anchoredPosition = new Vector2(0, -560);
mRctEndingsBtn.anchoredPosition = new Vector2(100, -235);
mRctSlotBG.anchoredPosition = new Vector2(0, -125);
mRctSlotBG.sizeDelta = new Vector2(mRctSlotBG.sizeDelta.x, 249);
mRctSlotBtns.anchoredPosition = new Vector2(0, -305);
mRctSoundBtns.anchoredPosition = new Vector2(0, -470);
mRctTop.DOAnchorPosY(0, 0.5f);
mRctCenter.DOAnchorPosY(0, 0.5f);
mRctEndingsBtn.DOAnchorPosX(-10, 0.3f).SetDelay(0.5f);
}
public void ReadyPlay(float pDuration)
{
mRctSlotBG.DOAnchorPosY(-180, pDuration);
mRctSlotBG.DOSizeDelta(new Vector2(mRctSlotBG.sizeDelta.x, 395), pDuration);
mRctSlotBtns.DOAnchorPosY(-390, pDuration);
mRctSoundBtns.DOAnchorPosY(-680, pDuration);
}
}

View File

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

View File

@ -0,0 +1,72 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PanelResult : BasePanel
{
public Action DelAgain;
[SerializeField] Text mTxtEndingName;
[SerializeField] GameObject mGobWinTitle;
[SerializeField] GameObject mGobLoseTitle;
[SerializeField] GameObject mGobWinFace;
[SerializeField] GameObject mGobLoseFace;
[SerializeField] GameObject mGobWinBtns;
[SerializeField] GameObject mGobOtherBtns;
[SerializeField] Button mBtnAgain1;
[SerializeField] Button mBtnAgain2;
[SerializeField] Button mBtnNext;
[SerializeField] Button mBtnChoose;
[SerializeField] ButtonEndings mBtnEndings;
private void Awake()
{
UIUtils.BindBtn(mBtnAgain1, OnClickAgain);
UIUtils.BindBtn(mBtnAgain2, OnClickAgain);
UIUtils.BindBtn(mBtnNext, OnClickNext);
UIUtils.BindBtn(mBtnChoose, OnClickChoose);
mBtnEndings.DelClick = OnClickEndings;
}
public void Init(string pEndingName,bool pIsWin, bool pAllLevelClear)
{
mTxtEndingName.text = pEndingName;
mGobWinTitle.SetActive(pIsWin);
mGobLoseTitle.SetActive(!pIsWin);
mGobWinFace.SetActive(pIsWin);
mGobLoseFace.SetActive(!pIsWin);
mGobWinBtns.SetActive(!pAllLevelClear && pIsWin);
mGobOtherBtns.SetActive(pAllLevelClear || !pIsWin);
}
private void OnClickAgain()
{
DelAgain?.Invoke();
}
private void OnClickNext()
{
GameManager.Instance.LoadGame();
}
private void OnClickChoose()
{
}
private void OnClickEndings()
{
}
}

View File

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

View File

@ -0,0 +1,49 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Image))]
public class ImageFrameAni : MonoBehaviour
{
[SerializeField] Sprite[] mSprFrames;
[SerializeField] int mFrameRate = 30;
[SerializeField] bool mIsPlaying = true;
private Image mImg;
private int mCurIndex;
private float mDelta;
private float mTimer;
private void Awake()
{
mImg = GetComponent<Image>();
}
private void Start()
{
mDelta = 1.0f / mFrameRate;
mTimer = mDelta;
mCurIndex = 0;
mImg.sprite = mSprFrames[mCurIndex];
}
private void Update()
{
if (mSprFrames.Length > 0 && mIsPlaying)
{
mTimer -= Time.deltaTime;
if (mTimer <= 0)
{
mCurIndex = (mCurIndex + 1) % mSprFrames.Length;
mImg.sprite = mSprFrames[mCurIndex];
mTimer = mDelta;
}
}
}
}

View File

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