From 72c0636d460dbff953f14abdee1fd2e6cb6213c0 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sat, 12 Jun 2021 14:59:41 -0400 Subject: Physics in FixedUpdate --- Assets/Prefabs/Player.prefab | 4 +++ Assets/Scenes/Main.unity | 8 ++++-- .../Scripts/Controllers/Player/PlayerController.cs | 33 +++++++++------------- Assets/Scripts/Controllers/Player/PlayerSegment.cs | 24 ++++++++++++++++ 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab index 521b4bf..a7aaff7 100644 --- a/Assets/Prefabs/Player.prefab +++ b/Assets/Prefabs/Player.prefab @@ -1132,6 +1132,8 @@ MonoBehaviour: arm: {fileID: 8845918641001187994} forceOrigin: {x: 0, y: 0.5, z: 0} height: 0 + isRoot: 0 + isTop: 1 --- !u!50 &6095859832867562452 Rigidbody2D: serializedVersion: 4 @@ -1424,6 +1426,8 @@ MonoBehaviour: arm: {fileID: 61032117990659215} forceOrigin: {x: 0, y: -0.5, z: 0} height: 0 + isRoot: 1 + isTop: 0 --- !u!50 &6095859833589646292 Rigidbody2D: serializedVersion: 4 diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index d003365..8979071 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -353,6 +353,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 6267610020350316690, guid: 2485406c33a7d4f5481ce936cc9b162e, type: 3} + propertyPath: shotForce + value: 1000 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 2485406c33a7d4f5481ce936cc9b162e, type: 3} --- !u!114 &707826158 stripped @@ -431,7 +435,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6095859834264611326, guid: c64ad9b908cb44602b3d13a74aef751f, type: 3} propertyPath: sensitivity - value: 2 + value: 10 objectReference: {fileID: 0} - target: {fileID: 6095859834264611326, guid: c64ad9b908cb44602b3d13a74aef751f, type: 3} propertyPath: upSensitivity @@ -439,7 +443,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 6095859834264611326, guid: c64ad9b908cb44602b3d13a74aef751f, type: 3} propertyPath: verticalSensitivity - value: 1.5 + value: 7.5 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c64ad9b908cb44602b3d13a74aef751f, type: 3} diff --git a/Assets/Scripts/Controllers/Player/PlayerController.cs b/Assets/Scripts/Controllers/Player/PlayerController.cs index eca4641..3674d92 100644 --- a/Assets/Scripts/Controllers/Player/PlayerController.cs +++ b/Assets/Scripts/Controllers/Player/PlayerController.cs @@ -17,15 +17,21 @@ namespace Controllers.Player [SerializeField] private float maxLegAngle; [SerializeField] private float legSpeed; - + + private void Awake() + { + foreach (var segment in segments) { + segment.sensitivity = sensitivity; + segment.verticalSensitivity = verticalSensitivity; + } + } + private void Update() { // Loop over each body segment and control it. for (var i = 0; i < segments.Length; i++) { var segment = segments[i]; - var isRoot = i == 0; - var isTop = i == segments.Length - 1; // Update icons foreach (var control in new[] {segment.left, segment.right}) @@ -37,24 +43,11 @@ namespace Controllers.Player } // Add forces - if (Input.GetKey(segment.left.keyCode)) - { - segment.Rigidbody.AddForceAtPosition( - Vector2.left * (sensitivity * (isRoot ? 2f : 1f)) + - Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), - segment.transform.position + (segment.height * segment.forceOrigin)); - } - - if (Input.GetKey(segment.right.keyCode)) - { - segment.Rigidbody.AddForceAtPosition( - Vector2.right * (sensitivity * (isRoot ? 2f : 1f)) + - Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), - segment.transform.position + (segment.height * segment.forceOrigin)); - } + segment.moveleft = Input.GetKey(segment.left.keyCode); + segment.moveright = Input.GetKey(segment.right.keyCode); // Rotate the legs if we move. - if (isRoot) + if (segment.isRoot) { if (Input.GetKey(segment.left.keyCode) || Input.GetKey(segment.right.keyCode)) { @@ -70,7 +63,7 @@ namespace Controllers.Player } } - if (isTop) + if (segment.isTop) { game.player.Move(segment.transform.position); diff --git a/Assets/Scripts/Controllers/Player/PlayerSegment.cs b/Assets/Scripts/Controllers/Player/PlayerSegment.cs index b713442..4d0fb4f 100644 --- a/Assets/Scripts/Controllers/Player/PlayerSegment.cs +++ b/Assets/Scripts/Controllers/Player/PlayerSegment.cs @@ -6,15 +6,39 @@ namespace Controllers.Player [RequireComponent(typeof(Rigidbody2D))] public class PlayerSegment : MonoBehaviour { + internal float sensitivity; + internal float verticalSensitivity; + + internal bool moveleft; + internal bool moveright; + [SerializeField] public Control left; [SerializeField] public Control right; [SerializeField] public Vector3 forceOrigin; [SerializeField] public float height; + [SerializeField] public bool isRoot; + [SerializeField] public bool isTop; public Rigidbody2D Rigidbody => _rigidbody != null ? _rigidbody : _rigidbody = GetComponent(); private Rigidbody2D _rigidbody; + + private void FixedUpdate() + { + if (moveleft) + { + Rigidbody.AddForceAtPosition( + Vector2.left * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), + transform.position + (height * forceOrigin)); + } + if (moveright) + { + Rigidbody.AddForceAtPosition( + Vector2.right * (sensitivity * (isRoot ? 2f : 1f)) + Vector2.up * (verticalSensitivity * (isRoot ? -1f : 1f)), + transform.position + (height * forceOrigin)); + } + } } [Serializable] -- cgit v1.2.3-56-ge451