穴ギミック部分のフェンス対応

This commit is contained in:
kimura 2022-07-22 18:18:33 +09:00
parent 527940b917
commit 07123bc7c6
5 changed files with 281 additions and 48 deletions

View File

@ -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

View File

@ -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<BackGround>()?.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<BackGround>()?.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<BackGround>()?.SetFence(nextFenceXPos);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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<StageItem>(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;

View File

@ -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<float> OnFence => fenceSubject;
private readonly Subject<float> 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<StageItem>(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<Collider2D>(collider =>
{
collider.GetComponent<StageItem>()?.ResetItem();
collider.transform.SetLocalScale(1f);
collider.enabled = true;
});
}
}
}