From 78304183fb59e243a2d6da4a00a4311ae21c9717 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Fri, 15 Mar 2024 21:03:07 +0800 Subject: *misc --- _ActiveRagdoll/AnimationHandler.cs | 14 ----- _ActiveRagdoll/Balance.cs | 47 +++++++++----- _ActiveRagdoll/Holding.cs | 1 + _ActiveRagdoll/MovementDataHandler.cs | 92 ---------------------------- _ActiveRagdoll/MovementHandler.cs | 85 ------------------------- _ActiveRagdoll/PickupHandler.cs | 63 ------------------- _ActiveRagdoll/Player/AnimationHandler.cs | 15 +++++ _ActiveRagdoll/Player/MovementDataHandler.cs | 92 ++++++++++++++++++++++++++++ _ActiveRagdoll/Player/MovementHandler.cs | 86 ++++++++++++++++++++++++++ _ActiveRagdoll/Player/PickupHandler.cs | 64 +++++++++++++++++++ _ActiveRagdoll/Standing.cs | 4 +- 11 files changed, 292 insertions(+), 271 deletions(-) delete mode 100644 _ActiveRagdoll/AnimationHandler.cs delete mode 100644 _ActiveRagdoll/MovementDataHandler.cs delete mode 100644 _ActiveRagdoll/MovementHandler.cs delete mode 100644 _ActiveRagdoll/PickupHandler.cs create mode 100644 _ActiveRagdoll/Player/AnimationHandler.cs create mode 100644 _ActiveRagdoll/Player/MovementDataHandler.cs create mode 100644 _ActiveRagdoll/Player/MovementHandler.cs create mode 100644 _ActiveRagdoll/Player/PickupHandler.cs (limited to '_ActiveRagdoll') diff --git a/_ActiveRagdoll/AnimationHandler.cs b/_ActiveRagdoll/AnimationHandler.cs deleted file mode 100644 index 6011e47..0000000 --- a/_ActiveRagdoll/AnimationHandler.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEngine; - -public class AnimationHandler : MonoBehaviour -{ - public int animationState; - - private void Start() - { - } - - private void Update() - { - } -} diff --git a/_ActiveRagdoll/Balance.cs b/_ActiveRagdoll/Balance.cs index dc9ae60..06953fa 100644 --- a/_ActiveRagdoll/Balance.cs +++ b/_ActiveRagdoll/Balance.cs @@ -1,32 +1,31 @@ using UnityEngine; +//Player Balance 动作-控制身体平衡 public class Balance : MonoBehaviour { - private Rigidbody handLeft; - + #region rigs + private Rigidbody handLeft; private Rigidbody handRight; - - private Rigidbody footLeft; - - private Rigidbody footRight; - + private Rigidbody footLeft; // kneeLeft + private Rigidbody footRight; // kneeRight private Rigidbody hip; + #endregion - private Vector3 centerOfMass; + private Vector3 centerOfMass; // 5.0759, 0, -7.2038 - private Rigidbody[] allRigs; + private Rigidbody[] allRigs;//所有14个parts - public float[] balanceForce; + public float[] balanceForce; // 50 30 30 30 - public float[] footCenterForces; + public float[] footCenterForces; // 50 20 20 20 - private AnimationHandler animationHandler; + private AnimationHandler animationHandler; // 当前动作编号 private PlayerDeath death; private Strength str; - private float muscleMultiplier; + private float muscleMultiplier; // 1 private void Start() { @@ -90,11 +89,27 @@ public class Balance : MonoBehaviour Vector3 vector = footLeft.transform.position + footLeft.transform.forward * 0.5f; Vector3 vector2 = footRight.transform.position + footRight.transform.forward * 0.5f; Vector3 vector3 = (vector + vector2) / 2f; - if (!(vector3.y + 0.3f > hip.worldCenterOfMass.y)) + + Vector3 pos = vector3; + pos.y += 0.3f; + + if (!(vector3.y + 0.3f > hip.worldCenterOfMass.y)) { vector3.y = 0f; - Vector3 vector4 = centerOfMass - vector3; - footLeft.AddForceAtPosition(vector4 * muscleMultiplier * balanceForce[animationHandler.animationState], vector, ForceMode.Acceleration); + Vector3 vector4 = centerOfMass - vector3; // centerOfMass是xoz平面,不含y + REPL.footCenter.GetComponent().customDraw = () => + { + Draw.Sphere(vector, 0.05f); + Draw.Sphere(vector2, 0.05f); + Draw.Sphere(pos, 0.05f); + Draw.Sphere(vector3, 0.05f); + Draw.Sphere(hip.worldCenterOfMass, 0.2f); + + Draw.Sphere(centerOfMass, 0.05f); + Draw.Line3D(vector3 + new Vector3(0, footLeft.transform.position.y, 0), centerOfMass + new Vector3(0, footLeft.transform.position.y, 0)); + }; + + footLeft.AddForceAtPosition(vector4 * muscleMultiplier * balanceForce[animationHandler.animationState], vector, ForceMode.Acceleration); footRight.AddForceAtPosition(vector4 * muscleMultiplier * balanceForce[animationHandler.animationState], vector2, ForceMode.Acceleration); } } diff --git a/_ActiveRagdoll/Holding.cs b/_ActiveRagdoll/Holding.cs index dafc08b..eb27095 100644 --- a/_ActiveRagdoll/Holding.cs +++ b/_ActiveRagdoll/Holding.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +//Player Holding 动作-拿武器 public class Holding : MonoBehaviour { [HideInInspector] diff --git a/_ActiveRagdoll/MovementDataHandler.cs b/_ActiveRagdoll/MovementDataHandler.cs deleted file mode 100644 index 18d43f5..0000000 --- a/_ActiveRagdoll/MovementDataHandler.cs +++ /dev/null @@ -1,92 +0,0 @@ -using UnityEngine; - -public class MovementDataHandler : MonoBehaviour -{ - [HideInInspector] - public Vector3 groundedForward; - - [HideInInspector] - public Vector3 right; - - [HideInInspector] - public Vector3 left; - - [HideInInspector] - public Vector3 groundedBack; - - private Transform hip; - - private Transform torso; - - public Transform rotationTarget; - - [HideInInspector] - public float slopeStrenght; - - public float slopeVelocityStrenght; - - [HideInInspector] - public float sinceJump = 1f; - - [HideInInspector] - public Vector3 groundNormal; - - private InputHandler inputHandler; - - private Transform leftKnee; - - private Transform rightKnee; - - private void Start() - { - inputHandler = GetComponent(); - hip = GetComponentInChildren().transform; - torso = GetComponentInChildren().transform; - if (!rotationTarget) - { - rotationTarget = GetComponentInChildren().transform; - } - KneeLeft componentInChildren = GetComponentInChildren(); - if ((bool)componentInChildren) - { - leftKnee = componentInChildren.transform; - } - KneeRight componentInChildren2 = GetComponentInChildren(); - if ((bool)componentInChildren2) - { - rightKnee = componentInChildren2.transform; - } - } - - private void Update() - { - sinceJump += Time.deltaTime; - groundedForward = rotationTarget.forward; - groundedForward.y = slopeStrenght * 1f; - groundedForward = groundedForward.normalized; - groundedBack = -groundedForward; - right = rotationTarget.right; - left = -rotationTarget.right; - slopeStrenght = Mathf.Lerp(slopeStrenght, 0f, Time.deltaTime * 1f); - Debug.DrawLine(hip.position, hip.position + groundedForward * 10f); - } - - public void SetSlope(Vector3 normal) - { - groundNormal = normal; - slopeStrenght = Vector3.Cross(rotationTarget.right, normal).y; - Vector3 lhs = Vector3.Cross(Vector3.up, inputHandler.inputMovementDirection); - slopeVelocityStrenght = Vector3.Cross(lhs, normal).y; - } - - public float GetSmallestLegAngle() - { - float num = Vector3.Angle(leftKnee.forward, Vector3.down); - float num2 = Vector3.Angle(rightKnee.forward, Vector3.down); - if (num < num2) - { - return num; - } - return num2; - } -} diff --git a/_ActiveRagdoll/MovementHandler.cs b/_ActiveRagdoll/MovementHandler.cs deleted file mode 100644 index 22795f7..0000000 --- a/_ActiveRagdoll/MovementHandler.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System.Collections; -using UnityEngine; - -public class MovementHandler : MonoBehaviour -{ - private InputHandler inputHandler; - - public float friction = 0.9f; - - public Vector3 movementVector; - - public float[] animationForceAmounts; - - private AnimationHandler animationHandler; - - private RigidbodyHolder allRigs; - - public AnimationCurve jumpCurve; - - public float jumpForce; - - private StandingDataHandler standingData; - - private MovementDataHandler data; - - private PlayerDeath death; - - [HideInInspector] - public float multiplier = 1f; - - private WobbleShake wobbleShake; - - private void Start() - { - wobbleShake = GetComponentInChildren(); - death = GetComponent(); - standingData = GetComponent(); - inputHandler = GetComponent(); - animationHandler = GetComponent(); - allRigs = GetComponent(); - data = GetComponent(); - } - - private void FixedUpdate() - { - if (!death.dead) - { - data.sinceJump += Time.fixedDeltaTime; - movementVector += inputHandler.inputMovementDirection * animationForceAmounts[animationHandler.animationState]; - movementVector *= friction; - for (int i = 0; i < allRigs.GetAllRigs().Length; i++) - { - allRigs.GetAllRigs()[i].AddForce(movementVector * multiplier, ForceMode.Acceleration); - } - } - } - - public void Jump() - { - if (!(data.sinceJump < 0.5f) && !(standingData.sinceGrounded > 0.3f)) - { - data.sinceJump = 0f; - StartCoroutine(AddJumpForce()); - wobbleShake.AddShake(Vector3.up * 2f, 0.8f); - } - } - - private IEnumerator AddJumpForce() - { - float counter = 0f; - for (int i = 0; i < allRigs.GetAllRigs().Length; i++) - { - allRigs.GetAllRigs()[i].velocity = new Vector3(allRigs.GetAllRigs()[i].velocity.x, 0f, allRigs.GetAllRigs()[i].velocity.z); - } - while (counter < jumpCurve.keys[jumpCurve.length - 1].time && !death.dead) - { - counter += Time.deltaTime; - for (int j = 0; j < allRigs.GetAllRigs().Length; j++) - { - allRigs.GetAllRigs()[j].AddForce(Vector3.up * multiplier * jumpForce * jumpCurve.Evaluate(counter) * Time.deltaTime, ForceMode.Acceleration); - } - yield return null; - } - } -} diff --git a/_ActiveRagdoll/PickupHandler.cs b/_ActiveRagdoll/PickupHandler.cs deleted file mode 100644 index 8bf1615..0000000 --- a/_ActiveRagdoll/PickupHandler.cs +++ /dev/null @@ -1,63 +0,0 @@ -using UnityEngine; - -public class PickupHandler : MonoBehaviour -{ - public Pickup setWeapon; - - public Pickup setWeapon2; - - private WeaponHandler weaponHandler; - - private Holding holding; - - private float counter; - - private void Start() - { - weaponHandler = GetComponent(); - holding = GetComponent(); - if ((bool)setWeapon) - { - PickUp(setWeapon); - } - if ((bool)setWeapon2) - { - PickUp2(setWeapon2); - } - } - - private void Update() - { - counter += Time.deltaTime; - } - - public void PickUp(Pickup objectToPickUp) - { - if (!(counter < 1f)) - { - counter = 0f; - holding.Drop(); - Weapon component = objectToPickUp.GetComponent(); - Gun component2 = component.GetComponent(); - weaponHandler.SetGun(component2, mainHand: true); - bool hasOffHand = false; - if ((bool)setWeapon2) - { - hasOffHand = true; - } - HoldableObject component3 = component.GetComponent(); - component3.holder = base.transform; - holding.StartHolding(component3, hasOffHand); - } - } - - public void PickUp2(Pickup objectToPickUp) - { - Weapon component = objectToPickUp.GetComponent(); - Gun component2 = component.GetComponent(); - weaponHandler.SetGun(component2, mainHand: false); - HoldableObject component3 = component.GetComponent(); - component3.holder = base.transform; - holding.StartHolding(component3, hasOffHand: true); - } -} diff --git a/_ActiveRagdoll/Player/AnimationHandler.cs b/_ActiveRagdoll/Player/AnimationHandler.cs new file mode 100644 index 0000000..382b3a5 --- /dev/null +++ b/_ActiveRagdoll/Player/AnimationHandler.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +//Player AnimationHandler 记录当前动作状态编号 +public class AnimationHandler : MonoBehaviour +{ + public int animationState; + + private void Start() + { + } + + private void Update() + { + } +} diff --git a/_ActiveRagdoll/Player/MovementDataHandler.cs b/_ActiveRagdoll/Player/MovementDataHandler.cs new file mode 100644 index 0000000..18d43f5 --- /dev/null +++ b/_ActiveRagdoll/Player/MovementDataHandler.cs @@ -0,0 +1,92 @@ +using UnityEngine; + +public class MovementDataHandler : MonoBehaviour +{ + [HideInInspector] + public Vector3 groundedForward; + + [HideInInspector] + public Vector3 right; + + [HideInInspector] + public Vector3 left; + + [HideInInspector] + public Vector3 groundedBack; + + private Transform hip; + + private Transform torso; + + public Transform rotationTarget; + + [HideInInspector] + public float slopeStrenght; + + public float slopeVelocityStrenght; + + [HideInInspector] + public float sinceJump = 1f; + + [HideInInspector] + public Vector3 groundNormal; + + private InputHandler inputHandler; + + private Transform leftKnee; + + private Transform rightKnee; + + private void Start() + { + inputHandler = GetComponent(); + hip = GetComponentInChildren().transform; + torso = GetComponentInChildren().transform; + if (!rotationTarget) + { + rotationTarget = GetComponentInChildren().transform; + } + KneeLeft componentInChildren = GetComponentInChildren(); + if ((bool)componentInChildren) + { + leftKnee = componentInChildren.transform; + } + KneeRight componentInChildren2 = GetComponentInChildren(); + if ((bool)componentInChildren2) + { + rightKnee = componentInChildren2.transform; + } + } + + private void Update() + { + sinceJump += Time.deltaTime; + groundedForward = rotationTarget.forward; + groundedForward.y = slopeStrenght * 1f; + groundedForward = groundedForward.normalized; + groundedBack = -groundedForward; + right = rotationTarget.right; + left = -rotationTarget.right; + slopeStrenght = Mathf.Lerp(slopeStrenght, 0f, Time.deltaTime * 1f); + Debug.DrawLine(hip.position, hip.position + groundedForward * 10f); + } + + public void SetSlope(Vector3 normal) + { + groundNormal = normal; + slopeStrenght = Vector3.Cross(rotationTarget.right, normal).y; + Vector3 lhs = Vector3.Cross(Vector3.up, inputHandler.inputMovementDirection); + slopeVelocityStrenght = Vector3.Cross(lhs, normal).y; + } + + public float GetSmallestLegAngle() + { + float num = Vector3.Angle(leftKnee.forward, Vector3.down); + float num2 = Vector3.Angle(rightKnee.forward, Vector3.down); + if (num < num2) + { + return num; + } + return num2; + } +} diff --git a/_ActiveRagdoll/Player/MovementHandler.cs b/_ActiveRagdoll/Player/MovementHandler.cs new file mode 100644 index 0000000..4579efc --- /dev/null +++ b/_ActiveRagdoll/Player/MovementHandler.cs @@ -0,0 +1,86 @@ +using System.Collections; +using UnityEngine; + +//Player MovementHandler 控制移动、跳跃 +public class MovementHandler : MonoBehaviour +{ + private InputHandler inputHandler; + + public float friction = 0.9f; + + public Vector3 movementVector; + + public float[] animationForceAmounts; + + private AnimationHandler animationHandler; + + private RigidbodyHolder allRigs; + + public AnimationCurve jumpCurve; + + public float jumpForce; + + private StandingDataHandler standingData; + + private MovementDataHandler data; + + private PlayerDeath death; + + [HideInInspector] + public float multiplier = 1f; + + private WobbleShake wobbleShake; + + private void Start() + { + wobbleShake = GetComponentInChildren(); + death = GetComponent(); + standingData = GetComponent(); + inputHandler = GetComponent(); + animationHandler = GetComponent(); + allRigs = GetComponent(); + data = GetComponent(); + } + + private void FixedUpdate() + { + if (!death.dead) + { + data.sinceJump += Time.fixedDeltaTime; + movementVector += inputHandler.inputMovementDirection * animationForceAmounts[animationHandler.animationState]; + movementVector *= friction; + for (int i = 0; i < allRigs.GetAllRigs().Length; i++) + { + allRigs.GetAllRigs()[i].AddForce(movementVector * multiplier, ForceMode.Acceleration); + } + } + } + + public void Jump() + { + if (!(data.sinceJump < 0.5f) && !(standingData.sinceGrounded > 0.3f)) + { + data.sinceJump = 0f; + StartCoroutine(AddJumpForce()); + wobbleShake.AddShake(Vector3.up * 2f, 0.8f); + } + } + + private IEnumerator AddJumpForce() + { + float counter = 0f; + for (int i = 0; i < allRigs.GetAllRigs().Length; i++) + { + allRigs.GetAllRigs()[i].velocity = new Vector3(allRigs.GetAllRigs()[i].velocity.x, 0f, allRigs.GetAllRigs()[i].velocity.z); + } + while (counter < jumpCurve.keys[jumpCurve.length - 1].time && !death.dead) + { + counter += Time.deltaTime; + for (int j = 0; j < allRigs.GetAllRigs().Length; j++) + { + allRigs.GetAllRigs()[j].AddForce(Vector3.up * multiplier * jumpForce * jumpCurve.Evaluate(counter) * Time.deltaTime, ForceMode.Acceleration); + } + yield return null; + } + } +} diff --git a/_ActiveRagdoll/Player/PickupHandler.cs b/_ActiveRagdoll/Player/PickupHandler.cs new file mode 100644 index 0000000..6a3a249 --- /dev/null +++ b/_ActiveRagdoll/Player/PickupHandler.cs @@ -0,0 +1,64 @@ +using UnityEngine; + +//Player PickupHandler 捡武器 +public class PickupHandler : MonoBehaviour +{ + public Pickup setWeapon; + + public Pickup setWeapon2; + + private WeaponHandler weaponHandler; + + private Holding holding; // holding动作 + + private float counter; + + private void Start() + { + weaponHandler = GetComponent(); + holding = GetComponent(); + if ((bool)setWeapon) + { + PickUp(setWeapon); + } + if ((bool)setWeapon2) + { + PickUp2(setWeapon2); + } + } + + private void Update() + { + counter += Time.deltaTime; + } + + public void PickUp(Pickup objectToPickUp) + { + if (!(counter < 1f)) + { + counter = 0f; + holding.Drop(); + Weapon component = objectToPickUp.GetComponent(); + Gun component2 = component.GetComponent(); + weaponHandler.SetGun(component2, mainHand: true); + bool hasOffHand = false; + if ((bool)setWeapon2) + { + hasOffHand = true; + } + HoldableObject component3 = component.GetComponent(); + component3.holder = base.transform; + holding.StartHolding(component3, hasOffHand); + } + } + + public void PickUp2(Pickup objectToPickUp) + { + Weapon component = objectToPickUp.GetComponent(); + Gun component2 = component.GetComponent(); + weaponHandler.SetGun(component2, mainHand: false); + HoldableObject component3 = component.GetComponent(); + component3.holder = base.transform; + holding.StartHolding(component3, hasOffHand: true); + } +} diff --git a/_ActiveRagdoll/Standing.cs b/_ActiveRagdoll/Standing.cs index afbfd8b..2af0e4b 100644 --- a/_ActiveRagdoll/Standing.cs +++ b/_ActiveRagdoll/Standing.cs @@ -1,8 +1,9 @@ using UnityEngine; +//Player Standing 动作-站立 public class Standing : MonoBehaviour { - public RigidbodyMovment[] rigsToLift; + public RigidbodyMovment[] rigsToLift; //Head, Torso public AnimationCurve[] animationLiftCurves; @@ -49,6 +50,7 @@ public class Standing : MonoBehaviour RigidbodyMovment[] array = rigsToLift; foreach (RigidbodyMovment rigidbodyMovment in array) { + // 施加一个向上的力 rigidbodyMovment.rig.AddForce(Vector3.up * muscleMultiplier * rigidbodyMovment.force * legAngleMultiplier * curve.Evaluate(standingData.distanceToGround + offset + moveData.slopeVelocityStrenght * -0.2f), ForceMode.Acceleration); } } -- cgit v1.1-26-g67d0