use prefab to spawn dead body

This commit is contained in:
in0finite 2021-01-05 18:21:57 +01:00
parent 75d9ca5f35
commit 8469f18862
6 changed files with 124 additions and 8 deletions

View file

@ -0,0 +1,95 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2141754834917738923
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4130636948537856663}
- component: {fileID: 4038138864584441180}
- component: {fileID: 3458215582039164093}
- component: {fileID: 3928823046603185135}
- component: {fileID: 7017421174877670493}
m_Layer: 0
m_Name: DeadBody
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4130636948537856663
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2141754834917738923}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4038138864584441180
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2141754834917738923}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9b91ecbcc199f4492b9a91e820070131, type: 3}
m_Name:
m_EditorClassIdentifier:
serverOnly: 0
localPlayerAuthority: 0
m_AssetId:
m_SceneId: 3719402579
--- !u!114 &3458215582039164093
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2141754834917738923}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 52246fc08ef54f047800aa1a2be91fd2, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &3928823046603185135
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2141754834917738923}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 62374ff6df2c74f9699075492ef7fdb9, type: 3}
m_Name:
m_EditorClassIdentifier:
m_health: 0
m_onDamage:
m_PersistentCalls:
m_Calls: []
m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null
--- !u!114 &7017421174877670493
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2141754834917738923}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4dafeb77b323d57489cc5b15183dc41b, type: 3}
m_Name:
m_EditorClassIdentifier:
forceMultiplier: 1

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 14d22e60f4926f64cbd36f393fe11b9a
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -171,6 +171,8 @@ MonoBehaviour:
AIOutOfRangeTimeout: 5
AIOutOfRangeDistance: 250
pedSyncRate: 20
ragdollPrefab: {fileID: 2141754834917738923, guid: 14d22e60f4926f64cbd36f393fe11b9a,
type: 3}
ragdollMass: 100
ragdollLifetime: 90
ragdollDrag: 0.05

View file

@ -1,4 +1,5 @@
using System.Collections.Generic;
using SanAndreasUnity.Utilities;
using UnityEngine;
namespace SanAndreasUnity.Behaviours.Peds
@ -9,6 +10,15 @@ namespace SanAndreasUnity.Behaviours.Peds
public static IEnumerable<DeadBody> DeadBodies => _deadBodies;
public static int NumDeadBodies => _deadBodies.Count;
public PushableByDamage PushableByDamage { get; private set; }
private void Awake()
{
this.PushableByDamage = this.GetComponentOrThrow<PushableByDamage>();
this.PushableByDamage.forceMultiplier = PedManager.Instance.ragdollDamageForceWhenDetached;
}
private void OnEnable()
{
_deadBodies.Add(this);

View file

@ -57,6 +57,7 @@ namespace SanAndreasUnity.Behaviours
[Header("Ragdoll")]
public GameObject ragdollPrefab;
public float ragdollMass = 100f;
public float ragdollLifetime = 30f;
public float ragdollDrag = 0.05f;

View file

@ -383,7 +383,7 @@ namespace SanAndreasUnity.Behaviours
}
public Transform DetachRagdoll(DamageInfo damageInfo)
public GameObject DetachRagdoll(DamageInfo damageInfo)
{
if (null == m_ragdollBuilder)
return null;
@ -406,7 +406,6 @@ namespace SanAndreasUnity.Behaviours
m_ragdollBuilder = null;
ragdollTransform.SetParent(null);
ragdollTransform.name = "dead body " + m_ped.name;
// setup rigid bodies
foreach (var rb in ragdollTransform.GetComponentsInChildren<Rigidbody>())
@ -436,14 +435,16 @@ namespace SanAndreasUnity.Behaviours
// change layer
ragdollTransform.gameObject.SetLayerRecursive(GameManager.DefaultLayerIndex);
Object.Destroy(ragdollTransform.gameObject, PedManager.Instance.ragdollLifetime * Random.Range(0.85f, 1.15f));
GameObject ragdollGameObject = Object.Instantiate(PedManager.Instance.ragdollPrefab);
Object.Destroy(ragdollGameObject, PedManager.Instance.ragdollLifetime * Random.Range(0.85f, 1.15f));
ragdollGameObject.name = "dead body " + m_ped.name;
ragdollTransform.SetParent(ragdollGameObject.transform);
ragdollGameObject.GetComponentOrThrow<DeadBody>();
ragdollTransform.gameObject.AddComponent<DeadBody>();
ragdollTransform.gameObject.AddComponent<Damageable>();
var pushableByDamage = ragdollTransform.gameObject.AddComponent<PushableByDamage>();
pushableByDamage.forceMultiplier = PedManager.Instance.ragdollDamageForceWhenDetached;
if (Net.NetStatus.IsServer)
Net.NetManager.Spawn(ragdollGameObject);
return ragdollTransform;
return ragdollGameObject;
}
public float GetAmountOfDamageForBone(Transform boneTransform, float baseDamageValue)