diff --git a/popcorn/Assets/MyGame/Resource/Animation/Seedling.controller b/popcorn/Assets/MyGame/Resource/Animation/Seedling.controller index 31547479..52a7400d 100644 --- a/popcorn/Assets/MyGame/Resource/Animation/Seedling.controller +++ b/popcorn/Assets/MyGame/Resource/Animation/Seedling.controller @@ -1,5 +1,32 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-7101647891082938139 +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: -375427520789603927} + 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!1102 &-5202147409423705330 AnimatorState: serializedVersion: 5 @@ -26,6 +53,31 @@ AnimatorState: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: +--- !u!1101 &-375427520789603927 +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: NextStageTrigger + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -5202147409423705330} + 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!91 &9100000 AnimatorController: m_ObjectHideFlags: 0 @@ -34,7 +86,13 @@ AnimatorController: m_PrefabAsset: {fileID: 0} m_Name: Seedling serializedVersion: 5 - m_AnimatorParameters: [] + m_AnimatorParameters: + - m_Name: NextStageTrigger + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer @@ -59,7 +117,10 @@ AnimatorStateMachine: m_ChildStates: - serializedVersion: 1 m_State: {fileID: -5202147409423705330} - m_Position: {x: 200, y: 0, z: 0} + m_Position: {x: 290, y: 10, z: 0} + - serializedVersion: 1 + m_State: {fileID: -7101647891082938139} + m_Position: {x: 288.2871, y: 110.23569, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] @@ -69,4 +130,4 @@ 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: -5202147409423705330} + m_DefaultState: {fileID: -7101647891082938139} diff --git a/popcorn/Assets/MyGame/Resource/Animation/ShortenedArrow.controller b/popcorn/Assets/MyGame/Resource/Animation/ShortenedArrow.controller index ceb1e1cd..ff789f76 100644 --- a/popcorn/Assets/MyGame/Resource/Animation/ShortenedArrow.controller +++ b/popcorn/Assets/MyGame/Resource/Animation/ShortenedArrow.controller @@ -1,5 +1,32 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-8051783787151630874 +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: -440546901106716930} + 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!1102 &-4417451168949031892 AnimatorState: serializedVersion: 5 @@ -26,6 +53,53 @@ AnimatorState: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: +--- !u!1101 &-2442201336397139720 +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: -8051783787151630874} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.39999998 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &-440546901106716930 +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: GrowingTrigger + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -4417451168949031892} + 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 &-130798099334731609 AnimatorStateMachine: serializedVersion: 5 @@ -37,7 +111,10 @@ AnimatorStateMachine: m_ChildStates: - serializedVersion: 1 m_State: {fileID: -4417451168949031892} - m_Position: {x: 200, y: 0, z: 0} + m_Position: {x: 240, y: 0, z: 0} + - serializedVersion: 1 + m_State: {fileID: -8051783787151630874} + m_Position: {x: 250, y: 120, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] @@ -47,7 +124,7 @@ 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: -4417451168949031892} + m_DefaultState: {fileID: -8051783787151630874} --- !u!91 &9100000 AnimatorController: m_ObjectHideFlags: 0 @@ -56,7 +133,13 @@ AnimatorController: m_PrefabAsset: {fileID: 0} m_Name: ShortenedArrow serializedVersion: 5 - m_AnimatorParameters: [] + m_AnimatorParameters: + - m_Name: GrowingTrigger + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer diff --git a/popcorn/Assets/MyGame/Resource/Animation/seedling.anim b/popcorn/Assets/MyGame/Resource/Animation/seedling.anim index f30d7070..fb78f680 100644 --- a/popcorn/Assets/MyGame/Resource/Animation/seedling.anim +++ b/popcorn/Assets/MyGame/Resource/Animation/seedling.anim @@ -162,7 +162,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/Scenes/CornField/Prefabs/Seedling.prefab b/popcorn/Assets/MyGame/Scenes/CornField/Prefabs/Seedling.prefab index 31bf11db..6aea1d75 100644 --- a/popcorn/Assets/MyGame/Scenes/CornField/Prefabs/Seedling.prefab +++ b/popcorn/Assets/MyGame/Scenes/CornField/Prefabs/Seedling.prefab @@ -413,6 +413,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 875275074515791083} + - component: {fileID: 3152473785108484531} m_Layer: 0 m_Name: Seedling m_TagString: Untagged @@ -439,6 +440,23 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3152473785108484531 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 875275074515791082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b5e732e57e34b97a8adc725ce004566, type: 3} + m_Name: + m_EditorClassIdentifier: + seedlingStage1: {fileID: 875275074110174225} + seedlingStage2: {fileID: 875275074190396077} + seedlingStage3: {fileID: 875275073577674106} + seedlingStage4: {fileID: 875275074368017847} + growingArrow: {fileID: 875275074279153694} --- !u!1001 &3637094299625695119 PrefabInstance: m_ObjectHideFlags: 0 @@ -506,6 +524,11 @@ PrefabInstance: propertyPath: m_Name value: ShortenedArrow objectReference: {fileID: 0} + - target: {fileID: 4493492865567033234, guid: b3d641214f420f74290147d368b221fa, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b3d641214f420f74290147d368b221fa, type: 3} --- !u!4 &875275074279153695 stripped @@ -514,3 +537,9 @@ Transform: type: 3} m_PrefabInstance: {fileID: 3637094299625695119} m_PrefabAsset: {fileID: 0} +--- !u!95 &875275074279153694 stripped +Animator: + m_CorrespondingSourceObject: {fileID: 4493492865567033233, guid: b3d641214f420f74290147d368b221fa, + type: 3} + m_PrefabInstance: {fileID: 3637094299625695119} + m_PrefabAsset: {fileID: 0} diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs new file mode 100644 index 00000000..4faa80b9 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs @@ -0,0 +1,162 @@ +using System; +using UniRx; +using UnityEngine; +using Random = UnityEngine.Random; + +public enum SeedlingStage +{ + Stage1, + Stage2, + Stage3, + Stage4 +} + +public enum SeedlingRank +{ + Rank1, + Rank2, + Rank3 +} + +public class CornSeedling : MonoBehaviour +{ + [SerializeField] private GameObject seedlingStage1; + [SerializeField] private GameObject seedlingStage2; + [SerializeField] private GameObject seedlingStage3; + [SerializeField] private GameObject seedlingStage4; + [SerializeField] private Animator growingArrow; + private readonly int growingTriggerHash = Animator.StringToHash("GrowingTrigger"); + private readonly int nextStageTriggerHash = Animator.StringToHash("NextStageTrigger"); + private static readonly float stage1End = 0.32f; + private static readonly float stage2End = 0.67f; + private static readonly float stage3End = 1f; + + private int period; + private DateTime beginTime; + private SeedlingRank seedlingRank; // 苗の良さ(1~3 + private bool completed; + + private readonly ReactiveProperty seedlingStage = new ReactiveProperty(); + private readonly CompositeDisposable compositeDisposable = new CompositeDisposable(); + + private void Start() + { + seedlingStage.AddTo(this); + compositeDisposable.AddTo(this); + } + + private void ResetGrowth() + { + seedlingStage1.SetActive(false); + seedlingStage2.SetActive(false); + seedlingStage3.SetActive(false); + seedlingStage4.SetActive(false); + } + + public void PromoteGrowth(int newPeriod) + { + growingArrow.SetTrigger(growingTriggerHash); + period = newPeriod; + UpdateStage(); + } + + public void SetSeedlingGene(DateTime dateTime, int periodTime, SeedlingRank rank) + { + completed = false; + compositeDisposable.Clear(); + ResetGrowth(); + beginTime = dateTime; + period = periodTime; + seedlingRank = rank; + + // resume対応 + // 途中からの場合アニメーションを勧めておく処理 + var stage = GetCurrentStage(); + seedlingStage.SetValueAndForceNotify(stage); + switch (stage) + { + case SeedlingStage.Stage1: + seedlingStage1.SetActive(true); + break; + case SeedlingStage.Stage2: + seedlingStage2.SetActive(true); + break; + case SeedlingStage.Stage3: + seedlingStage3.SetActive(true); + break; + case SeedlingStage.Stage4: + seedlingStage4.SetActive(true); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + // 成長ロジック + seedlingStage + .TakeWhile(_ => !completed) + .Subscribe(x => + { + switch (x) + { + case SeedlingStage.Stage1: + break; + case SeedlingStage.Stage2: + seedlingStage1.GetComponent().SetTrigger(nextStageTriggerHash); + this.CallWaitForSeconds(.25f, () => + { + seedlingStage2.SetActive(true); + }); + break; + case SeedlingStage.Stage3: + seedlingStage2.GetComponent().SetTrigger(nextStageTriggerHash); + this.CallWaitForSeconds(.25f, () => + { + seedlingStage3.SetActive(true); + }); + break; + case SeedlingStage.Stage4: + seedlingStage3.GetComponent().SetTrigger(nextStageTriggerHash); + this.CallWaitForSeconds(.25f, () => + { + completed = true; + seedlingStage4.SetActive(true); + }); + break; + default: + throw new ArgumentOutOfRangeException(nameof(x), x, null); + } + }).AddTo(compositeDisposable); + + // 成長進捗度 + Observable.Interval(TimeSpan.FromSeconds(1f)) + .TakeWhile(_ => !completed) + .Subscribe(x => + { + UpdateStage(); + }).AddTo(compositeDisposable); + } + + private void UpdateStage() + { + seedlingStage.Value = GetCurrentStage(); + } + + private SeedlingStage GetCurrentStage() + { + var elapsed = DateTime.Now.Subtract(beginTime).TotalSeconds / period; + Debug.Log($"{elapsed:F2}"); + if (elapsed >= stage3End) + { + return SeedlingStage.Stage4; + } + if (elapsed >= stage2End) + { + return SeedlingStage.Stage3; + } + if (elapsed >= stage1End) + { + return SeedlingStage.Stage2; + } + return SeedlingStage.Stage1; + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs.meta b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs.meta new file mode 100644 index 00000000..c41d2058 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/CornField/Scripts/CornSeedling.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1b5e732e57e34b97a8adc725ce004566 +timeCreated: 1626415116 \ No newline at end of file