Menu
CoddyTech

Jatuh dan Muncul Kembali

Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 52 dari 60.

challenge icon

Tantangan

Sedang

Jika jatuh, pemain harus kembali.

  1. Di Player, tambahkan [SerializeField] private float fallY = -5f; dan titik respawn, lalu atur ke posisi awal di Start().
  2. Tambahkan public void SetCheckpoint(Vector3 point) yang mengatur titik respawn.
  3. Saat berada di bawah fallY: atur controller.enabled = false, pindahkan ke titik respawn, aktifkan kembali, lalu kosongkan velocity.

Tekan tombol “Main” dan lompatlah keluar: kamu akan kembali ke pijakan. Lalu tekan tombol “Periksa”.

Coba sendiri

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

Semua pelajaran di Membangun Game Sungguhan

Latihan sendiri: Playground Unity