スピードアップ対応
This commit is contained in:
parent
77b443f8e8
commit
0e4891a2d9
|
|
@ -1023,6 +1023,21 @@ PrefabInstance:
|
||||||
propertyPath: fallAcceleration
|
propertyPath: fallAcceleration
|
||||||
value: 30
|
value: 30
|
||||||
objectReference: {fileID: 0}
|
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,
|
- target: {fileID: 2607884839347368726, guid: acd6e6365b5fe4863aedc684a50b8028,
|
||||||
type: 3}
|
type: 3}
|
||||||
propertyPath: hitAnimationCurve.m_PostInfinity
|
propertyPath: hitAnimationCurve.m_PostInfinity
|
||||||
|
|
@ -1434,7 +1449,7 @@ MonoBehaviour:
|
||||||
- {fileID: 2044773546}
|
- {fileID: 2044773546}
|
||||||
- {fileID: 184442867}
|
- {fileID: 184442867}
|
||||||
- {fileID: 628830308}
|
- {fileID: 628830308}
|
||||||
bgWidth: 17.66
|
bgWidth: 17.6
|
||||||
bgOffset: 0
|
bgOffset: 0
|
||||||
holeWidth: 0
|
holeWidth: 0
|
||||||
--- !u!114 &1657044091
|
--- !u!114 &1657044091
|
||||||
|
|
|
||||||
|
|
@ -211,6 +211,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
stageManager.Difficulty.SkipLatestValueOnSubscribe().Subscribe(x =>
|
stageManager.Difficulty.SkipLatestValueOnSubscribe().Subscribe(x =>
|
||||||
{
|
{
|
||||||
bgManager.SetSky(x);
|
bgManager.SetSky(x);
|
||||||
|
player.SetSpeed(x);
|
||||||
}).AddTo(this);
|
}).AddTo(this);
|
||||||
|
|
||||||
player.OnHitItem.Where(_ => state.Value == GameState.Play).Subscribe(x =>
|
player.OnHitItem.Where(_ => state.Value == GameState.Play).Subscribe(x =>
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
public class Player : MonoBehaviour
|
public class Player : MonoBehaviour
|
||||||
{
|
{
|
||||||
[SerializeField] private float speed = 5f;
|
[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 hitJumpTime = 1f;
|
||||||
[SerializeField] private float hitTime = 1.5f;
|
[SerializeField] private float hitTime = 1.5f;
|
||||||
[SerializeField] private float hitWaitTime = 1f;
|
[SerializeField] private float hitWaitTime = 1f;
|
||||||
|
|
@ -35,6 +38,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
private bool isWall;
|
private bool isWall;
|
||||||
private bool isResult;
|
private bool isResult;
|
||||||
private float currentFallSpeed;
|
private float currentFallSpeed;
|
||||||
|
private float currentSpeedMultiply;
|
||||||
public bool IsHit => isHit;
|
public bool IsHit => isHit;
|
||||||
private readonly CompositeDisposable jumpCompositeDisposable = new CompositeDisposable();
|
private readonly CompositeDisposable jumpCompositeDisposable = new CompositeDisposable();
|
||||||
private readonly CompositeDisposable hitCompositeDisposable = new CompositeDisposable();
|
private readonly CompositeDisposable hitCompositeDisposable = new CompositeDisposable();
|
||||||
|
|
@ -70,6 +74,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
isHole = false;
|
isHole = false;
|
||||||
isWall = false;
|
isWall = false;
|
||||||
isResult = false;
|
isResult = false;
|
||||||
|
currentSpeedMultiply = 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Stay(bool force = false)
|
private void Stay(bool force = false)
|
||||||
|
|
@ -87,7 +92,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
transform.AddPositionX(speed * Time.deltaTime);
|
transform.AddPositionX(speed * Time.deltaTime * currentSpeedMultiply);
|
||||||
if (isJump || isHit || isFall)
|
if (isJump || isHit || isFall)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
@ -108,7 +113,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
isFall = false;
|
isFall = false;
|
||||||
var lastFrame = jumpAnimationCurve[jumpAnimationCurve.length - 1];
|
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));
|
transform.SetLocalPositionY(basePos.y + jumpAnimationCurve.Evaluate(t * lastFrame.time));
|
||||||
}, () =>
|
}, () =>
|
||||||
|
|
@ -118,7 +124,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
isFall = true;
|
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));
|
transform.SetLocalPositionY(basePos.y + jumpAnimationCurve.Evaluate((t + 1) * lastFrame.time));
|
||||||
}, () =>
|
}, () =>
|
||||||
|
|
@ -159,10 +165,10 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
animator.Play("Brother_pink_Glideing_Cancel");
|
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;
|
currentFallSpeed = 0f;
|
||||||
|
|
@ -201,40 +207,34 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
// 落下時間不定によりアニメ再生停止
|
// 落下時間不定によりアニメ再生停止
|
||||||
animator.speed = 0f;
|
animator.speed = 0f;
|
||||||
currentFallSpeed = 0f;
|
currentFallSpeed = 0f;
|
||||||
this.UpdateAsObservable()
|
FallDown(basePos.y, () =>
|
||||||
.TakeWhile(_ => transform.localPosition.y > basePos.y)
|
{
|
||||||
.Subscribe(_ =>
|
// 31フレームまでが落下32からズサー
|
||||||
|
animator?.PlayInFixedTime("Brother_pink_FallDown", 0, .5f);
|
||||||
|
animator.speed = currentSpeedMultiply;
|
||||||
|
transform.SetLocalPositionY(groundPos);
|
||||||
|
currentFallSpeed = 0f;
|
||||||
|
isJump = false;
|
||||||
|
isFall = false;
|
||||||
|
Observable.Timer(TimeSpan.FromSeconds(hitTime)).Subscribe(_ => { }, () =>
|
||||||
{
|
{
|
||||||
currentFallSpeed -= fallAcceleration * Time.deltaTime;
|
isHitStay = true;
|
||||||
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
|
Observable.Timer(TimeSpan.FromSeconds(hitWaitTime)).Subscribe(_ => { }, () =>
|
||||||
}, () =>
|
|
||||||
{
|
|
||||||
// 31フレームまでが落下32からズサー
|
|
||||||
animator?.PlayInFixedTime("Brother_pink_FallDown", 0, .5f);
|
|
||||||
animator.speed = 1f;
|
|
||||||
transform.SetLocalPositionY(groundPos);
|
|
||||||
currentFallSpeed = 0f;
|
|
||||||
isJump = false;
|
|
||||||
isFall = false;
|
|
||||||
Observable.Timer(TimeSpan.FromSeconds(hitTime)).Subscribe(_ => { }, () =>
|
|
||||||
{
|
{
|
||||||
isHitStay = true;
|
// 入れ子対策するならコルーチンにして工程ごとに分けてSelectManyするのがよい。
|
||||||
Observable.Timer(TimeSpan.FromSeconds(hitWaitTime)).Subscribe(_ => { }, () =>
|
isHit = false;
|
||||||
|
isHitStay = false;
|
||||||
|
if (isResult)
|
||||||
{
|
{
|
||||||
// 入れ子対策するならコルーチンにして工程ごとに分けてSelectManyするのがよい。
|
Result();
|
||||||
isHit = false;
|
}
|
||||||
isHitStay = false;
|
else
|
||||||
if (isResult)
|
{
|
||||||
{
|
Stay();
|
||||||
Result();
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Stay();
|
|
||||||
}
|
|
||||||
}).AddTo(hitCompositeDisposable);
|
|
||||||
}).AddTo(hitCompositeDisposable);
|
}).AddTo(hitCompositeDisposable);
|
||||||
}).AddTo(hitCompositeDisposable);
|
}).AddTo(hitCompositeDisposable);
|
||||||
|
}).AddTo(jumpCompositeDisposable);
|
||||||
}).AddTo(hitCompositeDisposable);
|
}).AddTo(hitCompositeDisposable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -249,21 +249,26 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
|
|
||||||
hitCompositeDisposable.Clear();
|
hitCompositeDisposable.Clear();
|
||||||
jumpCompositeDisposable.Clear();
|
jumpCompositeDisposable.Clear();
|
||||||
this.UpdateAsObservable()
|
FallDown(fallLimit, () =>
|
||||||
.TakeWhile(_ => transform.localPosition.y > fallLimit)
|
{
|
||||||
|
isFall = false;
|
||||||
|
currentFallSpeed = 0f;
|
||||||
|
if (isResult)
|
||||||
|
{
|
||||||
|
Result();
|
||||||
|
}
|
||||||
|
}).AddTo(jumpCompositeDisposable);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IDisposable FallDown(float baseYPos, Action onComplete)
|
||||||
|
{
|
||||||
|
return this.UpdateAsObservable()
|
||||||
|
.TakeWhile(_ => transform.localPosition.y > baseYPos)
|
||||||
.Subscribe(_ =>
|
.Subscribe(_ =>
|
||||||
{
|
{
|
||||||
currentFallSpeed -= fallAcceleration * Time.deltaTime;
|
currentFallSpeed -= fallAcceleration * Time.deltaTime * currentSpeedMultiply;
|
||||||
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
|
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime * currentSpeedMultiply);
|
||||||
}, () =>
|
}, onComplete);
|
||||||
{
|
|
||||||
isFall = false;
|
|
||||||
currentFallSpeed = 0f;
|
|
||||||
if (isResult)
|
|
||||||
{
|
|
||||||
Result();
|
|
||||||
}
|
|
||||||
}).AddTo(jumpCompositeDisposable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Wall()
|
public void Wall()
|
||||||
|
|
@ -271,6 +276,18 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
||||||
isWall = true;
|
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()
|
public void Result()
|
||||||
{
|
{
|
||||||
if (isJump || isHit || isFall)
|
if (isJump || isHit || isFall)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue