スピードアップ対応

This commit is contained in:
kimura 2022-07-25 14:35:29 +09:00
parent 77b443f8e8
commit 0e4891a2d9
3 changed files with 81 additions and 48 deletions

View File

@ -1023,6 +1023,21 @@ PrefabInstance:
propertyPath: fallAcceleration
value: 30
objectReference: {fileID: 0}
- target: {fileID: 2607884839347368726, guid: acd6e6365b5fe4863aedc684a50b8028,
type: 3}
propertyPath: hardSpeedMultiply
value: 1.5
objectReference: {fileID: 0}
- target: {fileID: 2607884839347368726, guid: acd6e6365b5fe4863aedc684a50b8028,
type: 3}
propertyPath: extraSpeedMultiply
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2607884839347368726, guid: acd6e6365b5fe4863aedc684a50b8028,
type: 3}
propertyPath: normalSpeedMultiply
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2607884839347368726, guid: acd6e6365b5fe4863aedc684a50b8028,
type: 3}
propertyPath: hitAnimationCurve.m_PostInfinity
@ -1434,7 +1449,7 @@ MonoBehaviour:
- {fileID: 2044773546}
- {fileID: 184442867}
- {fileID: 628830308}
bgWidth: 17.66
bgWidth: 17.6
bgOffset: 0
holeWidth: 0
--- !u!114 &1657044091

View File

@ -211,6 +211,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
stageManager.Difficulty.SkipLatestValueOnSubscribe().Subscribe(x =>
{
bgManager.SetSky(x);
player.SetSpeed(x);
}).AddTo(this);
player.OnHitItem.Where(_ => state.Value == GameState.Play).Subscribe(x =>

View File

@ -8,6 +8,9 @@ namespace MyGame.Scenes.MiniGame.Scripts
public class Player : MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private float normalSpeedMultiply;
[SerializeField] private float hardSpeedMultiply;
[SerializeField] private float extraSpeedMultiply;
[SerializeField] private float hitJumpTime = 1f;
[SerializeField] private float hitTime = 1.5f;
[SerializeField] private float hitWaitTime = 1f;
@ -35,6 +38,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
private bool isWall;
private bool isResult;
private float currentFallSpeed;
private float currentSpeedMultiply;
public bool IsHit => isHit;
private readonly CompositeDisposable jumpCompositeDisposable = new CompositeDisposable();
private readonly CompositeDisposable hitCompositeDisposable = new CompositeDisposable();
@ -70,6 +74,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
isHole = false;
isWall = false;
isResult = false;
currentSpeedMultiply = 1f;
}
private void Stay(bool force = false)
@ -87,7 +92,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
{
return;
}
transform.AddPositionX(speed * Time.deltaTime);
transform.AddPositionX(speed * Time.deltaTime * currentSpeedMultiply);
if (isJump || isHit || isFall)
{
return;
@ -108,7 +113,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
isFall = false;
var lastFrame = jumpAnimationCurve[jumpAnimationCurve.length - 1];
// 最高点までのジャンプ
var jumpCoroutine = MonoBehaviourExtensions.DoCallLerp(lastFrame.time, t =>
var jumpTime = lastFrame.time / currentSpeedMultiply;
var jumpCoroutine = MonoBehaviourExtensions.DoCallLerp(jumpTime, t =>
{
transform.SetLocalPositionY(basePos.y + jumpAnimationCurve.Evaluate(t * lastFrame.time));
}, () =>
@ -118,7 +124,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
isFall = true;
});
// 通常落下
var jumpFallCoroutine = MonoBehaviourExtensions.DoCallLerp(lastFrame.time, t =>
var jumpFallCoroutine = MonoBehaviourExtensions.DoCallLerp(jumpTime, t =>
{
transform.SetLocalPositionY(basePos.y + jumpAnimationCurve.Evaluate((t + 1) * lastFrame.time));
}, () =>
@ -159,10 +165,10 @@ namespace MyGame.Scenes.MiniGame.Scripts
else
{
animator.Play("Brother_pink_Glideing_Cancel");
currentFallSpeed -= fallAcceleration * Time.deltaTime;
currentFallSpeed -= fallAcceleration * Time.deltaTime * currentSpeedMultiply;
}
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime * currentSpeedMultiply);
}, () =>
{
currentFallSpeed = 0f;
@ -201,17 +207,11 @@ namespace MyGame.Scenes.MiniGame.Scripts
// 落下時間不定によりアニメ再生停止
animator.speed = 0f;
currentFallSpeed = 0f;
this.UpdateAsObservable()
.TakeWhile(_ => transform.localPosition.y > basePos.y)
.Subscribe(_ =>
{
currentFallSpeed -= fallAcceleration * Time.deltaTime;
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
}, () =>
FallDown(basePos.y, () =>
{
// 31フレームまでが落下32からズサー
animator?.PlayInFixedTime("Brother_pink_FallDown", 0, .5f);
animator.speed = 1f;
animator.speed = currentSpeedMultiply;
transform.SetLocalPositionY(groundPos);
currentFallSpeed = 0f;
isJump = false;
@ -234,7 +234,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
}
}).AddTo(hitCompositeDisposable);
}).AddTo(hitCompositeDisposable);
}).AddTo(hitCompositeDisposable);
}).AddTo(jumpCompositeDisposable);
}).AddTo(hitCompositeDisposable);
}
@ -249,13 +249,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
hitCompositeDisposable.Clear();
jumpCompositeDisposable.Clear();
this.UpdateAsObservable()
.TakeWhile(_ => transform.localPosition.y > fallLimit)
.Subscribe(_ =>
{
currentFallSpeed -= fallAcceleration * Time.deltaTime;
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
}, () =>
FallDown(fallLimit, () =>
{
isFall = false;
currentFallSpeed = 0f;
@ -266,11 +260,34 @@ namespace MyGame.Scenes.MiniGame.Scripts
}).AddTo(jumpCompositeDisposable);
}
private IDisposable FallDown(float baseYPos, Action onComplete)
{
return this.UpdateAsObservable()
.TakeWhile(_ => transform.localPosition.y > baseYPos)
.Subscribe(_ =>
{
currentFallSpeed -= fallAcceleration * Time.deltaTime * currentSpeedMultiply;
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime * currentSpeedMultiply);
}, onComplete);
}
public void Wall()
{
isWall = true;
}
public void SetSpeed(ScrollGameDifficulty difficulty)
{
currentSpeedMultiply = difficulty switch
{
ScrollGameDifficulty.Easy => 1f,
ScrollGameDifficulty.Normal => normalSpeedMultiply,
ScrollGameDifficulty.Hard => hardSpeedMultiply,
ScrollGameDifficulty.Extra => extraSpeedMultiply,
_ => throw new ArgumentOutOfRangeException(nameof(difficulty), difficulty, null)
};
}
public void Result()
{
if (isJump || isHit || isFall)