From 640246f598f20059d20ef9ff1e21074d6527a9d3 Mon Sep 17 00:00:00 2001 From: kimura Date: Tue, 20 Jul 2021 16:32:32 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E3=81=9F=E3=81=AB=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=B3=E9=A3=9B=E3=81=B3=E5=87=BA=E3=81=97=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyGame/Scenes/Cooking/Prefabs/corn.prefab | 22 +++++++++++--- .../MyGame/Scenes/Cooking/Scripts/Corn.cs | 23 +++++++------- .../MyGame/Scenes/Cooking/Scripts/CornSkin.cs | 30 +++++++++++++++++++ .../Scenes/Cooking/Scripts/CornSkin.cs.meta | 3 ++ 4 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs create mode 100644 popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs.meta diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Prefabs/corn.prefab b/popcorn/Assets/MyGame/Scenes/Cooking/Prefabs/corn.prefab index 312fce00..f59b51f8 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Prefabs/corn.prefab +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Prefabs/corn.prefab @@ -67,10 +67,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 175dce409df2f4d3aa1941a08822e03e, type: 3} m_Name: m_EditorClassIdentifier: - spriteRenderer: {fileID: 8958880017665793879} - cornSeedSprite: {fileID: 21300000, guid: 97ac0328246620745b8881e07f709ce7, type: 3} - cornSimpleSprite: {fileID: 21300000, guid: 041ad2539ff56d945ab2da4be6a02f04, type: 3} - cornBurntSprite: {fileID: 21300000, guid: a9d669186411b2b4da1511f59a91b4c9, type: 3} + cornSkin: {fileID: 7130900939474693981} effectBurnt: {fileID: 3984349228049242719, guid: 02298b5aac4434a4c81aec58ad2caa9d, type: 3} animator: {fileID: 5972257590091015193} @@ -121,6 +118,7 @@ GameObject: m_Component: - component: {fileID: 9198528551727453440} - component: {fileID: 8958880017665793879} + - component: {fileID: 7130900939474693981} m_Layer: 0 m_Name: Image_corn m_TagString: Untagged @@ -192,6 +190,22 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!114 &7130900939474693981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3431194784518736845} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c466f7c9f9e84d04b4a0afae69c08384, type: 3} + m_Name: + m_EditorClassIdentifier: + spriteRenderer: {fileID: 8958880017665793879} + cornSeedSprite: {fileID: 21300000, guid: 97ac0328246620745b8881e07f709ce7, type: 3} + cornSimpleSprite: {fileID: 21300000, guid: 041ad2539ff56d945ab2da4be6a02f04, type: 3} + cornBurntSprite: {fileID: 21300000, guid: a9d669186411b2b4da1511f59a91b4c9, type: 3} --- !u!1 &4761356856374534614 GameObject: m_ObjectHideFlags: 0 diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs index d07adab5..1905f84e 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs @@ -20,11 +20,8 @@ public class Corn : MonoBehaviour private static readonly int HashCornGrow = Animator.StringToHash("CornGrow"); private static readonly int HashCornBurn = Animator.StringToHash("CornBurn"); private static readonly int HashWaitOffset = Animator.StringToHash("WaitOffset"); - - [SerializeField] private SpriteRenderer spriteRenderer; - [SerializeField] private Sprite cornSeedSprite; - [SerializeField] private Sprite cornSimpleSprite; - [SerializeField] private Sprite cornBurntSprite; + + [SerializeField] private CornSkin cornSkin; [SerializeField] private GameObject effectBurnt; [SerializeField] private Animator animator; @@ -48,9 +45,8 @@ public class Corn : MonoBehaviour { condition.AddTo(this); rigidbody = GetComponent(); - spriteRenderer.sprite = cornSeedSprite; - - spriteTransform = spriteRenderer.transform; + + spriteTransform = cornSkin.transform; rotationResolverTransform = spriteTransform.parent.parent; animator.SetFloat(HashWaitOffset, Random.value/2); @@ -60,6 +56,7 @@ public class Corn : MonoBehaviour { rigidbody.MovePosition(new Vector2(Random.value * 2 - 1, Random.value * 2 - 1)); rigidbody.SetRotation(Random.value * 360); + cornSkin.ChangeSkin(condition.Value); // コーンが飛んでいく this.ObserveEveryValueChanged(x => x.rigidbody.velocity.magnitude) @@ -119,7 +116,7 @@ public class Corn : MonoBehaviour private void CornPop() { - spriteRenderer.sprite = cornSimpleSprite; + cornSkin.ChangeSkin(condition.Value); rigidbody.AddForce(cornPopSpeed * new Vector2(Random.value * 2 - 1, Random.value * 2 - 1), ForceMode2D.Impulse); animator.SetTrigger(HashCornGrow); VibrationManager.Instance.PlayVibrationOnce(); @@ -127,7 +124,7 @@ public class Corn : MonoBehaviour private void CornBurnt() { - spriteRenderer.sprite = cornBurntSprite; + cornSkin.ChangeSkin(condition.Value); animator.SetTrigger(HashCornBurn); var effect = Instantiate(effectBurnt, transform); this.CallWaitForSeconds(.8f, () => Destroy(effect)); @@ -135,6 +132,12 @@ public class Corn : MonoBehaviour private void CornSpilled(CornCondition prevCondition) { + var clone = Instantiate(cornSkin); + clone.ChangeSkin(prevCondition); + var cloneRigidBody = clone.gameObject.AddComponent(); + cloneRigidBody.gravityScale = 0; + cloneRigidBody.AddForce(rigidbody.velocity.normalized * cornSpillSpeed, ForceMode2D.Impulse); + this.CallWaitForSeconds(2f, () => Destroy(clone.gameObject)); } public void SetCornProperty(float popTime, float burntDuration, float spillSpeed, float popSpeed) diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs new file mode 100644 index 00000000..af006656 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs @@ -0,0 +1,30 @@ +using System; +using UnityEngine; + +public class CornSkin : MonoBehaviour +{ + [SerializeField] private SpriteRenderer spriteRenderer; + [SerializeField] private Sprite cornSeedSprite; + [SerializeField] private Sprite cornSimpleSprite; + [SerializeField] private Sprite cornBurntSprite; + + public void ChangeSkin(CornCondition condition) + { + switch (condition) + { + case CornCondition.Seed: + spriteRenderer.sprite = cornSeedSprite; + break; + case CornCondition.Simple: + spriteRenderer.sprite = cornSimpleSprite; + break; + case CornCondition.Burnt: + spriteRenderer.sprite = cornBurntSprite; + break; + case CornCondition.Spilled: + break; + default: + throw new ArgumentOutOfRangeException(nameof(condition), condition, null); + } + } +} diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs.meta b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs.meta new file mode 100644 index 00000000..3428626e --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c466f7c9f9e84d04b4a0afae69c08384 +timeCreated: 1626764991 \ No newline at end of file From 3ec262fb01f6a3bc071256600f65b2f6dc22f0ae Mon Sep 17 00:00:00 2001 From: kimura Date: Tue, 20 Jul 2021 16:47:23 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=B3=E7=8A=B6?= =?UTF-8?q?=E6=85=8B=E3=81=8B=E3=82=89=E3=80=8C=E9=A3=9B=E3=81=B3=E5=87=BA?= =?UTF-8?q?=E3=81=97(spilled)=E3=80=8D=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyGame/Scenes/Cooking/Scripts/Corn.cs | 24 +++++++------------ .../Scenes/Cooking/Scripts/CornManager.cs | 11 +++++---- .../Scenes/Cooking/Scripts/CornMissEffect.cs | 4 ---- .../MyGame/Scenes/Cooking/Scripts/CornSkin.cs | 2 -- .../Scenes/Cooking/Scripts/CornSpilled.cs | 2 -- 5 files changed, 16 insertions(+), 27 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs index 1905f84e..a1c879a4 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs @@ -11,7 +11,6 @@ public enum CornCondition Seed, Simple, Burnt, - Spilled } [RequireComponent(typeof(Rigidbody2D))] @@ -35,6 +34,8 @@ public class Corn : MonoBehaviour public IReadOnlyReactiveProperty Condition => condition; private readonly ReactiveProperty condition = new ReactiveProperty(CornCondition.Seed); + public IReadOnlyReactiveProperty Spilled => spilled; + private readonly ReactiveProperty spilled = new ReactiveProperty(); // 角度調整 @@ -58,14 +59,15 @@ public class Corn : MonoBehaviour rigidbody.SetRotation(Random.value * 360); cornSkin.ChangeSkin(condition.Value); - // コーンが飛んでいく + // コーン飛び出し演出 this.ObserveEveryValueChanged(x => x.rigidbody.velocity.magnitude) .Where(x => x >= cornSpillSpeed) .FirstOrDefault() .Subscribe(_ => - { - condition.Value = CornCondition.Spilled; - }).AddTo(this); + { + spilled.Value = true; + CornSpilled(); + }).AddTo(this); condition.Pairwise().Subscribe(x => { @@ -79,9 +81,6 @@ public class Corn : MonoBehaviour case CornCondition.Burnt: CornBurnt(); break; - case CornCondition.Spilled: - CornSpilled(x.Previous); - break; default: throw new ArgumentOutOfRangeException(nameof(x), x, null); } @@ -98,11 +97,6 @@ public class Corn : MonoBehaviour private void Update() { - if (condition.Value == CornCondition.Spilled) - { - return; - } - cornGrowTime += Time.deltaTime * cornGrowSpeed; if (cornGrowTime >= cornBurntTime) { @@ -130,10 +124,10 @@ public class Corn : MonoBehaviour this.CallWaitForSeconds(.8f, () => Destroy(effect)); } - private void CornSpilled(CornCondition prevCondition) + private void CornSpilled() { var clone = Instantiate(cornSkin); - clone.ChangeSkin(prevCondition); + clone.ChangeSkin(condition.Value); var cloneRigidBody = clone.gameObject.AddComponent(); cloneRigidBody.gravityScale = 0; cloneRigidBody.AddForce(rigidbody.velocity.normalized * cornSpillSpeed, ForceMode2D.Impulse); diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs index af98f369..1457e016 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornManager.cs @@ -178,15 +178,18 @@ public class CornManager : MonoBehaviour // ミス数加算 missCount.Value++; break; - case CornCondition.Spilled: - // 同時に飛び出したとき用に演出をばらつかせる - corn.CallWaitForSeconds(Random.Range(0f, .5f), () => cornSpilledSubject.OnNext(condition.Previous)); - break; default: throw new ArgumentOutOfRangeException(nameof(condition), condition, null); } }).AddTo(compositeDisposable); + corn.Spilled + .Subscribe(_ => + { + // 同時に飛び出したとき用に演出をばらつかせる + corn.CallWaitForSeconds(Random.Range(0f, .5f), () => cornSpilledSubject.OnNext(corn.Condition.Value)); + }).AddTo(compositeDisposable); + cornConditions.Add(corn.Condition); } diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornMissEffect.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornMissEffect.cs index 65f31aa2..3cb065fe 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornMissEffect.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornMissEffect.cs @@ -18,10 +18,6 @@ public class CornMissEffect : MonoBehaviour burntSprite.SetActive(true); spilledSprite.SetActive(false); break; - case CornCondition.Spilled: - burntSprite.SetActive(false); - spilledSprite.SetActive(true); - break; default: throw new ArgumentOutOfRangeException(nameof(condition), condition, null); } diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs index af006656..d083cc8e 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSkin.cs @@ -21,8 +21,6 @@ public class CornSkin : MonoBehaviour case CornCondition.Burnt: spriteRenderer.sprite = cornBurntSprite; break; - case CornCondition.Spilled: - break; default: throw new ArgumentOutOfRangeException(nameof(condition), condition, null); } diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSpilled.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSpilled.cs index 3598ba56..a1474c70 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSpilled.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/CornSpilled.cs @@ -22,8 +22,6 @@ public class CornSpilled : MonoBehaviour spilledCornRenderer.sprite = spilledBurntCornSprite; spilledCornGrainRenderer.sprite = spilledBurntCornGrainSprite; break; - case CornCondition.Spilled: - break; default: throw new ArgumentOutOfRangeException(nameof(condition), condition, null); } From ba55d302750dd776e834d9609c6bc603bb2c5d37 Mon Sep 17 00:00:00 2001 From: kimura Date: Tue, 20 Jul 2021 17:08:54 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E9=A3=9B=E3=81=B3=E5=87=BA=E3=81=97?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyGame/Scenes/Cooking/Scripts/Corn.cs | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs index a1c879a4..4d47ba60 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Scripts/Corn.cs @@ -55,18 +55,25 @@ public class Corn : MonoBehaviour private void Start() { - rigidbody.MovePosition(new Vector2(Random.value * 2 - 1, Random.value * 2 - 1)); - rigidbody.SetRotation(Random.value * 360); + rigidbody.MovePosition(Random.insideUnitCircle); + rigidbody.SetRotation(Random.rotation); cornSkin.ChangeSkin(condition.Value); // コーン飛び出し演出 this.ObserveEveryValueChanged(x => x.rigidbody.velocity.magnitude) .Where(x => x >= cornSpillSpeed) + .ThrottleFirstFrame(30) // 30フレーム間隔開ける + .Select(_ => Random.value < .2f) // 演出を出す確率 .FirstOrDefault() .Subscribe(_ => { spilled.Value = true; - CornSpilled(); + var clone = Instantiate(cornSkin); + clone.ChangeSkin(condition.Value); + var cloneRigidBody = clone.gameObject.AddComponent(); + cloneRigidBody.gravityScale = 0; + cloneRigidBody.AddForce(rigidbody.velocity.normalized * 20f, ForceMode2D.Impulse); + this.CallWaitForSeconds(2f, () => Destroy(clone.gameObject)); }).AddTo(this); condition.Pairwise().Subscribe(x => @@ -111,7 +118,7 @@ public class Corn : MonoBehaviour private void CornPop() { cornSkin.ChangeSkin(condition.Value); - rigidbody.AddForce(cornPopSpeed * new Vector2(Random.value * 2 - 1, Random.value * 2 - 1), ForceMode2D.Impulse); + rigidbody.AddForce(cornPopSpeed * Random.insideUnitCircle, ForceMode2D.Impulse); animator.SetTrigger(HashCornGrow); VibrationManager.Instance.PlayVibrationOnce(); } @@ -124,16 +131,6 @@ public class Corn : MonoBehaviour this.CallWaitForSeconds(.8f, () => Destroy(effect)); } - private void CornSpilled() - { - var clone = Instantiate(cornSkin); - clone.ChangeSkin(condition.Value); - var cloneRigidBody = clone.gameObject.AddComponent(); - cloneRigidBody.gravityScale = 0; - cloneRigidBody.AddForce(rigidbody.velocity.normalized * cornSpillSpeed, ForceMode2D.Impulse); - this.CallWaitForSeconds(2f, () => Destroy(clone.gameObject)); - } - public void SetCornProperty(float popTime, float burntDuration, float spillSpeed, float popSpeed) { cornPopTime = popTime; From b1d656515dcbb51524dee19b4ba45eb47598415e Mon Sep 17 00:00:00 2001 From: kimura Date: Tue, 20 Jul 2021 17:13:23 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=B3=E5=A4=B1?= =?UTF-8?q?=E6=95=97=E6=95=B0=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity b/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity index b8d7ff2d..1b25667b 100644 --- a/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity +++ b/popcorn/Assets/MyGame/Scenes/Cooking/Cooking.unity @@ -8878,7 +8878,7 @@ MonoBehaviour: cornMissMeter: {fileID: 1871878300} missTextSpawnTransform: {fileID: 676036207} cornSpawnCount: 50 - maxFailedCornCount: 10 + maxFailedCornCount: 25 baseGrowSpeed: 1 coldGrowSpeed: 0.1 hotGrowSpeed: 2