From 5f84e67316d5aa9794748c4e21b9a6422ab04ac1 Mon Sep 17 00:00:00 2001 From: kimura Date: Fri, 29 Oct 2021 16:49:11 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=AB=E3=82=A6=E3=83=B3=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=82=AF=E3=83=A9=E3=82=B9=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Animation/StockCorn_addition.anim | 2 +- .../Animation/StockCorn_addition.controller | 269 +++++++++++++++++- .../Scripts/HarvestedAdditionView.cs | 109 +++++++ .../Scripts/HarvestedAdditionView.cs.meta | 3 + 4 files changed, 376 insertions(+), 7 deletions(-) create mode 100644 popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs create mode 100644 popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs.meta diff --git a/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.anim b/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.anim index a1171b8a..531a553c 100644 --- a/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.anim +++ b/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.anim @@ -104,7 +104,7 @@ AnimationClip: m_Level: 0 m_CycleOffset: 0 m_HasAdditiveReferencePose: 0 - m_LoopTime: 1 + m_LoopTime: 0 m_LoopBlend: 0 m_LoopBlendOrientation: 0 m_LoopBlendPositionY: 0 diff --git a/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.controller b/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.controller index 9b376fe0..d16eab3b 100644 --- a/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.controller +++ b/popcorn/Assets/MyGame/Resource/Animation/StockCorn_addition.controller @@ -1,5 +1,30 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1101 &-8642731778310273473 +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: Appear + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -7636538999637159995} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0.24 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 --- !u!1102 &-7636538999637159995 AnimatorState: serializedVersion: 5 @@ -10,6 +35,58 @@ AnimatorState: m_Name: StockCorn_addition_appear m_Speed: 1 m_CycleOffset: 0 + m_Transitions: + - {fileID: 3383956810922778620} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: a4e9d84ee63cf8441912c536b0a82c86, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &-6879587025651168406 +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: Add + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -788033614754781971} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0.15 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &-3946120656019495017 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: StockCorn_addition_disappear + m_Speed: -1 + m_CycleOffset: 0 m_Transitions: [] m_StateMachineBehaviours: [] m_Position: {x: 50, y: 50, z: 0} @@ -36,7 +113,9 @@ AnimatorState: m_Name: StockCorn_addition m_Speed: 1 m_CycleOffset: 0 - m_Transitions: [] + m_Transitions: + - {fileID: -6879587025651168406} + - {fileID: 719906150159968281} m_StateMachineBehaviours: [] m_Position: {x: 50, y: 50, z: 0} m_IKOnFeet: 0 @@ -60,7 +139,31 @@ AnimatorController: m_PrefabAsset: {fileID: 0} m_Name: StockCorn_addition serializedVersion: 5 - m_AnimatorParameters: [] + m_AnimatorParameters: + - m_Name: Add + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Appear + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Disappear + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Wait + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer @@ -74,6 +177,78 @@ AnimatorController: m_IKPass: 0 m_SyncedLayerAffectsTiming: 0 m_Controller: {fileID: 9100000} +--- !u!1101 &705613616560957241 +AnimatorStateTransition: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 0} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 1 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &719906150159968281 +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: Wait + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 2789945997106464607} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0.1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &797903091149478652 +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: Add + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -788033614754781971} + 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!1107 &2098577713097479084 AnimatorStateMachine: serializedVersion: 5 @@ -85,12 +260,20 @@ AnimatorStateMachine: m_ChildStates: - serializedVersion: 1 m_State: {fileID: -788033614754781971} - m_Position: {x: 200, y: 0, z: 0} + m_Position: {x: 340, y: -40, z: 0} - serializedVersion: 1 m_State: {fileID: -7636538999637159995} - m_Position: {x: 230, y: 60, z: 0} + m_Position: {x: 540, y: 20, z: 0} + - serializedVersion: 1 + m_State: {fileID: 2789945997106464607} + m_Position: {x: 340, y: 120, z: 0} + - serializedVersion: 1 + m_State: {fileID: -3946120656019495017} + m_Position: {x: 260, y: -150, z: 0} m_ChildStateMachines: [] - m_AnyStateTransitions: [] + m_AnyStateTransitions: + - {fileID: -8642731778310273473} + - {fileID: 8499302709827305042} m_EntryTransitions: [] m_StateMachineTransitions: {} m_StateMachineBehaviours: [] @@ -98,4 +281,78 @@ AnimatorStateMachine: m_EntryPosition: {x: 50, y: 120, z: 0} m_ExitPosition: {x: 800, y: 120, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} - m_DefaultState: {fileID: -788033614754781971} + m_DefaultState: {fileID: 2789945997106464607} +--- !u!1102 &2789945997106464607 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Wait + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 797903091149478652} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &3383956810922778620 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -788033614754781971} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0.13288593 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &8499302709827305042 +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: Disappear + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -3946120656019495017} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0.13 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs new file mode 100644 index 00000000..7b328789 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs @@ -0,0 +1,109 @@ +using System; +using System.Text; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + + +public class HarvestedAdditionView : MonoBehaviour +{ + private static readonly int Add = Animator.StringToHash("Add"); + private static readonly int Appear = Animator.StringToHash("Appear"); + private static readonly int Disappear = Animator.StringToHash("Disappear"); + private static readonly int Wait = Animator.StringToHash("Wait"); + + [SerializeField] private Animator counterAnimator; + [SerializeField] private TextWithCountUpInt counter; + [Tooltip("揺れる頻度")] + [SerializeField] private float triggerThrottle = .1f; + [Tooltip("カウントアップ時間")] + [SerializeField] private float countDuration = .4f; + [Tooltip("コーンが来なくなってから待つ時間")] + [SerializeField] private float waitDisappeared = 2f; + private static readonly string harvestedCountFormat = "+{0}"; + private static readonly string hasCountFormat = "{0}"; + private readonly Subject playEffectObserve = new Subject(); + private bool flag; + private int latestCount; + + public IObservable EndObservable => endObservable; + private readonly Subject endObservable = new Subject(); + private Coroutine disapperCoroutine; + + private void Start() + { + playEffectObserve.AddTo(this); + playEffectObserve + .ThrottleFirst(TimeSpan.FromSeconds(triggerThrottle)) + .Subscribe(_ => + { + this.SafeStopCoroutine(disapperCoroutine); + if (flag) + { + counterAnimator.transform.SetLocalScale(1); + counterAnimator.SetTrigger(Appear); + } + else + { + counterAnimator.SetTrigger(Add); + } + flag = false; + }).AddTo(this); + // playEffectObserveが来なくなって0.15sで揺らすのを止める + playEffectObserve + .Throttle(TimeSpan.FromSeconds(.15f)) + .Subscribe(_ => + { + counterAnimator.ResetTrigger(Add); + counterAnimator.SetTrigger(Wait); + }).AddTo(this); + playEffectObserve + .Throttle(TimeSpan.FromSeconds(waitDisappeared)) + .Subscribe(_ => + { + endObservable.OnNext(latestCount); + SetHarvestedCount(0); + Debug.Log($"corn:{GameDataManager.GameData.CornSeed} {latestCount}"); + disapperCoroutine = this.CallWaitForSeconds(countDuration, () => + { + Reset(); + counterAnimator.SetTrigger(Disappear); + this.CallWaitForSeconds(.25f, () => + { + counterAnimator.transform.SetLocalScale(0); + }); + }); + }).AddTo(this); + } + + public void Initialize(int count) + { + counterAnimator.transform.SetLocalScale(0); + counterAnimator.SetTrigger(Disappear); + Reset(); + } + + private void Reset() + { + counter.ChangeValue(hasCountFormat, 0); + latestCount = 0; + flag = true; + } + + private void SetHarvestedCount(int count) + { + latestCount = count; + counter.CountUpAnimation($"{harvestedCountFormat}", latestCount, countDuration); + } + + public void AddHarvestedCount(int count) + { + latestCount += count; + counter.CountUpAnimation($"{harvestedCountFormat}", latestCount, countDuration); + } + + public void PlayEffect() + { + playEffectObserve.OnNext(default); + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs.meta b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs.meta new file mode 100644 index 00000000..b8e3e603 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/HarvestedAdditionView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 36e90b93a284494f950c1e35f9b68535 +timeCreated: 1634295489 \ No newline at end of file