בקר דמות כיצד להוסיף יכולת לדחוף גופים קשיחים באחדות

במדריך זה, נשפר את הסקריפט Unity FPS Controller כדי לאפשר לדמות לדחוף גופים קשיחים בתוך הסצנה (הסקריפט למטה אמור לעבוד עם כל בקר, כל עוד יש לו רכיב CharacterController מחובר ). סקריפט זה יכול להוסיף מגע מציאותי למשחק שלך על ידי כך שהוא מאפשר לשחקנים אינטראקציה עם אובייקטים וסביבות דינמיות.

שלב 1: צור סקריפט חדש

  • צור סקריפט C# חדש בפרויקט Unity שלך. אתה יכול לקרוא לזה משהו כמו "CharacterPushController".

שלב 2: העתק את הסקריפט שסופק

  • העתק את הקוד למטה לתוך הסקריפט החדש שנוצר. אתה יכול לכוונן את המשתנה 'pushPower' כדי לשלוט בעוצמת הדחיפה. בנוסף, ייתכן שתרצה להתאים אישית את התנאים להפעלת כוח הדחיפה בהתבסס על ההיגיון של המשחק שלך.

CharacterPushController.cs

using UnityEngine;

public class CharacterPushController : MonoBehaviour
{
    // Adjust this variable to control the strength of the push
    public float pushPower = 2.0f;

    void OnControllerColliderHit(ControllerColliderHit hit)
    {
        Rigidbody body = hit.collider.attachedRigidbody;

        // No rigidbody or kinematic rigidbody
        if (body == null || body.isKinematic)
        {
            return;
        }

        // Avoid pushing objects below the character
        if (hit.moveDirection.y < -0.3)
        {
            return;
        }

        // Calculate push direction from move direction,
        // pushing only to the sides, not up and down
        Vector3 pushDir = new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z);

        // Apply the push
        body.velocity = pushDir * pushPower;
    }
}

שלב 3: צרף את הסקריפט

  • צרף את הסקריפט "CharacterPushController" ל-GameObject עם הרכיב CharacterController.

שלב 4: בדיקה

  • שחקו את הסצנה ובדקו את יכולתו של בקר הדמות לדחוף גופים נוקשים בעזרת התסריט החדש שנוצר.

שלב 5: התאם

  • התאם את את 'pushPower' כדי להשיג את ההתנהגות הרצויה במשחק שלך.