調理シーンの兄弟アニメ対応

This commit is contained in:
kimura 2021-12-10 11:26:56 +09:00
parent c5a99131aa
commit 4d4c4da244
5 changed files with 153 additions and 30 deletions

View File

@ -91,13 +91,19 @@ AnimatorController:
m_DefaultFloat: 0 m_DefaultFloat: 0
m_DefaultInt: 0 m_DefaultInt: 0
m_DefaultBool: 0 m_DefaultBool: 0
m_Controller: {fileID: 9100000} m_Controller: {fileID: 0}
- m_Name: Normal - m_Name: Normal
m_Type: 9 m_Type: 9
m_DefaultFloat: 0 m_DefaultFloat: 0
m_DefaultInt: 0 m_DefaultInt: 0
m_DefaultBool: 0 m_DefaultBool: 0
m_Controller: {fileID: 9100000} m_Controller: {fileID: 0}
- m_Name: Flame
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_AnimatorLayers: m_AnimatorLayers:
- serializedVersion: 5 - serializedVersion: 5
m_Name: Base Layer m_Name: Base Layer
@ -176,7 +182,7 @@ AnimatorStateMachine:
m_Position: {x: 250, y: -10, z: 0} m_Position: {x: 250, y: -10, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: -6981161888748237111} m_State: {fileID: -6981161888748237111}
m_Position: {x: 240, y: 110, z: 0} m_Position: {x: 310, y: 80, z: 0}
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 3909174915482303229} m_State: {fileID: 3909174915482303229}
m_Position: {x: 275, y: 175, z: 0} m_Position: {x: 275, y: 175, z: 0}
@ -184,6 +190,7 @@ AnimatorStateMachine:
m_AnyStateTransitions: m_AnyStateTransitions:
- {fileID: 871869168590934795} - {fileID: 871869168590934795}
- {fileID: -6968845174723350288} - {fileID: -6968845174723350288}
- {fileID: 6228895696704337158}
m_EntryTransitions: [] m_EntryTransitions: []
m_StateMachineTransitions: {} m_StateMachineTransitions: {}
m_StateMachineBehaviours: [] m_StateMachineBehaviours: []
@ -192,3 +199,28 @@ AnimatorStateMachine:
m_ExitPosition: {x: 800, y: 120, z: 0} m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: -5348363866995552689} m_DefaultState: {fileID: -5348363866995552689}
--- !u!1101 &6228895696704337158
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Flame
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3909174915482303229}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1

View File

@ -26,6 +26,7 @@ AnimatorStateMachine:
- {fileID: -5209310951543379251} - {fileID: -5209310951543379251}
- {fileID: 1703827808131827942} - {fileID: 1703827808131827942}
- {fileID: -6918687918940225781} - {fileID: -6918687918940225781}
- {fileID: 418725440919557013}
m_EntryTransitions: [] m_EntryTransitions: []
m_StateMachineTransitions: {} m_StateMachineTransitions: {}
m_StateMachineBehaviours: [] m_StateMachineBehaviours: []
@ -176,19 +177,25 @@ AnimatorController:
m_DefaultFloat: 0 m_DefaultFloat: 0
m_DefaultInt: 0 m_DefaultInt: 0
m_DefaultBool: 0 m_DefaultBool: 0
m_Controller: {fileID: 9100000} m_Controller: {fileID: 0}
- m_Name: Walk - m_Name: Walk
m_Type: 9 m_Type: 9
m_DefaultFloat: 0 m_DefaultFloat: 0
m_DefaultInt: 0 m_DefaultInt: 0
m_DefaultBool: 0 m_DefaultBool: 0
m_Controller: {fileID: 9100000} m_Controller: {fileID: 0}
- m_Name: Sleep - m_Name: Sleep
m_Type: 9 m_Type: 9
m_DefaultFloat: 0 m_DefaultFloat: 0
m_DefaultInt: 0 m_DefaultInt: 0
m_DefaultBool: 0 m_DefaultBool: 0
m_Controller: {fileID: 9100000} m_Controller: {fileID: 0}
- m_Name: Vitality
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 0}
m_AnimatorLayers: m_AnimatorLayers:
- serializedVersion: 5 - serializedVersion: 5
m_Name: Base Layer m_Name: Base Layer
@ -202,6 +209,31 @@ AnimatorController:
m_IKPass: 0 m_IKPass: 0
m_SyncedLayerAffectsTiming: 0 m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000} m_Controller: {fileID: 9100000}
--- !u!1101 &418725440919557013
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: Vitality
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -2896776327676832643}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &1480020873699022687 --- !u!1102 &1480020873699022687
AnimatorState: AnimatorState:
serializedVersion: 5 serializedVersion: 5

View File

@ -5151,6 +5151,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 9b3b578c8a46648248e58adb3ee9caba, type: 3} m_Script: {fileID: 11500000, guid: 9b3b578c8a46648248e58adb3ee9caba, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
livelyRate: 7
refreshRewardCoin: 100 refreshRewardCoin: 100
cookingButton: {fileID: 414580708} cookingButton: {fileID: 414580708}
adButton: {fileID: 445566315} adButton: {fileID: 445566315}
@ -5185,7 +5186,8 @@ MonoBehaviour:
blueBrotherAnimator: {fileID: 1124341218} blueBrotherAnimator: {fileID: 1124341218}
pinkBrotherAnimator: {fileID: 519190656} pinkBrotherAnimator: {fileID: 519190656}
pinkTransform: {fileID: 519190655} pinkTransform: {fileID: 519190655}
pinkWalkspeed: 0.8 pinkWalkSpeed: 0.8
pinkLivelySpeed: 1
--- !u!1 &1906074463 --- !u!1 &1906074463
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -12,6 +12,8 @@ using UnityEngine.UI;
public class KitchenManager : MonoBehaviour public class KitchenManager : MonoBehaviour
{ {
private static readonly double refreshWaitTime = 300; private static readonly double refreshWaitTime = 300;
[Range(0, 9)]
[SerializeField] private int livelyRate = 7;
[SerializeField] int refreshRewardCoin = 100; [SerializeField] int refreshRewardCoin = 100;
[SerializeField] private Button cookingButton; [SerializeField] private Button cookingButton;
[SerializeField] private Button adButton; [SerializeField] private Button adButton;
@ -19,6 +21,7 @@ public class KitchenManager : MonoBehaviour
[SerializeField] private BulkOrderIndicatorView orderIndicatorView; [SerializeField] private BulkOrderIndicatorView orderIndicatorView;
private readonly Subject<Unit> showAdDialogSubject = new Subject<Unit>(); private readonly Subject<Unit> showAdDialogSubject = new Subject<Unit>();
IDisposable timerDisposable = null;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
@ -108,41 +111,65 @@ public class KitchenManager : MonoBehaviour
{ {
CoinGetDialog.ShowDialog(refreshRewardCoin, () => CoinGetDialog.ShowDialog(refreshRewardCoin, () =>
{ {
adButton.gameObject.SetActive(false);
kitchenView.SetNormalAnimation();
CoinManager.Instance.AddCoin(refreshRewardCoin); CoinManager.Instance.AddCoin(refreshRewardCoin);
gameData.Coin = CoinManager.Instance.OwnCoin; gameData.Coin = CoinManager.Instance.OwnCoin;
gameData.kitchenRefreshTime = DateTime.UtcNow.AddSeconds(refreshWaitTime).ToBinary(); gameData.kitchenRefreshTime = DateTime.UtcNow.AddSeconds(refreshWaitTime).ToBinary();
GameDataManager.SaveGameData(); GameDataManager.SaveGameData();
// SetTimer((int)refreshWaitTime);
adButton.gameObject.SetActive(false);
if (gameData.kitchenRefreshTime % 10 < livelyRate)
{
kitchenView.SetLivelyAnimation();
}
else
{
kitchenView.SetNormalAnimation();
}
}); });
}); });
}).AddTo(this); }).AddTo(this);
// 休憩リワード // 休憩リワード
var remaining = (int) DateTime.FromBinary(gameData.kitchenRefreshTime).Subtract(DateTime.UtcNow).TotalSeconds; var remaining = (int) DateTime.FromBinary(gameData.kitchenRefreshTime).Subtract(DateTime.UtcNow).TotalSeconds;
// timerDisposable = SetTimer(remaining);
// 商品在庫計算 // 商品在庫計算
var shopStock = gameData.ShopStock.Count; var shopStock = gameData.ShopStock.Count;
var tankStock = gameData.StorageTanks.Sum(x => x.Stock); var tankStock = gameData.StorageTanks.Sum(x => x.Stock);
var totalStock = shopStock + tankStock; var totalStock = shopStock + tankStock;
if (gameData.Coin + gameData.Material.Sum(data => data.Amount) + totalStock == 0) if (remaining <= 0 && gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay))
{
// コイン獲得有効
adButton.gameObject.SetActive(true);
kitchenView.SetNormalAnimation();
}
else if (gameData.Coin + gameData.Material.Sum(data => data.Amount) + totalStock == 0)
{ {
// 所持金0救済 // 所持金0救済
adButton.gameObject.SetActive(true); adButton.gameObject.SetActive(true);
kitchenView.SetTiredAnimation(); kitchenView.SetNormalAnimation();
showAdDialogSubject.OnNext(Unit.Default); showAdDialogSubject.OnNext(Unit.Default);
} }
else if (remaining > 0 || !gameData.FinishedFlags.HasFlag(TutorialFlag.FirstPlay)) else if (remaining > 0)
{ {
// 獲得後
adButton.gameObject.SetActive(false); adButton.gameObject.SetActive(false);
kitchenView.SetNormalAnimation(); if (gameData.kitchenRefreshTime % 10 < livelyRate)
{
kitchenView.SetLivelyAnimation();
}
else
{
kitchenView.SetNormalAnimation();
}
} }
else else
{ {
adButton.gameObject.SetActive(true); // 獲得無効
kitchenView.SetTiredAnimation(); adButton.gameObject.SetActive(false);
kitchenView.SetNormalAnimation();
} }
#if UNITY_EDITOR #if UNITY_EDITOR
Debug.Log($"remaining: {remaining}"); Debug.Log($"remaining: {remaining}");
@ -293,6 +320,20 @@ public class KitchenManager : MonoBehaviour
return (condition <= gameData.OrderConditionCount, nextOrderId, nextOrderLevel); return (condition <= gameData.OrderConditionCount, nextOrderId, nextOrderLevel);
} }
private IDisposable SetTimer(int time)
{
timerDisposable?.Dispose();
return Observable.Timer(TimeSpan.Zero,TimeSpan.FromSeconds(1f))
.Select(x => (int)(time - x))
.TakeWhile(x => x > 0)
.Subscribe(x => { }
, () =>
{
kitchenView.SetNormalAnimation();
adButton.gameObject.SetActive(true);
}).AddTo(this);
}
private void OnDestroy() private void OnDestroy()
{ {
if (SoundManager.ExistsInstance) if (SoundManager.ExistsInstance)

View File

@ -8,14 +8,17 @@ public class KitchenView : MonoBehaviour
// blue // blue
private static readonly int Normal = Animator.StringToHash("Normal"); private static readonly int Normal = Animator.StringToHash("Normal");
private static readonly int Tired = Animator.StringToHash("Tired"); private static readonly int Tired = Animator.StringToHash("Tired");
private static readonly int Flame = Animator.StringToHash("Flame");
// pink // pink
private static readonly int Walk = Animator.StringToHash("Walk"); private static readonly int Walk = Animator.StringToHash("Walk");
private static readonly int Stay = Animator.StringToHash("Stay"); private static readonly int Stay = Animator.StringToHash("Stay");
private static readonly int Sleep = Animator.StringToHash("Sleep"); private static readonly int Sleep = Animator.StringToHash("Sleep");
private static readonly int Vitality = Animator.StringToHash("Vitality");
[SerializeField] private Animator blueBrotherAnimator; [SerializeField] private Animator blueBrotherAnimator;
[SerializeField] private Animator pinkBrotherAnimator; [SerializeField] private Animator pinkBrotherAnimator;
[SerializeField] private Transform pinkTransform; [SerializeField] private Transform pinkTransform;
[SerializeField] private float pinkWalkspeed = .8f; [SerializeField] private float pinkWalkSpeed = .8f;
[SerializeField] private float pinkLivelySpeed = .8f;
private readonly (int trigger, Vector2 wayPoint, float wait)[] pinkMoves = private readonly (int trigger, Vector2 wayPoint, float wait)[] pinkMoves =
{ {
(Walk, new Vector2(3.28f,0.726f), 0f), (Walk, new Vector2(3.28f,0.726f), 0f),
@ -27,22 +30,27 @@ public class KitchenView : MonoBehaviour
(Walk, new Vector2(0f,0.726f), 0f), (Walk, new Vector2(0f,0.726f), 0f),
(Stay, new Vector2(0f,0.726f), 3f), (Stay, new Vector2(0f,0.726f), 3f),
}; };
private readonly (int trigger, Vector2 wayPoint, float wait)[] livelyPinkMoves =
{
(Vitality, new Vector2(3.28f,0.726f), 0f),
(Vitality, new Vector2(-3.28f,0.726f), 0f),
};
private int moveIndex; private int moveIndex;
private Vector2 wayPoint; private Vector2 wayPoint;
private float durationDelta; private float durationDelta;
private float completedDuration; private float completedDuration;
private bool isTired; private bool isLively;
private (int trigger, Vector2 wayPoint, float wait)[] selectedMoves;
private void Start() private void Start()
{ {
this.UpdateAsObservable().Subscribe(_ => this.UpdateAsObservable().Subscribe(_ =>
{ {
if (isTired) var pinkSpeed = isLively ? pinkLivelySpeed : pinkWalkSpeed;
{
return;
}
var localPosition = pinkTransform.localPosition; var localPosition = pinkTransform.localPosition;
localPosition = Vector2.MoveTowards(localPosition, wayPoint, pinkWalkspeed * Time.deltaTime); localPosition = Vector2.MoveTowards(localPosition, wayPoint, pinkSpeed * Time.deltaTime);
pinkTransform.localPosition = localPosition; pinkTransform.localPosition = localPosition;
if (Vector2.Distance(localPosition, wayPoint) < .01f) if (Vector2.Distance(localPosition, wayPoint) < .01f)
{ {
@ -53,7 +61,7 @@ public class KitchenView : MonoBehaviour
} }
durationDelta = 0; durationDelta = 0;
moveIndex++; moveIndex++;
if (moveIndex == pinkMoves.Length) if (moveIndex >= selectedMoves.Length)
{ {
moveIndex = 0; moveIndex = 0;
} }
@ -67,9 +75,15 @@ public class KitchenView : MonoBehaviour
moveIndex = 0; moveIndex = 0;
} }
private void ChangeAnimation()
{
moveIndex = 0;
selectedMoves = isLively ? livelyPinkMoves : pinkMoves;
}
private void SetPinkMove() private void SetPinkMove()
{ {
var move = pinkMoves[moveIndex]; var move = selectedMoves[moveIndex];
wayPoint = move.wayPoint; wayPoint = move.wayPoint;
completedDuration = move.wait; completedDuration = move.wait;
pinkBrotherAnimator.SetTrigger(move.trigger); pinkBrotherAnimator.SetTrigger(move.trigger);
@ -88,15 +102,17 @@ public class KitchenView : MonoBehaviour
public void SetNormalAnimation() public void SetNormalAnimation()
{ {
isTired = false; isLively = false;
ChangeAnimation();
SetPinkMove(); SetPinkMove();
blueBrotherAnimator.SetTrigger(Normal); blueBrotherAnimator.SetTrigger(Normal);
} }
public void SetTiredAnimation() public void SetLivelyAnimation()
{ {
isTired = true; isLively = true;
blueBrotherAnimator.SetTrigger(Tired); ChangeAnimation();
pinkBrotherAnimator.SetTrigger(Sleep); SetPinkMove();
blueBrotherAnimator.SetTrigger(Flame);
} }
} }