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;
        }
    }
}

כל השיעורים ביחידה בניית משחקים אמיתיים

תרגלו בעצמכם: Unity אונליין