Menu
CoddyTech

السقوط وإعادة الظهور

جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 52 من 60.

challenge icon

التحدي

متوسط

يجب أن تعيد السقطة اللاعب إلى مكانه.

  1. في Player، أضف [SerializeField] private float fallY = -5f; ونقطة إعادة ظهور، واضبطها على موضع البداية في Start().
  2. أضف public void SetCheckpoint(Vector3 point) لتعيين نقطة إعادة الظهور.
  3. عند النزول إلى ما دون fallY: عيّن controller.enabled = false، وانقل اللاعب إلى نقطة إعادة الظهور، ثم فعّلها مجددًا وامسح velocity.

اضغط «العب» واقفز إلى الخارج: ستعود إلى المنصة. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    [SerializeField] private float speed = 5f;
    [SerializeField] private float jumpHeight = 1.5f;
    [SerializeField] private float gravity = -9.81f;

    private CharacterController controller;
    private InputAction moveAction;
    private InputAction jumpAction;
    private Vector3 velocity;
    private MovingPlatform platform;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        if (controller.isGrounded && velocity.y < 0f)
        {
            velocity.y = -2f;
        }

        Vector2 input = moveAction.ReadValue<Vector2>();
        Vector3 move = new Vector3(input.x, 0f, input.y) * speed;

        if (jumpAction.WasPressedThisFrame() && controller.isGrounded)
        {
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
        }

        velocity.y += gravity * Time.deltaTime;
        Vector3 motion = (move + velocity) * Time.deltaTime;
        if (platform != null)
        {
            motion += platform.delta;
            platform = null;
        }
        controller.Move(motion);
    }

    void OnControllerColliderHit(ControllerColliderHit hit)
    {
        if (hit.normal.y > 0.5f && hit.gameObject.TryGetComponent(out MovingPlatform moving))
        {
            platform = moving;
        }
    }
}

جميع دروس إنشاء ألعاب حقيقية

تدرّب بنفسك: Playground لـ Unity