diff options
Diffstat (limited to 'Assets/Scripts/GravityTypes')
| -rw-r--r-- | Assets/Scripts/GravityTypes/GravityPlane.cs | 45 | ||||
| -rw-r--r-- | Assets/Scripts/GravityTypes/GravityPlane.cs.meta | 11 | ||||
| -rw-r--r-- | Assets/Scripts/GravityTypes/GravitySource.cs | 22 | ||||
| -rw-r--r-- | Assets/Scripts/GravityTypes/GravitySource.cs.meta | 11 | ||||
| -rw-r--r-- | Assets/Scripts/GravityTypes/GravitySphere.cs | 49 | ||||
| -rw-r--r-- | Assets/Scripts/GravityTypes/GravitySphere.cs.meta | 11 |
6 files changed, 149 insertions, 0 deletions
diff --git a/Assets/Scripts/GravityTypes/GravityPlane.cs b/Assets/Scripts/GravityTypes/GravityPlane.cs new file mode 100644 index 0000000..81a7005 --- /dev/null +++ b/Assets/Scripts/GravityTypes/GravityPlane.cs @@ -0,0 +1,45 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class GravityPlane : GravitySource
+{
+ [SerializeField]
+ float gravity = 9.81f;
+
+ [SerializeField]
+ float range = 1f;
+
+ public override Vector3 GetGravity(Vector3 position)
+ {
+ Vector3 up = transform.up;
+ float distance = Vector3.Dot(up, position - transform.position);
+ if(distance > range)
+ return Vector3.zero;
+
+ float g = -gravity;
+ if (distance > 0f)
+ g *= 1f - distance / range;
+ return -gravity * up;
+ }
+
+ void OnDrawGizmos()
+ {
+ Vector3 scale = transform.localScale;
+ scale.y = range;
+ Gizmos.matrix = Matrix4x4.TRS(
+ transform.position,
+ transform.rotation,
+ scale
+ );
+ //transform.localToWorldMatrix;
+ Vector3 size = new Vector3(1f, 0f, 1f);
+ Gizmos.color = Color.yellow;
+ Gizmos.DrawWireCube(Vector3.zero, size);
+ if (range > 0f)
+ {
+ Gizmos.color = Color.cyan;
+ Gizmos.DrawWireCube(Vector3.up, size);
+ }
+ }
+}
diff --git a/Assets/Scripts/GravityTypes/GravityPlane.cs.meta b/Assets/Scripts/GravityTypes/GravityPlane.cs.meta new file mode 100644 index 0000000..e843793 --- /dev/null +++ b/Assets/Scripts/GravityTypes/GravityPlane.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76c633abed7adf812b42483ed0574852 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GravityTypes/GravitySource.cs b/Assets/Scripts/GravityTypes/GravitySource.cs new file mode 100644 index 0000000..0e2cc94 --- /dev/null +++ b/Assets/Scripts/GravityTypes/GravitySource.cs @@ -0,0 +1,22 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class GravitySource : MonoBehaviour
+{
+
+ public virtual Vector3 GetGravity(Vector3 position)
+ {
+ return Physics.gravity;
+ }
+
+ void OnEnable()
+ {
+ CustomGravity.Register(this);
+ }
+
+ void OnDisable()
+ {
+ CustomGravity.Unregister(this);
+ }
+}
diff --git a/Assets/Scripts/GravityTypes/GravitySource.cs.meta b/Assets/Scripts/GravityTypes/GravitySource.cs.meta new file mode 100644 index 0000000..2f4fe9f --- /dev/null +++ b/Assets/Scripts/GravityTypes/GravitySource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3bf5ff68c1211656995c0e00b5f588c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GravityTypes/GravitySphere.cs b/Assets/Scripts/GravityTypes/GravitySphere.cs new file mode 100644 index 0000000..2eb67a8 --- /dev/null +++ b/Assets/Scripts/GravityTypes/GravitySphere.cs @@ -0,0 +1,49 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class GravitySphere : GravitySource
+{
+ [SerializeField]
+ float gravity = 0.981f;
+
+ [SerializeField, Min(0f)]
+ float outerRadius = 10f;
+ [SerializeField, Min(0f)]
+ float outerFalloffRadius = 15f;
+
+ public override Vector3 GetGravity(Vector3 position)
+ {
+ Vector3 vector = transform.position - position;
+ float distance = vector.magnitude;
+ if(distance > outerFalloffRadius)
+ {
+ return Vector3.zero;
+ }
+ float g = gravity / distance;
+ return g * vector;
+ }
+
+ void OnDrawGizmos()
+ {
+ Vector3 p = transform.position;
+ Gizmos.color = Color.yellow;
+ Gizmos.DrawWireSphere(p, outerRadius);
+ if(outerFalloffRadius > outerRadius)
+ {
+ Gizmos.color = Color.cyan;
+ Gizmos.DrawWireSphere(p, outerFalloffRadius);
+ }
+ }
+
+ void Awake()
+ {
+ OnValidate();
+ }
+
+ void OnValidate()
+ {
+ outerFalloffRadius = Mathf.Max(outerFalloffRadius, outerRadius);
+ }
+
+}
diff --git a/Assets/Scripts/GravityTypes/GravitySphere.cs.meta b/Assets/Scripts/GravityTypes/GravitySphere.cs.meta new file mode 100644 index 0000000..e74fe93 --- /dev/null +++ b/Assets/Scripts/GravityTypes/GravitySphere.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 777d997ba72cd51668cb6e0122d8a184 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |
