柵の開放を複数パターンの落とし穴に対応
This commit is contained in:
parent
c41d719f21
commit
66c8aed7ed
|
|
@ -1571,7 +1571,6 @@ MonoBehaviour:
|
|||
- {fileID: 628830308}
|
||||
bgWidth: 17.6
|
||||
bgOffset: 0
|
||||
holeWidth: 0
|
||||
--- !u!114 &1657044091
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
|
|||
|
|
@ -334,8 +334,8 @@ Transform:
|
|||
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_LocalPosition: {x: 6.8797, y: -0.797, z: 0}
|
||||
m_LocalScale: {x: 0.89, y: 6, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 6693468020679260201}
|
||||
|
|
@ -402,8 +402,8 @@ GameObject:
|
|||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6693468020679260201}
|
||||
- component: {fileID: 6693468020679260200}
|
||||
- component: {fileID: 3590064911546481895}
|
||||
- component: {fileID: 7778908800215698483}
|
||||
m_Layer: 0
|
||||
m_Name: BackGround
|
||||
m_TagString: Untagged
|
||||
|
|
@ -433,58 +433,6 @@ Transform:
|
|||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &6693468020679260200
|
||||
SpriteRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6693468020679260202}
|
||||
m_Enabled: 0
|
||||
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: 0
|
||||
m_Sprite: {fileID: 21300000, guid: a72d2b5d8cb90d149be2d15cc646011d, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
m_Size: {x: 17.66, y: 22.08039}
|
||||
m_AdaptiveModeThreshold: 0.5
|
||||
m_SpriteTileMode: 0
|
||||
m_WasSpriteAssigned: 0
|
||||
m_MaskInteraction: 0
|
||||
m_SpriteSortPoint: 0
|
||||
--- !u!114 &3590064911546481895
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -499,9 +447,21 @@ MonoBehaviour:
|
|||
m_EditorClassIdentifier:
|
||||
animator: {fileID: 1386453157335861444}
|
||||
fence: {fileID: 8185618443616999324}
|
||||
fenceStep: 1.47
|
||||
fenceStep: 1.469
|
||||
fenceStep2: 0.898
|
||||
fenceMask: {fileID: 1823092584949664508}
|
||||
maskOffset: 0.38
|
||||
maskOffset: -0.02
|
||||
--- !u!210 &7778908800215698483
|
||||
SortingGroup:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6693468020679260202}
|
||||
m_Enabled: 1
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!1 &6944257598449659502
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -628,8 +588,8 @@ Transform:
|
|||
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_LocalPosition: {x: -8.76, y: -1.1916, z: 3.699627}
|
||||
m_LocalScale: {x: 0.12635812, y: 42.292328, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 6693468020679260201}
|
||||
|
|
@ -675,7 +635,7 @@ SpriteRenderer:
|
|||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 42
|
||||
m_SortingOrder: 2
|
||||
m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6,
|
||||
type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
|
|
|
|||
|
|
@ -10,9 +10,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
[SerializeField] private Transform[] bgArray;
|
||||
[SerializeField] private float bgWidth = 17.66f;
|
||||
[SerializeField] private float bgOffset = 0f;
|
||||
[SerializeField] private float holeWidth;
|
||||
private int bgIndex = 0;
|
||||
private readonly List<float> fencePosList = new();
|
||||
private readonly List<Vector2> fencePosList = new();
|
||||
|
||||
public void ResetBg(float targetXPos)
|
||||
{
|
||||
|
|
@ -37,21 +36,21 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
bg.GetComponent<BackGround>()?.ResetFence();
|
||||
}
|
||||
// フェンス確認
|
||||
if (fencePosList.Count > 0 && fencePosList[0] - targetXPos <= bgWidth * 1.5f)
|
||||
if (fencePosList.Count > 0 && fencePosList[0].x - targetXPos <= bgWidth * 1.5f)
|
||||
{
|
||||
SetFence(fencePosList[0]);
|
||||
fencePosList.RemoveAt(0);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetFenceXPos(float targetXPos) => fencePosList.Add(targetXPos);
|
||||
public void SetFenceXPos(Vector2 targetXPos) => fencePosList.Add(targetXPos);
|
||||
|
||||
private void SetFence(float xPos)
|
||||
private void SetFence(Vector2 xPos)
|
||||
{
|
||||
foreach (var bg in bgArray)
|
||||
{
|
||||
var bgXPos = bg.transform.position.x;
|
||||
if (xPos < bgXPos - bgWidth / 2 || bgXPos + bgWidth / 2 < xPos)
|
||||
if (xPos.y < bgXPos - bgWidth / 2 || bgXPos + bgWidth / 2 < xPos.x)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,16 +10,15 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
[SerializeField] private Animator animator;
|
||||
[SerializeField] private SpriteRenderer fence;
|
||||
[SerializeField] private float fenceStep = 1.47f;
|
||||
[SerializeField] private float fenceStep2 = .89f;
|
||||
[SerializeField] private Transform fenceMask;
|
||||
[SerializeField] private float maskOffset = .6f;
|
||||
private readonly List<Transform> fenceMaskList = new();
|
||||
private int fenceMaskCount = 3;
|
||||
private int fenceMaskIndex;
|
||||
private Vector3 cacheFenceScale;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
cacheFenceScale = fenceMask.localScale;
|
||||
fenceMaskList.Clear();
|
||||
fenceMaskList.Add(fenceMask);
|
||||
for (int i = 0; i < fenceMaskCount - 1; i++)
|
||||
|
|
@ -52,11 +51,35 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
}
|
||||
}
|
||||
|
||||
public void SetFence(float xPos)
|
||||
public void SetFence(Vector2 xPos)
|
||||
{
|
||||
var fenceRight = fence.transform.position.x + fence.size.x / 2;
|
||||
fenceMaskList[fenceMaskIndex].localScale = cacheFenceScale;
|
||||
fenceMaskList[fenceMaskIndex].SetPositionX(Mathf.CeilToInt((fenceRight - xPos) / fenceStep) * -fenceStep + fenceRight + maskOffset);
|
||||
var fenceTransform = fence.transform;
|
||||
var half = fence.size.x / 2 * fenceTransform.lossyScale.x;
|
||||
var fenceRight = fenceTransform.position.x + half + maskOffset;
|
||||
var fenceRight2 = fenceRight - fenceStep2;
|
||||
var maskLeft = Mathf.CeilToInt((fenceRight2 - xPos.x) / fenceStep) * -fenceStep + fenceRight2;
|
||||
var maskRight = Mathf.FloorToInt((fenceRight - xPos.y) / fenceStep) * -fenceStep + fenceRight;
|
||||
foreach (var x in new []{xPos.x, xPos.y})
|
||||
{
|
||||
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
||||
sphere.GetComponent<MeshRenderer>().material.color = Color.blue;
|
||||
sphere.transform.SetLocalScale(.4f);
|
||||
sphere.transform.SetPositionX(x);
|
||||
sphere.transform.SetPositionZ(-5f);
|
||||
}
|
||||
foreach (var x in new []{maskLeft, maskRight})
|
||||
{
|
||||
var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
||||
sphere.GetComponent<MeshRenderer>().material.color = Color.red;
|
||||
sphere.transform.SetLocalScale(.4f);
|
||||
sphere.transform.SetPositionX(x);
|
||||
sphere.transform.SetPositionZ(-5f);
|
||||
}
|
||||
|
||||
var maskWidth = maskRight - maskLeft;
|
||||
var maskXPos = maskLeft + maskWidth / 2;
|
||||
fenceMaskList[fenceMaskIndex].localScale += Vector3.right * maskWidth;
|
||||
fenceMaskList[fenceMaskIndex].SetPositionX(maskXPos);
|
||||
fenceMaskIndex = (fenceMaskIndex + 1) % fenceMaskCount;
|
||||
}
|
||||
|
||||
|
|
@ -64,7 +87,24 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
{
|
||||
foreach (var fm in fenceMaskList)
|
||||
{
|
||||
fm.SetLocalScale(0f);
|
||||
fm.SetLocalScaleX(0f);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
{
|
||||
var fenceTransform = fence.transform;
|
||||
var distance = fenceTransform.position;
|
||||
var half = fence.size.x / 2 * fenceTransform.lossyScale.x;
|
||||
distance = distance.AddX(half);
|
||||
distance = distance.AddX(maskOffset);
|
||||
while (distance.x > fenceTransform.position.x - half)
|
||||
{
|
||||
Gizmos.color = Color.blue;
|
||||
Gizmos.DrawLine(distance + Vector3.up, distance + Vector3.down);
|
||||
Gizmos.color = Color.green;
|
||||
Gizmos.DrawLine(distance.AddX(-fenceStep2) + Vector3.up, distance.AddX(-fenceStep2) + Vector3.down);
|
||||
distance = distance.AddX(-fenceStep);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
private float cacheElapsedTime;
|
||||
private ScrollGameStageData currentStageData;
|
||||
private ScrollGameStageData nextStageData;
|
||||
public IObservable<float> OnFence => fenceSubject.DelayFrame(1); // 1フレーム送らせて通知
|
||||
private readonly Subject<float> fenceSubject = new();
|
||||
public IObservable<Vector2> OnFence => fenceSubject;
|
||||
private readonly Subject<Vector2> fenceSubject = new();
|
||||
private readonly CompositeDisposable stageDisposable = new();
|
||||
private readonly Dictionary<int, ScrollGameStageData> stageDataDict = new();
|
||||
|
||||
|
|
@ -106,13 +106,13 @@ namespace MyGame.Scenes.MiniGame.Scripts
|
|||
}).AddTo(stage.gameObject);
|
||||
|
||||
// 落とし穴があった場合通知
|
||||
stage.transform.FindAllChildrensComponent<StageItem>(x =>
|
||||
stage.transform.FindAllChildrensComponent<Hole>(x =>
|
||||
{
|
||||
if (!x.gameObject.activeInHierarchy || x.ItemType != StageItem.Type.Hole)
|
||||
if (!x.gameObject.activeInHierarchy)
|
||||
{
|
||||
return;
|
||||
}
|
||||
fenceSubject.OnNext(x.transform.position.x);
|
||||
fenceSubject.OnNext(x.Border);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue