From c89df57cc33027f6613f14c2301e02ca3ae00bc2 Mon Sep 17 00:00:00 2001 From: kimura Date: Tue, 28 Jun 2022 14:53:56 +0900 Subject: [PATCH] fix player hit --- .../Scenes/MiniGame/Prefabs/ProtoGame.prefab | 1 + .../MyGame/Scenes/MiniGame/Scripts/Player.cs | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/ProtoGame.prefab b/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/ProtoGame.prefab index ffc32a6a..02dd243e 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/ProtoGame.prefab +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/ProtoGame.prefab @@ -1494,6 +1494,7 @@ MonoBehaviour: speed: 5 jumpTime: 1.25 jumpHeight: 5 + fallTime: 0.5 hitTime: 1.5 hitWaitTime: 1 --- !u!61 &5804782809510212544 diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs index 7522b17b..114c3918 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/Player.cs @@ -10,16 +10,20 @@ namespace MyGame.Scenes.MiniGame.Scripts [SerializeField] private float speed = 5f; [SerializeField] private float jumpTime = 1.25f; [SerializeField] private float jumpHeight = 5f; + [SerializeField] private float fallTime = 1f; [SerializeField] private float hitTime = 1.5f; [SerializeField] private float hitWaitTime = 1f; private bool isJump; private bool isPreHit; private readonly BoolReactiveProperty isHit = new BoolReactiveProperty(); private IDisposable hitDisposable; + private Coroutine jumpCoroutine; + private Vector3 basePos; private void Start() { isHit.AddTo(this); + basePos = transform.localPosition; } public void Move() @@ -39,10 +43,9 @@ namespace MyGame.Scenes.MiniGame.Scripts } isJump = true; - var cachePos = transform.localPosition; - this.CallLerp(jumpTime, t => + jumpCoroutine = this.CallLerp(jumpTime, t => { - transform.SetLocalPositionY(cachePos.y + Mathf.Sin(Mathf.PI * t) * jumpHeight); + transform.SetLocalPositionY(basePos.y + Mathf.Sin(Mathf.PI * t) * jumpHeight); }, () => { isJump = false; @@ -58,9 +61,16 @@ namespace MyGame.Scenes.MiniGame.Scripts } isPreHit = true; hitDisposable?.Dispose(); - // ジャンプが終わるのを待つ - hitDisposable = this.UpdateAsObservable().First(_ => !isJump).Subscribe(_ => + + StopCoroutine(jumpCoroutine); + var diffHeight = transform.localPosition.y - basePos.y; + jumpCoroutine = this.CallLerp(diffHeight == 0f ? 0f : fallTime, t => { + var half = 0.5f + t / 2; + transform.SetLocalPositionY(basePos.y + Mathf.Sin(Mathf.PI * half) * diffHeight); + }, () => + { + isJump = false; var orgRotation = transform.localRotation; var orgYAngle = orgRotation.eulerAngles.y; transform.rotation = Quaternion.identity; @@ -76,7 +86,7 @@ namespace MyGame.Scenes.MiniGame.Scripts isHit.Value = false; }); }); - }).AddTo(this); + }); } } } \ No newline at end of file