Added custom collision
This commit is contained in:
@@ -56,7 +56,6 @@ GameObject:
|
|||||||
- component: {fileID: 1739635715747709762}
|
- component: {fileID: 1739635715747709762}
|
||||||
- component: {fileID: 5026174633141696716}
|
- component: {fileID: 5026174633141696716}
|
||||||
- component: {fileID: 8577569336777110376}
|
- component: {fileID: 8577569336777110376}
|
||||||
- component: {fileID: 4859736940813683666}
|
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Model
|
m_Name: Model
|
||||||
m_TagString: Enemy
|
m_TagString: Enemy
|
||||||
@@ -129,48 +128,3 @@ MeshFilter:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 4804673878835712602}
|
m_GameObject: {fileID: 4804673878835712602}
|
||||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
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
|
|
||||||
|
|||||||
@@ -4,6 +4,12 @@ public class EnemyController : OrbitalPositionBehaviour
|
|||||||
{
|
{
|
||||||
public override void OnStart()
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,16 +7,17 @@ public class OrbitalPosition
|
|||||||
public Int64 pRing = 0;
|
public Int64 pRing = 0;
|
||||||
public float DistanceFromCentre = 0;
|
public float DistanceFromCentre = 0;
|
||||||
public float RadiusDistance = 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 int SpinSpeed = 1;
|
||||||
public bool m_DeletedAtCentre = false;
|
|
||||||
|
|
||||||
public OrbitalPosition(GameObject _owner)
|
public OrbitalPosition(GameObject _owner)
|
||||||
{
|
{
|
||||||
pRing = GlobalOrbitalPositionManager.LastRingID;
|
pRing = GlobalOrbitalPositionManager.LastRingID;
|
||||||
owner = _owner.transform;
|
Owner = _owner.transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector3 TranslateToVec3() => new
|
public Vector3 TranslateToVec3() => new
|
||||||
@@ -38,6 +39,9 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
|
|||||||
private readonly List<Ring> m_Rings = new();
|
private readonly List<Ring> m_Rings = new();
|
||||||
private readonly Dictionary<Int64, float> m_Distances = 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 float m_TimeOfLastRingSpawn = float.NegativeInfinity;
|
||||||
|
|
||||||
private Int64 m_LastGeneratedRing = 0;
|
private Int64 m_LastGeneratedRing = 0;
|
||||||
@@ -69,7 +73,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
|
|||||||
s_Instance.m_PrecalculatedPositions[CIRCLE_POINTS] = s_Instance.m_PrecalculatedPositions[0];
|
s_Instance.m_PrecalculatedPositions[CIRCLE_POINTS] = s_Instance.m_PrecalculatedPositions[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance)
|
if (Time.time - m_TimeOfLastRingSpawn > GlobalOrbitalSettings.GapDistance)
|
||||||
{
|
{
|
||||||
@@ -130,12 +134,7 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
|
|||||||
{
|
{
|
||||||
if (!m_Distances.ContainsKey(orbitalPosition.pRing))
|
if (!m_Distances.ContainsKey(orbitalPosition.pRing))
|
||||||
{
|
{
|
||||||
if (orbitalPosition.m_DeletedAtCentre)
|
orbitalPosition.Behaviour.OnReachCentre();
|
||||||
{
|
|
||||||
Destroy(orbitalPosition.owner.gameObject);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
orbitalPosition.pRing = m_LastGeneratedRing;
|
orbitalPosition.pRing = m_LastGeneratedRing;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +142,26 @@ public class GlobalOrbitalPositionManager : MonoBehaviour
|
|||||||
orbitalPosition.DistanceFromCentre = distance;
|
orbitalPosition.DistanceFromCentre = distance;
|
||||||
orbitalPosition.RadiusDistance = (orbitalPosition.RadiusDistance + (Time.deltaTime * GlobalOrbitalSettings.RadiusSpeed)) % (Mathf.PI * 2);
|
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()
|
private void Start()
|
||||||
{
|
{
|
||||||
m_OrbitalPosition = new OrbitalPosition(gameObject);
|
m_OrbitalPosition = new OrbitalPosition(gameObject)
|
||||||
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
|
{
|
||||||
|
Behaviour = this
|
||||||
|
};
|
||||||
|
|
||||||
|
GlobalOrbitalPositionManager.RegisterOrbitalPositionInstance(m_OrbitalPosition);
|
||||||
OnStart();
|
OnStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,4 +191,8 @@ public abstract class OrbitalPositionBehaviour : MonoBehaviour
|
|||||||
GlobalOrbitalPositionManager.UnregisterOrbitalPositionInstance(m_OrbitalPosition);
|
GlobalOrbitalPositionManager.UnregisterOrbitalPositionInstance(m_OrbitalPosition);
|
||||||
|
|
||||||
public virtual void OnStart() { }
|
public virtual void OnStart() { }
|
||||||
|
|
||||||
|
public virtual void OnReachCentre() { }
|
||||||
|
|
||||||
|
public virtual void OnCollision(OrbitalPositionBehaviour other) { }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ using UnityEngine;
|
|||||||
|
|
||||||
public class PlayerController : OrbitalPositionBehaviour
|
public class PlayerController : OrbitalPositionBehaviour
|
||||||
{
|
{
|
||||||
float m_StartPosition;
|
|
||||||
public GameObject m_EnemyPrefab;
|
public GameObject m_EnemyPrefab;
|
||||||
|
|
||||||
public override void OnStart()
|
public override void OnStart()
|
||||||
{
|
{
|
||||||
m_OrbitalPosition.DistanceFromCentre = m_StartPosition;
|
GlobalOrbitalPositionManager.SetPlayer(m_OrbitalPosition);
|
||||||
|
m_OrbitalPosition.RadiusDistance = 0.4f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
@@ -22,4 +22,9 @@ public class PlayerController : OrbitalPositionBehaviour
|
|||||||
Instantiate(m_EnemyPrefab);
|
Instantiate(m_EnemyPrefab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnCollision(OrbitalPositionBehaviour other)
|
||||||
|
{
|
||||||
|
Debug.Log("HIT OBSTACLE IG");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
16
ProjectSettings/TimelineSettings.asset
Normal file
16
ProjectSettings/TimelineSettings.asset
Normal 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
|
||||||
Reference in New Issue
Block a user