Added custom collision

This commit is contained in:
Pasha Bibko
2025-11-20 11:15:29 +00:00
parent 0dce94924c
commit 583f417e24
5 changed files with 69 additions and 63 deletions

View File

@@ -56,7 +56,6 @@ GameObject:
- component: {fileID: 1739635715747709762}
- component: {fileID: 5026174633141696716}
- component: {fileID: 8577569336777110376}
- component: {fileID: 4859736940813683666}
m_Layer: 0
m_Name: Model
m_TagString: Enemy
@@ -129,48 +128,3 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4804673878835712602}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!61 &4859736940813683666
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4804673878835712602}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
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: 1, y: 1}
m_EdgeRadius: 0

View File

@@ -4,6 +4,12 @@ public class EnemyController : OrbitalPositionBehaviour
{
public override void OnStart()
{
m_OrbitalPosition.m_DeletedAtCentre = true;
transform.position = new Vector3(0, 0, -200f);
m_OrbitalPosition.RadiusDistance = 0.2f;
}
public override void OnReachCentre()
{
Destroy(gameObject);
}
}

View File

@@ -7,16 +7,17 @@ public class OrbitalPosition
public Int64 pRing = 0;
public float DistanceFromCentre = 0;
public float RadiusDistance = 0;
public float ObjectRadius = 0.1f;
public Transform owner = null;
public OrbitalPositionBehaviour Behaviour;
public Transform Owner = null;
public int m_SpinSpeed = 1;
public bool m_DeletedAtCentre = false;
public int SpinSpeed = 1;
public OrbitalPosition(GameObject _owner)
{
pRing = GlobalOrbitalPositionManager.LastRingID;
owner = _owner.transform;
Owner = _owner.transform;
}
public Vector3 TranslateToVec3() => new
@@ -38,6 +39,9 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
private readonly List<Ring> m_Rings = new();
private readonly Dictionary<Int64, float> m_Distances = new();
private OrbitalPosition m_PlayerOrbitalPosition;
public static void SetPlayer(OrbitalPosition player) => s_Instance.m_PlayerOrbitalPosition = player;
private float m_TimeOfLastRingSpawn = float.NegativeInfinity;
private Int64 m_LastGeneratedRing = 0;
@@ -69,7 +73,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
s_Instance.m_PrecalculatedPositions[CIRCLE_POINTS] = s_Instance.m_PrecalculatedPositions[0];
}
public void Update()
private void Update()
{
if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance)
{
@@ -130,12 +134,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
{
if (!m_Distances.ContainsKey(orbitalPosition.pRing))
{
if (orbitalPosition.m_DeletedAtCentre)
{
Destroy(orbitalPosition.owner.gameObject);
continue;
}
orbitalPosition.Behaviour.OnReachCentre();
orbitalPosition.pRing = m_LastGeneratedRing;
}
@@ -143,7 +142,26 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
orbitalPosition.DistanceFromCentre = distance;
orbitalPosition.RadiusDistance = (orbitalPosition.RadiusDistance + (Time.deltaTime * GlobalOrbitalSettings.RadiusSpeed)) % (Mathf.PI * 2);
orbitalPosition.owner.position = orbitalPosition.TranslateToVec3();
orbitalPosition.Owner.position = orbitalPosition.TranslateToVec3();
}
}
private void FixedUpdate()
{
foreach (OrbitalPosition orbital in m_ObjectInstances)
{
if (orbital == m_PlayerOrbitalPosition)
continue;
Vector2 a = orbital.TranslateToVec3();
Vector2 b = m_PlayerOrbitalPosition.TranslateToVec3();
float distance = (a - b).magnitude;
float radii = orbital.ObjectRadius + m_PlayerOrbitalPosition.ObjectRadius;
if (distance < radii)
{
orbital.Behaviour.OnCollision(m_PlayerOrbitalPosition.Behaviour);
m_PlayerOrbitalPosition.Behaviour.OnCollision(orbital.Behaviour);
}
}
}
@@ -160,9 +178,12 @@ public abstract class OrbitalPositionBehaviour : MonoBehaviour
private void Start()
{
m_OrbitalPosition = new OrbitalPosition(gameObject);
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
m_OrbitalPosition = new OrbitalPosition(gameObject)
{
Behaviour = this
};
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
OnStart();
}
@@ -170,4 +191,8 @@ public abstract class OrbitalPositionBehaviour : MonoBehaviour
GlobalOrbitalPositionManager.UnregisterOrbitalPositionInstance(m_OrbitalPosition);
public virtual void OnStart() { }
public virtual void OnReachCentre() { }
public virtual void OnCollision(OrbitalPositionBehaviour other) { }
}

View File

@@ -2,12 +2,12 @@ using UnityEngine;
public class PlayerController : OrbitalPositionBehaviour
{
float m_StartPosition;
public GameObject m_EnemyPrefab;
public override void OnStart()
{
m_OrbitalPosition.DistanceFromCentre = m_StartPosition;
GlobalOrbitalPositionManager.SetPlayer(m_OrbitalPosition);
m_OrbitalPosition.RadiusDistance = 0.4f;
}
public void Update()
@@ -22,4 +22,9 @@ public class PlayerController : OrbitalPositionBehaviour
Instantiate(m_EnemyPrefab);
}
}
public override void OnCollision(OrbitalPositionBehaviour other)
{
Debug.Log("HIT OBSTACLE IG");
}
}

View File

@@ -0,0 +1,16 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &1
MonoBehaviour:
m_ObjectHideFlags: 53
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3}
m_Name:
m_EditorClassIdentifier:
assetDefaultFramerate: 60
m_DefaultFrameRate: 60