C# Бензин для самолетика UNITY 2D

есть скрипт C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(CapsuleCollider2D))]

public class CharacterController2D : MonoBehaviour
{
    // Move player in 2D space
    public float maxSpeed = 3.4f;
    public float jumpHeight = 6.5f;
    public float gravityScale = 1.5f;
    public Camera mainCamera;

bool facingRight = true;
float moveDirection = 0;
bool isGrounded = false;
Vector3 cameraPos;
Rigidbody2D r2d;
Collider2D mainCollider;
// Check every collider except Player and Ignore Raycast
LayerMask layerMask = ~(1 << 2 | 1 << 8);
Transform t;

// Use this for initialization
void Start()
{
    t = transform;
    r2d = GetComponent<Rigidbody2D>();
    mainCollider = GetComponent<Collider2D>();
    r2d.freezeRotation = true;
    r2d.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
    r2d.gravityScale = gravityScale;
    facingRight = t.localScale.x > 0;
    gameObject.layer = 8;

    if(mainCamera)
        cameraPos = mainCamera.transform.position;

}

// Update is called once per frame
void Update()
{
    moveDirection = 1;

  
    
    
    

    // Change facing direction
    if (moveDirection != 0)
    {
        if (moveDirection > 0 && !facingRight)
        {
            facingRight = true;
            t.localScale = new Vector3(Mathf.Abs(t.localScale.x), t.localScale.y, transform.localScale.z);
        }
        
    }

    // Jumping
    if (Input.GetKey("space"))
    {
        r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
    }

    // Camera follow
    if(mainCamera)
        mainCamera.transform.position = new Vector3(t.position.x, cameraPos.y, cameraPos.z);
}

void FixedUpdate()
{
    Bounds colliderBounds = mainCollider.bounds;
    Vector3 groundCheckPos = colliderBounds.min + new Vector3(colliderBounds.size.x * 0.5f, 0.1f, 0);
    // Check if player is grounded
    isGrounded = Physics2D.OverlapCircle(groundCheckPos, 0.23f, layerMask);

    // Apply movement velocity
    r2d.velocity = new Vector2((moveDirection) * maxSpeed, r2d.velocity.y);

    // Simple debug
    Debug.DrawLine(groundCheckPos, groundCheckPos - new Vector3(0, 0.23f, 0), isGrounded ? Color.green : Color.red);
}
}

Когда цепляю его к самолетику,он летит вправо,на пробез набирается высота,так вот,хотелось бы сделать систему,чтобы когда закончилось топливо,он больше не могу набирать высоту(тоесть пробел отключен) Как это можно реализовать?

P.S я чайник)


Ответы (1 шт):

Автор решения: ssa112112
  1. Вам нужно где-то хранить информацию о бензине, например добавить поле: public float residueOil = 250f; //остаток бензина
  2. Вам нужно двигаться только когда остаток бензина больше 0
  3. Вам нужно уменьшать остаток бензина каждый раз когда вы двигаетесь.

2 и 3 пункты можно реализовать так:

   if (Input.GetKey("space") && residueOil > 0f) //проверяем и нажатие и остаток бензина
    {
        residueOil -= jumpHeight; // уменьшаем остаток бензина на величину подъема
        r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight); //двигаемся вверх
    }
→ Ссылка