From bec80c9c4379ce3bc8c275637bc8095ec6db38e7 Mon Sep 17 00:00:00 2001 From: kimura Date: Thu, 10 Feb 2022 11:34:06 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=A2=E3=83=8B=E3=83=A1=E3=83=BC=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=AE=E3=83=95=E3=83=AC=E3=83=BC=E3=83=A0?= =?UTF-8?q?=E3=81=8B=E3=82=89=E6=99=82=E9=96=93=E3=82=92=E8=A8=88=E7=AE=97?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Main/Scripts/BulkOrderAchievedEffect.cs | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedEffect.cs b/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedEffect.cs index aa8a6a2e..31a63164 100644 --- a/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedEffect.cs +++ b/popcorn/Assets/MyGame/Scenes/Main/Scripts/BulkOrderAchievedEffect.cs @@ -16,7 +16,6 @@ namespace MyGame.Scenes.Main.Scripts [SerializeField] private int heartCount = 5; [SerializeField] private float minCurve = 100f; [SerializeField] private float maxCurve = 400f; - [SerializeField] private float waitTime = .3f; [SerializeField] private float curveTime = .5f; [SerializeField] private float linerTime = .5f; private readonly Subject effectCompleteSubject = new Subject(); @@ -39,7 +38,10 @@ namespace MyGame.Scenes.Main.Scripts { var coin = Instantiate(coinPrefab, beginPos, Quaternion.identity, transform); coin.GetComponent()?.Play("BulkOrde_EarnedCoins"); - Effect(coin, goalPos, () => effectCompleteSubject.OnNext(Unit.Default)); + Observable.NextFrame().Subscribe(_ => + { + Effect(coin, goalPos, () => effectCompleteSubject.OnNext(Unit.Default)); + }).AddTo(this); }); } } @@ -48,8 +50,8 @@ namespace MyGame.Scenes.Main.Scripts { // 最後のeffect終了時か、このオブジェクトが破棄された時に1度だけonCompleteが実行される effectCompleteSubject.Take(heartCount).Last() - .Amb(this.OnDestroyAsObservable()) - .Subscribe(_ => { }, () => + .Amb(this.OnDestroyAsObservable()) + .Subscribe(_ => { }, () => { onComplete?.Invoke(); }); @@ -65,12 +67,19 @@ namespace MyGame.Scenes.Main.Scripts private void Effect(Transform target, Vector3 goalPos, Action onComplete = null) { - // localPosじゃなくて worldでやりたい var animator = target.GetComponent(); + var nameHash = animator.GetCurrentAnimatorStateInfo(0).shortNameHash; + var clip = animator.GetCurrentAnimatorClipInfo(0)[0].clip; + var beginDuration = 37 / clip.frameRate; + var beginNormalizedTime = beginDuration / clip.length; + var endNormalizedTime = 52 / clip.frameRate / clip.length; + var endDuration = (1 - endNormalizedTime) * clip.length; + var direction = Random.value <= .5f ? -1 : 1; var depth = Random.Range(minCurve, maxCurve); - this.CallWaitForSeconds(waitTime, () => + this.CallWaitForSeconds(beginDuration, () => { + animator.Play(nameHash, 0, beginNormalizedTime); animator.speed = 0f; var initPos = target.localPosition; this.CallLerp(curveTime, f => @@ -79,15 +88,19 @@ namespace MyGame.Scenes.Main.Scripts target.localPosition = initPos + new Vector3(f * direction * depth, x * x * depth - depth); }, () => { + var pos = target.position; this.CallLerp(linerTime, f => { - var pos = target.position; target.position = Vector2.Lerp(pos, goalPos, f); }, () => { animator.speed = 1f; - onComplete?.Invoke(); - Destroy(target.gameObject, 5f); + animator.Play(nameHash, 0, endNormalizedTime); + this.CallWaitForSeconds(endDuration, () => + { + onComplete?.Invoke(); + Destroy(target.gameObject); + }); }); }); });