Pull request #10: Ragdoll

Merge in CEGJ/32bit_jam_conjure from Ragdoll to Dev

* commit '65835ffdfa0847b2a57e557d330e4df8d089b367':
  Added Radoll script with example
This commit is contained in:
Guillaume Langlois 03 2022-10-28 21:49:13 +00:00 committed by William Gingras 01
commit c8b87eb04c
9 changed files with 3180 additions and 0 deletions

8
Assets/Models.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b937b76b52cd57d4fafeed740013ea0a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,73 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Argon
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 7214284557114207221}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &7110728152036530755
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Armature|t_pose
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -435624762207290869, guid: a43af84b3da50a24f8c21454b4ec319f,
type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &7214284557114207221
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 7110728152036530755}
m_Position: {x: 270, y: 110, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 7110728152036530755}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8782bbceccadcdf4ba6d6f8fb6990b1d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Prefabs/Argon.fbx Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

1366
Assets/Scenes/Ragdoll.unity Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 30fcca8dbdd3d5c4e89b9cdd2dce4b40
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

100
Assets/Scripts/Ragdoll.cs Normal file
View File

@ -0,0 +1,100 @@
using UnityEngine;
using System.Linq;
using System.Collections.Generic;
using UnityEngine.Rendering;
using System.ComponentModel;
/**
* Code Inspired by these tutorial
* Source: https://www.youtube.com/watch?v=KuMe6Iz8pFI, https://www.youtube.com/watch?v=B_NnQQKiw6I
* Consulted on : 24/10/2022
*/
public class Ragdoll : MonoBehaviour
{
[SerializeField]
private bool _startsRagdolled;
private List<Rigidbody> _ragdollRigidbodies;
private Animator _animator;
private Transform _hipBone;
private bool _isRagdoll
{
get { return _ragdollRigidbodies != null && !_ragdollRigidbodies.Select(x => x.isKinematic).FirstOrDefault(); }
}
// Start is called before the first frame update
private void Start()
{
}
private void Awake()
{
_ragdollRigidbodies = GetComponentsInChildren<Rigidbody>().ToList();
_animator = GetComponent<Animator>();
_hipBone = _animator.GetBoneTransform(HumanBodyBones.Hips);
void setRagdollState()
{
if (_startsRagdolled)
{
EnableRagdoll();
}
else
{
DisableRagdoll();
}
}
setRagdollState();
}
// Update is called once per frame
private void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
if (_isRagdoll)
{
DisableRagdoll();
}
else
{
EnableRagdoll();
}
}
}
private void EnableRagdoll()
{
_ragdollRigidbodies.ForEach(rigidbody => rigidbody.isKinematic = false);
_animator.enabled = false;
}
private void DisableRagdoll()
{
_ragdollRigidbodies.ForEach(rigidbody => rigidbody.isKinematic = true);
_animator.enabled = true;
StandBackUp();
}
private void StandBackUp()
{
Vector3 originalHipsPosition = _hipBone.position;
transform.position = originalHipsPosition;
void setRightHeight()
{
if (Physics.Raycast(transform.position, Vector3.down, out RaycastHit hitInfo))
{
transform.position = new Vector3(transform.position.x, hitInfo.point.y, transform.position.z);
}
}
setRightHeight();
_hipBone.position = originalHipsPosition;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 54b4af10a3fe94f46bb698f348872322
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: