إضافة الرابض إلى مشغل 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 وموضع الكاميرا، إلى زيادة انغماس اللاعب بشكل كبير. لقد قدم هذا الدليل طريقة لتحقيق ذلك من خلال انتقال طبيعي وسلس.