إضافة الرابض إلى مشغل FPS في Unity

يمكن أن يؤدي إضافة آلية crouching إلى تعميق الانغماس وتوفير عمق تكتيكي للعبة، خاصة في الألعاب التي تعتمد على منظور الشخص الأول والألعاب المتخفية. بناءً على برنامجنا التعليمي Unity FPS Controller، يعرض هذا الدليل كيفية إضافة ميزة الانحناء السلس في Unity.

المتطلبات الأساسية

  • الإلمام الأساسي بـ Unity interface.
  • فهم Unity 'CharacterController'.
  • البرنامج النصي لوحدة تحكم FPS من البرنامج التعليمي Unity FPS Controller.

خطوات

  • في class المسمى 'SC_FPSController'، من البرنامج التعليمي Unity FPS Controller، أضف المتغيرات التالية للتعامل مع الانحناء:
public bool isCrouching = false;
public float crouchHeight = 0.5f;
public float crouchSpeed = 3.5f;
public float crouchTransitionSpeed = 10f;
private float originalHeight;
public float crouchCameraOffset = -0.5f;
private Vector3 cameraStandPosition;
private Vector3 cameraCrouchPosition;
  • قم بتعديل طريقة 'Start()' لتخزين الارتفاع الأصلي لـ 'CharacterController' وضبط أوضاع الكاميرا:
void Start()
{
    characterController = GetComponent<CharacterController>();
    originalHeight = characterController.height;

    // Define camera positions for standing and crouching
    cameraStandPosition = playerCamera.transform.localPosition;
    cameraCrouchPosition = cameraStandPosition + new Vector3(0, crouchCameraOffset, 0);

    // Lock cursor
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = false;
}
  • في طريقة 'Update()'، تحقق من الضغط على مفتاح الانحناء وقم بتبديل المتغير 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • خارج الكتلة السابقة، قم بتنفيذ الانتقال السلس لموضع الكاميرا بين الانحناء والوقوف:
if (isCrouching)
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraCrouchPosition, crouchTransitionSpeed * Time.deltaTime);
}
else
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraStandPosition, crouchTransitionSpeed * Time.deltaTime);
}
  • اضبط سرعة حركة اللاعب بناءً على الحالة الحالية:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

أسئلة:

  1. لماذا نستخدم 'Vector3.Lerp()' لانتقال الكاميرا أثناء الانحناء؟ : يتم استخدام وظيفة 'Vector3.Lerp()' للاستيفاء بسلاسة بين متجهين. وفي هذا السياق، يسمح للكاميرا بالانتقال بسلاسة بين وضعي الوقوف والانحناء بدلاً من الالتقاط بشكل مفاجئ.
  2. ما هو دور 'crouchTransitionSpeed'?: يحدد 'crouchTransitionSpeed' مدى سرعة الانتقال بين وضعي الكاميرا الرابضة والواقفة. تؤدي القيمة الأعلى إلى انتقال أسرع.
  3. هل من الممكن تخصيص مفتاح الانحناء؟ : بالتأكيد. مفتاح الانحناء مضبوط حاليًا على 'C' ('KeyCode.C'). استبدله بأي 'KeyCode' مرغوب فيه لضبط المفتاح الرابض.

خاتمة

يمكن أن يؤدي دمج آلية الانحناء السلس في Unity، والتي تتضمن ضبط حجم collider وموضع الكاميرا، إلى زيادة انغماس اللاعب بشكل كبير. لقد قدم هذا الدليل طريقة لتحقيق ذلك من خلال انتقال طبيعي وسلس.

المقالات المقترحة
إضافة دعم القفز المزدوج إلى وحدة التحكم في الشخصيات ثنائية الأبعاد في Unity
إضافة تأثير تمايل الرأس إلى الكاميرا في Unity
وحدة التحكم في الشخصية كيفية إضافة القدرة على دفع الأجسام الصلبة في الوحدة
كيفية إضافة دعم النظام الأساسي المتحرك إلى وحدة التحكم بالأحرف في Unity
إنشاء حركة اللاعب في الوحدة
وحدة تحكم FPS
كاميرا الشخص الثالث في Unity