Merge branch 'feature/1.5.1' of bitbucket.org:usaya/popcorn into feature/1.5.1

This commit is contained in:
koya_15 2022-07-21 17:54:48 +09:00
commit d519bc9d74
4 changed files with 277 additions and 104 deletions

View File

@ -336,6 +336,80 @@ SpriteRenderer:
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!1 &2116348896259355144
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1534764298133588176}
- component: {fileID: 1099241547759812047}
- component: {fileID: 7579635455155827063}
m_Layer: 0
m_Name: WallCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1534764298133588176
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2116348896259355144}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6547169326961555051}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1099241547759812047
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2116348896259355144}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b62a13975f3446e1b15bf182305ce742, type: 3}
m_Name:
m_EditorClassIdentifier:
itemType: 3
point: 0
effect: {fileID: 0}
--- !u!61 &7579635455155827063
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2116348896259355144}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 2.464157, y: -0.29294157}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 0.56, y: 0.56}
newSize: {x: 1.5, y: 1.5}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 1.7018661, y: 6.5957174}
m_EdgeRadius: 0
--- !u!1 &3506260383647136063 --- !u!1 &3506260383647136063
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1596,6 +1670,80 @@ SpriteRenderer:
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!1 &9202194284233474589
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2593939739011402922}
- component: {fileID: 5868678615845785858}
- component: {fileID: 6483093989930334763}
m_Layer: 0
m_Name: HoleCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2593939739011402922
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9202194284233474589}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6547169326961555051}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5868678615845785858
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9202194284233474589}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b62a13975f3446e1b15bf182305ce742, type: 3}
m_Name:
m_EditorClassIdentifier:
itemType: 2
point: 0
effect: {fileID: 0}
--- !u!61 &6483093989930334763
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9202194284233474589}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: -0.30281544, y: 3.0435905}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 0.56, y: 0.56}
newSize: {x: 1.5, y: 1.5}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 3.8188686, y: 0.64767385}
m_EdgeRadius: 0
--- !u!1001 &4896317741957177885 --- !u!1001 &4896317741957177885
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1613,20 +1761,35 @@ PrefabInstance:
propertyPath: m_Name propertyPath: m_Name
value: Obstacle hole value: Obstacle hole
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4498234376221693369, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3}
propertyPath: m_Name
value: HitCollider
objectReference: {fileID: 0}
- target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a, - target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3} type: 3}
propertyPath: m_Size.x propertyPath: m_Size.x
value: 3 value: 4.9299707
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a, - target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3} type: 3}
propertyPath: m_Size.y propertyPath: m_Size.y
value: 3 value: 1.2895794
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a, - target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3} type: 3}
propertyPath: m_Enabled propertyPath: m_Enabled
value: 0 value: 1
objectReference: {fileID: 0}
- target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3}
propertyPath: m_Offset.x
value: -0.022976398
objectReference: {fileID: 0}
- target: {fileID: 4498234376221693374, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3}
propertyPath: m_Offset.y
value: -3.2332087
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4888696605717816911, guid: b82d5b841abe54f95aee9a8a5a023f6a, - target: {fileID: 4888696605717816911, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3} type: 3}
@ -1732,61 +1895,9 @@ Transform:
type: 3} type: 3}
m_PrefabInstance: {fileID: 4896317741957177885} m_PrefabInstance: {fileID: 4896317741957177885}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1 &9052172984657770404 stripped --- !u!4 &6547169326961555051 stripped
GameObject: Transform:
m_CorrespondingSourceObject: {fileID: 4498234376221693369, guid: b82d5b841abe54f95aee9a8a5a023f6a, m_CorrespondingSourceObject: {fileID: 1814670119296341110, guid: b82d5b841abe54f95aee9a8a5a023f6a,
type: 3} type: 3}
m_PrefabInstance: {fileID: 4896317741957177885} m_PrefabInstance: {fileID: 4896317741957177885}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!61 &5895574189566282252
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9052172984657770404}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: -0.03, y: -0.67}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0, y: 0}
oldSize: {x: 0, y: 0}
newSize: {x: 0, y: 0}
adaptiveTilingThreshold: 0
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 3, y: 1.66}
m_EdgeRadius: 0
--- !u!61 &8766766892135053376
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9052172984657770404}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: -0.04, y: 0.83}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0, y: 0}
oldSize: {x: 0, y: 0}
newSize: {x: 0, y: 0}
adaptiveTilingThreshold: 0
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 2.12, y: 1.31}
m_EdgeRadius: 0

View File

@ -263,14 +263,26 @@ namespace MyGame.Scenes.MiniGame.Scripts
// } // }
} }
#endif #endif
switch (item.ItemType)
{
case StageItem.Type.Obstacle:
if (player.IsHit) if (player.IsHit)
{ {
return; return;
} }
if (item.ItemType == StageItem.Type.Obstacle)
{
player.Hit(x.ClosestPoint(playerTransform.position)); player.Hit(x.ClosestPoint(playerTransform.position));
x.enabled = false; x.enabled = false;
break;
case StageItem.Type.Item1:
break;
case StageItem.Type.Hole:
player.Hole();
break;
case StageItem.Type.Wall:
player.Wall();
break;
default:
throw new ArgumentOutOfRangeException();
} }
}).AddTo(this); }).AddTo(this);
} }
@ -280,8 +292,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
SoundManager.Instance.ChangeVolumeUniqueBGM(1f); SoundManager.Instance.ChangeVolumeUniqueBGM(1f);
stageManager.ResetStage(); stageManager.ResetStage();
player.transform.position = characterBeginPos; player.transform.position = characterBeginPos;
player.Stay(); player.ResetPlayer();
player.ResetCount();
scoreCount.Value = 0; scoreCount.Value = 0;
headerView.ChangeTimeCount(timeLimit); headerView.ChangeTimeCount(timeLimit);
resultManager.Reset(); resultManager.Reset();

View File

@ -31,25 +31,51 @@ namespace MyGame.Scenes.MiniGame.Scripts
private bool isFlying; private bool isFlying;
private bool isResult; private bool isResult;
private bool isHit; private bool isHit;
private bool isHole;
private bool isWall;
private float currentFallSpeed;
public bool IsHit => isHit; public bool IsHit => isHit;
private readonly BoolReactiveProperty isHitStay = new BoolReactiveProperty(); private readonly BoolReactiveProperty isHitStay = new BoolReactiveProperty();
private IDisposable hitDisposable; private readonly CompositeDisposable hitCompositeDisposable = new CompositeDisposable();
private IDisposable jumpHoldDisposable; private IDisposable jumpHoldDisposable;
private Coroutine jumpCoroutine; private Coroutine jumpCoroutine;
private Coroutine jumpFallCoroutine; private Coroutine jumpFallCoroutine;
private Vector3 basePos; private Vector3 basePos;
private int count; private readonly ReactiveProperty<int> count = new ReactiveProperty<int>();
public IObservable<Collider2D> OnHitItem => itemHitCollider.OnTriggerEnter2DAsObservable().TakeUntilDestroy(this); public IObservable<Collider2D> OnHitItem => itemHitCollider.OnTriggerEnter2DAsObservable().TakeUntilDestroy(this);
public IObservable<Collider2D> OnHitObstacle => obstacleHitCollider.OnTriggerEnter2DAsObservable().TakeUntilDestroy(this); public IObservable<Collider2D> OnHitObstacle => obstacleHitCollider.OnTriggerEnter2DAsObservable().TakeUntilDestroy(this);
private void Start() private void Start()
{ {
isHitStay.AddTo(this); isHitStay.AddTo(this);
count.AddTo(this);
hitCompositeDisposable.AddTo(this);
animator = GetComponent<Animator>(); animator = GetComponent<Animator>();
basePos = transform.localPosition; basePos = transform.localPosition;
count.Subscribe(x =>
{
level1.SetActive(x >= level1Value);
level2.SetActive(x >= level2Value);
level3.SetActive(x >= level3Value);
}).AddTo(this);
} }
public void Stay(bool force = false) public void ResetPlayer()
{
Stay();
ResetCount();
isJump = false;
isFall = false;
isFlying = false;
isHit = false;
isHitStay.Value = false;
isHole = false;
isWall = false;
isResult = false;
}
private void Stay(bool force = false)
{ {
if (!force && isHit) if (!force && isHit)
{ {
@ -60,7 +86,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
public void Move() public void Move()
{ {
if (isHitStay.Value) if (isHitStay.Value || isWall)
{ {
return; return;
} }
@ -74,12 +100,11 @@ namespace MyGame.Scenes.MiniGame.Scripts
public void Jump() public void Jump()
{ {
if (isJump || isHit) if (isJump || isHit || isHole)
{ {
return; return;
} }
SoundManager.Instance.PlaySE("se_minigame_Jump");
animator?.Play("Brother_pink_jump", 0, 0); animator?.Play("Brother_pink_jump", 0, 0);
isJump = true; isJump = true;
isFall = false; isFall = false;
@ -124,7 +149,7 @@ namespace MyGame.Scenes.MiniGame.Scripts
if (isFall && active && !isFlying) if (isFall && active && !isFlying)
{ {
isFlying = true; isFlying = true;
var currentSpeed = 0f; currentFallSpeed = 0f;
this.SafeStopCoroutine(jumpFallCoroutine); this.SafeStopCoroutine(jumpFallCoroutine);
jumpHoldDisposable?.Dispose(); jumpHoldDisposable?.Dispose();
jumpHoldDisposable = this.UpdateAsObservable() jumpHoldDisposable = this.UpdateAsObservable()
@ -134,16 +159,17 @@ namespace MyGame.Scenes.MiniGame.Scripts
// 滑空or落下切り替え // 滑空or落下切り替え
if (isButtonHold) if (isButtonHold)
{ {
currentSpeed = -flyingFallSpeed; currentFallSpeed = -flyingFallSpeed;
} }
else else
{ {
currentSpeed -= fallAcceleration * Time.deltaTime; currentFallSpeed -= fallAcceleration * Time.deltaTime;
} }
transform.AddLocalPositionY(currentSpeed * Time.deltaTime); transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
}, () => }, () =>
{ {
currentFallSpeed = 0f;
isJump = false; isJump = false;
isFall = false; isFall = false;
isFlying = false; isFlying = false;
@ -164,9 +190,9 @@ namespace MyGame.Scenes.MiniGame.Scripts
} }
Instantiate(hitEffectPrefab, hitPos, Quaternion.identity, transform.parent); Instantiate(hitEffectPrefab, hitPos, Quaternion.identity, transform.parent);
animator?.Play("Brother_pink_FallDown"); animator?.Play("Brother_pink_FallDown", 0, 0f);
isHit = true; isHit = true;
hitDisposable?.Dispose(); hitCompositeDisposable?.Clear();
// ヒット以外動作停止 // ヒット以外動作停止
this.SafeStopCoroutine(jumpCoroutine); this.SafeStopCoroutine(jumpCoroutine);
@ -175,33 +201,35 @@ namespace MyGame.Scenes.MiniGame.Scripts
var cachePosY = transform.localPosition.y; var cachePosY = transform.localPosition.y;
var diffHeight = cachePosY - basePos.y; var diffHeight = cachePosY - basePos.y;
jumpCoroutine = this.CallLerp(diffHeight == 0f ? 0f : hitJumpTime, t => var groundPos = isHole ? cachePosY : basePos.y;
jumpCoroutine = this.CallLerp(diffHeight <= 0f ? 0f : hitJumpTime, t =>
{ {
transform.SetLocalPositionY(cachePosY + hitAnimationCurve.Evaluate(t)); transform.SetLocalPositionY(cachePosY + hitAnimationCurve.Evaluate(t));
}, () => }, () =>
{ {
// 落下時間不定によりアニメ再生停止 // 落下時間不定によりアニメ再生停止
animator.speed = 0f; animator.speed = 0f;
var currentSpeed = 0f; currentFallSpeed = 0f;
this.UpdateAsObservable() this.UpdateAsObservable()
.TakeWhile(_ => transform.localPosition.y > basePos.y) .TakeWhile(_ => transform.localPosition.y > groundPos)
.Subscribe(_ => .Subscribe(_ =>
{ {
currentSpeed -= fallAcceleration * Time.deltaTime; currentFallSpeed -= fallAcceleration * Time.deltaTime;
transform.AddLocalPositionY(currentSpeed * Time.deltaTime); transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
}, () => }, () =>
{ {
// 31フレームまでが落下32からズサー // 31フレームまでが落下32からズサー
animator?.PlayInFixedTime("Brother_pink_FallDown", 0, .5f); animator?.PlayInFixedTime("Brother_pink_FallDown", 0, .5f);
animator.speed = 1f; animator.speed = 1f;
transform.SetLocalPositionY(basePos.y); transform.SetLocalPositionY(groundPos);
currentFallSpeed = 0f;
isJump = false; isJump = false;
isFall = false; isFall = false;
isFlying = false; isFlying = false;
this.CallWaitForSeconds(hitTime, () => Observable.Timer(TimeSpan.FromSeconds(hitTime)).Subscribe(_ => { }, () =>
{ {
isHitStay.Value = true; isHitStay.Value = true;
this.CallWaitForSeconds(hitWaitTime, () => Observable.Timer(TimeSpan.FromSeconds(hitWaitTime)).Subscribe(_ => { }, () =>
{ {
isHit = false; isHit = false;
isHitStay.Value = false; isHitStay.Value = false;
@ -213,10 +241,39 @@ namespace MyGame.Scenes.MiniGame.Scripts
{ {
Stay(); Stay();
} }
}).AddTo(hitCompositeDisposable);
}).AddTo(hitCompositeDisposable);
}).AddTo(hitCompositeDisposable);
}); });
}); }
public void Hole()
{
// 落下開始
isHole = true;
// animator?.Play("Brother_pink_main_stay");
isJump = false;
isFall = false;
isFlying = false;
isHit = false;
isHitStay.Value = false;
hitCompositeDisposable?.Clear();
jumpHoldDisposable?.Dispose();
jumpHoldDisposable = this.UpdateAsObservable()
// .TakeWhile(_ => transform.localPosition.y > basePos.y)
.Subscribe(_ =>
{
currentFallSpeed -= fallAcceleration * Time.deltaTime;
transform.AddLocalPositionY(currentFallSpeed * Time.deltaTime);
}, () =>
{
}).AddTo(this); }).AddTo(this);
}); }
public void Wall()
{
isWall = true;
} }
public void Result() public void Result()
@ -233,21 +290,12 @@ namespace MyGame.Scenes.MiniGame.Scripts
public void AddCount() public void AddCount()
{ {
SoundManager.Instance.PlaySE("se_minigame_ItemGet"); SoundManager.Instance.PlaySE("se_minigame_ItemGet");
count++; count.Value++;
UpdateCount();
} }
private void UpdateCount() private void ResetCount()
{ {
level1.SetActive(count >= level1Value); count.Value = 0;
level2.SetActive(count >= level2Value);
level3.SetActive(count >= level3Value);
}
public void ResetCount()
{
count = 0;
UpdateCount();
} }
} }
} }

View File

@ -11,6 +11,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
{ {
Item1, Item1,
Obstacle, Obstacle,
Hole,
Wall,
} }
[SerializeField] private Type itemType; [SerializeField] private Type itemType;
@ -30,7 +32,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
if (effect != null) effect.SetActive(true); if (effect != null) effect.SetActive(true);
break; break;
case Type.Obstacle: case Type.Obstacle:
break; case Type.Hole:
case Type.Wall:
default: default:
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();
} }