gameover.blog.ir
رگ دال چیه ؟ رگ دال سیستمی هست بر حسب rigidbody که وقتی کاراکتر تیر می خوره یا مثلا از روی موتور می افته ولو میشه.(هر یک از پارت های فرزند گیم ابجکت در حقیقت کامپوننت rigidbody دارن که فیزیک افتادن به صورت فردی روی تمام فرزندها اجرا میشه)
برای غیرفعال کردن رگ دال یکی از راه ها این است که گزینه ی isKinematic را برای تمام ریجید بادی
های فرزند فعال کنیم(نکته: برای فعال کردن هم می توانید آن را false کنید):
using UnityEngine;
using System.Collections;
public class Ragdoll : MonoBehaviour
{
void DisableRagdoll() {
Rigidbody[] allRigidbodies = GetComponentsInChildren<Rigidbody>();
foreach(Rigidbody r in allRigidbodies) {
r.isKinematic = true;
}
}
void EnableRagdoll() {
Rigidbody[] allRigidbodies = GetComponentsInChildren<Rigidbody>();
foreach(Rigidbody r in allRigidbodies) {
r.isKinematic = false;
}
}
public void OnDeath() {
EnableRagdoll();
}
}
نکته:
اگر بخواهیم وقتی خون از صفر کمتر شد سیستم رگ دال اجرا بشه از کدی مثل این استفاده می کنیم(دوستان این کدها الگو هست):
در مثال زیر ابتدا انیمیشن در حال اجرای جاری را stop می کنیم.
سپس سیستم رگ دال را فعال می کنیم.
همچنین اسکریپت EnemyMovement را که برای حرکت کاراکتر بود غیر فعال می کنیم.(با همین روش شما باید سعی کنید تمام کامپوننت های دیگه رو در اسکریپت خودتون غیر فعال کنید. ما به طور کلی اشاره کردیم)
public void Damage(int damageValue) {
_currentHealth -= damageValue;
if (_currentHealth <=0) {
Animation a = GetComponentInChildren<Animation>();
a.Stop();
Ragdoll r = GetComponent<Ragdoll>();
if(r != null){
r.OnDeath();
} //if
} //if
} //Damage