diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/BackGround.prefab b/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/BackGround.prefab index 7be9e506..8c55fe03 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/BackGround.prefab +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Prefabs/BackGround.prefab @@ -309,6 +309,90 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!1 &6158862371014298792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1823092584949664508} + - component: {fileID: 7935330040579081031} + m_Layer: 0 + m_Name: Fence Sprite Mask + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1823092584949664508 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158862371014298792} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.67, y: -1.24, z: 3.699627} + m_LocalScale: {x: 5.289047, y: 4.1330132, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6693468020679260201} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!331 &7935330040579081031 +SpriteMask: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6158862371014298792} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10758, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 48e93eef0688c4a259cb0eddcd8661f7, + type: 3} + m_MaskAlphaCutoff: 0.2 + m_FrontSortingLayerID: 0 + m_BackSortingLayerID: 0 + m_FrontSortingLayer: 0 + m_BackSortingLayer: 0 + m_FrontSortingOrder: 0 + m_BackSortingOrder: 0 + m_IsCustomRangeActive: 0 + m_SpriteSortPoint: 0 --- !u!1 &6693468020679260202 GameObject: m_ObjectHideFlags: 0 @@ -343,7 +427,9 @@ Transform: - {fileID: 835325393001496006} - {fileID: 4011736666950912259} - {fileID: 3898132706768809190} + - {fileID: 1823092584949664508} - {fileID: 702142903892024756} + - {fileID: 2855901227758250091} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -411,9 +497,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 55925464a5e04e219bc8367e5e6736a3, type: 3} m_Name: m_EditorClassIdentifier: - skyA: {fileID: 8485154869765182451} - skyB: {fileID: 8340042299726979294} - skyC: {fileID: 1509564104245423004} + animator: {fileID: 1386453157335861444} + fence: {fileID: 8185618443616999324} + fenceStep: 1.47 + fenceMask: {fileID: 1823092584949664508} + maskOffset: 0.38 --- !u!1 &6944257598449659502 GameObject: m_ObjectHideFlags: 0 @@ -482,7 +570,7 @@ Transform: - {fileID: 7805892084240676278} - {fileID: 347748900199299103} m_Father: {fileID: 6693468020679260201} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1386453157335861444 Animator: @@ -515,6 +603,91 @@ SortingGroup: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: -1 +--- !u!1 &8407122193597637346 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2855901227758250091} + - component: {fileID: 491226171211459091} + m_Layer: 0 + m_Name: Square + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2855901227758250091 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8407122193597637346} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.527, y: -1.1916, z: 3.699627} + m_LocalScale: {x: 0.6368857, y: 42.292328, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6693468020679260201} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &491226171211459091 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8407122193597637346} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 42 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 3.4153032, y: 1.4130414} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 --- !u!1 &8440537209289290077 GameObject: m_ObjectHideFlags: 0 @@ -1373,12 +1546,6 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9c217c7121db82e4c82db55757b960a0, type: 3} ---- !u!1 &1509564104245423004 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 3792660538810734569, guid: 9c217c7121db82e4c82db55757b960a0, - type: 3} - m_PrefabInstance: {fileID: 2328695415354834037} - m_PrefabAsset: {fileID: 0} --- !u!4 &7805892084240676278 stripped Transform: m_CorrespondingSourceObject: {fileID: 5477829989002693059, guid: 9c217c7121db82e4c82db55757b960a0, @@ -1685,12 +1852,6 @@ Transform: type: 3} m_PrefabInstance: {fileID: 3366069943570363836} m_PrefabAsset: {fileID: 0} ---- !u!1 &8340042299726979294 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 6704565235532174690, guid: 64f1618c752f7f14ca923033fe3060f2, - type: 3} - m_PrefabInstance: {fileID: 3366069943570363836} - m_PrefabAsset: {fileID: 0} --- !u!1001 &3480741187864296687 PrefabInstance: m_ObjectHideFlags: 0 @@ -3000,6 +3161,11 @@ PrefabInstance: propertyPath: m_SortingOrder value: 1 objectReference: {fileID: 0} + - target: {fileID: 3369490898853473183, guid: 7fa52d20820d0f84a9218625917a643a, + type: 3} + propertyPath: m_MaskInteraction + value: 2 + objectReference: {fileID: 0} - target: {fileID: 7298026551172620012, guid: 7fa52d20820d0f84a9218625917a643a, type: 3} propertyPath: m_Name @@ -3083,6 +3249,12 @@ Transform: type: 3} m_PrefabInstance: {fileID: 6871365500090186755} m_PrefabAsset: {fileID: 0} +--- !u!212 &8185618443616999324 stripped +SpriteRenderer: + m_CorrespondingSourceObject: {fileID: 3369490898853473183, guid: 7fa52d20820d0f84a9218625917a643a, + type: 3} + m_PrefabInstance: {fileID: 6871365500090186755} + m_PrefabAsset: {fileID: 0} --- !u!1001 &7747817936090880844 PrefabInstance: m_ObjectHideFlags: 0 @@ -3358,12 +3530,6 @@ Transform: type: 3} m_PrefabInstance: {fileID: 7747817936090880844} m_PrefabAsset: {fileID: 0} ---- !u!1 &8485154869765182451 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 2181031092853622975, guid: 682cb6897a7801848a19158996bbed8f, - type: 3} - m_PrefabInstance: {fileID: 7747817936090880844} - m_PrefabAsset: {fileID: 0} --- !u!1001 &7763813133807266979 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BGManager.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BGManager.cs index bad1d08e..f91f69f3 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BGManager.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BGManager.cs @@ -11,7 +11,9 @@ namespace MyGame.Scenes.MiniGame.Scripts [SerializeField] private float bgOffset = 0f; [SerializeField] private float holeWidth; private int bgIndex = 0; - + private float nextFenceXPos; + private bool isFenceDone; + public void ResetBg(float targetXPos) { bgIndex = 0; @@ -19,7 +21,9 @@ namespace MyGame.Scenes.MiniGame.Scripts { var bg = bgArray[i]; bg.SetPositionX(targetXPos + bgWidth / 2 + bgOffset + (i - 1) * bgWidth); + bg.GetComponent()?.ResetFence(); } + isFenceDone = true; } public void UpdatePos(float targetXPos) @@ -30,6 +34,32 @@ namespace MyGame.Scenes.MiniGame.Scripts // 一番奥にセット bg.SetPositionX(bgArray[(bgArray.Length + bgIndex - 1) % bgArray.Length].position.x + bgWidth); bgIndex = (bgIndex + 1) % bgArray.Length; + bg.GetComponent()?.ResetFence(); + } + // フェンス確認 + if (!isFenceDone && nextFenceXPos - targetXPos <= bgWidth) + { + isFenceDone = true; + SetFence(); + } + } + + public void SetFenceXPos(float targetXPos) + { + nextFenceXPos = targetXPos; + isFenceDone = false; + } + + private void SetFence() + { + foreach (var bg in bgArray) + { + var bgXPos = bg.transform.position.x; + if (nextFenceXPos < bgXPos - bgWidth / 2 || bgXPos + bgWidth / 2 < nextFenceXPos) + { + continue; + } + bg.GetComponent()?.SetFence(nextFenceXPos); } } } diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BackGround.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BackGround.cs index 0b3d233c..738d77e1 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BackGround.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/BackGround.cs @@ -1,18 +1,46 @@ +using System; using UnityEngine; namespace MyGame.Scenes.MiniGame.Scripts { public class BackGround : MonoBehaviour { - [SerializeField] private GameObject skyA; - [SerializeField] private GameObject skyB; - [SerializeField] private GameObject skyC; + [SerializeField] private Animator animator; + [SerializeField] private SpriteRenderer fence; + [SerializeField] private float fenceStep = 1.47f; + [SerializeField] private Transform fenceMask; + [SerializeField] private float maskOffset = .6f; public void SetSky(ScrollGameDifficulty difficulty) { - skyA.SetActive(difficulty == ScrollGameDifficulty.Easy); - skyB.SetActive(difficulty == ScrollGameDifficulty.Normal); - skyC.SetActive(difficulty == ScrollGameDifficulty.Hard); + switch (difficulty) + { + case ScrollGameDifficulty.Easy: + animator.speed = 0f; + animator.Play("sky_switching", 0, 0f); + break; + case ScrollGameDifficulty.Normal: + animator.speed = 1f; + animator.Play("sky_switching", 0, 0f); + break; + case ScrollGameDifficulty.Hard: + animator.Play("sky_switching_b_c", 0, 0f); + break; + default: + throw new ArgumentOutOfRangeException(nameof(difficulty), difficulty, null); + } + } + + public void SetFence(float xPos) + { + fenceMask.gameObject.SetActive(true); + var fenceRight = fence.transform.position.x + fence.size.x / 2; + fenceMask.SetPositionX(Mathf.CeilToInt((fenceRight - xPos) / fenceStep) * -fenceStep + fenceRight + maskOffset); + } + + public void ResetFence() + { + fenceMask.gameObject.SetActive(false); } } } \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs index 857ee740..8b3daf70 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/GameManager.cs @@ -96,9 +96,6 @@ namespace MyGame.Scenes.MiniGame.Scripts { gameData.ScrollGameLastPlayTime = DateTime.UtcNow.ToBinary(); gameData.ScrollGameTodayPlayCount++; - // ステージ読み込み - stageManager.SetSky(stageData.Difficulty); - stageManager.SetBeginStages(stageData.GetBeginStagePrefabs()); ResetGame(levelPlaceList, stageData); menuState.Value = MenuState.Game; return; @@ -109,9 +106,6 @@ namespace MyGame.Scenes.MiniGame.Scripts { gameData.ScrollGameLastPlayTime = DateTime.UtcNow.ToBinary(); gameData.ScrollGameTodayPlayCount++; - // ステージ読み込み - stageManager.SetSky(stageData.Difficulty); - stageManager.SetBeginStages(stageData.GetBeginStagePrefabs()); ResetGame(levelPlaceList, stageData); menuState.Value = MenuState.Game; }); @@ -228,6 +222,11 @@ namespace MyGame.Scenes.MiniGame.Scripts bgManager.UpdatePos(playerPosX); }).AddTo(this); + stageManager.OnFence.Distinct().Subscribe(x => + { + bgManager.SetFenceXPos(x); + }).AddTo(this); + player.OnHitItem.Where(_ => state.Value == GameState.Play).Subscribe(x => { if (!x.TryGetComponent(out var item)) @@ -296,7 +295,9 @@ namespace MyGame.Scenes.MiniGame.Scripts private void ResetGame(ScrollGamePlaceData[] placeList, ScrollGameStageData stageData) { SoundManager.Instance.ChangeVolumeUniqueBGM(1f); - stageManager.ResetStage(); + // ステージ読み込み + stageManager.SetSky(stageData.Difficulty); + stageManager.SetBeginStages(stageData.GetBeginStagePrefabs()); player.transform.position = characterBeginPos; player.ResetPlayer(); scoreCount.Value = 0; diff --git a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs index f08d1c9d..62f8ae3d 100644 --- a/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs +++ b/popcorn/Assets/MyGame/Scenes/MiniGame/Scripts/StageManager.cs @@ -1,3 +1,5 @@ +using System; +using UniRx; using UnityEngine; namespace MyGame.Scenes.MiniGame.Scripts @@ -7,6 +9,13 @@ namespace MyGame.Scenes.MiniGame.Scripts [SerializeField] private BackGround[] backGrounds; [SerializeField] private Transform stageTarget; private Transform[] stages; + public IObservable OnFence => fenceSubject; + private readonly Subject fenceSubject = new(); + + private void Start() + { + fenceSubject.AddTo(this); + } public void SetBeginStages(Transform[] newStages) { @@ -18,6 +27,15 @@ namespace MyGame.Scenes.MiniGame.Scripts stages[i] = Instantiate(newStages[i], stageTarget.position, Quaternion.identity, stageTarget); stages[i].gameObject.SetActive(i == selectIndex); } + stages[0].FindAllChildrensComponent(x => + { + if (x.ItemType != StageItem.Type.Hole) + { + return; + } + + Observable.NextFrame().Subscribe(_ => fenceSubject.OnNext(x.transform.position.x)).AddTo(this); + }); } public void SetSky(ScrollGameDifficulty difficulty) @@ -33,19 +51,9 @@ namespace MyGame.Scenes.MiniGame.Scripts } - public void ResetStage() + public void UpdatePos(float targetXPos) { - var selectIndex = UnityEngine.Random.Range(0, stages.Length); - for (var i = 0; i < stages.Length; i++) - { - stages[i].gameObject.SetActive(i == selectIndex); - } - stageTarget.FindAllChildrensComponent(collider => - { - collider.GetComponent()?.ResetItem(); - collider.transform.SetLocalScale(1f); - collider.enabled = true; - }); + } } } \ No newline at end of file