Цель: Создать скрипт коллекционного предмета.

Я продолжаю курс 2.5D Platformer, чтобы добавить больше возможностей. Пришло время добавить несколько коллекционных монет. Эти монеты будут размещены на платформе, чтобы игрок мог их собрать.

Контроллер игрока



Настройка сцены

Для этой сцены у меня есть примитивная капсула в качестве игрока, пять кубов, масштабированные как платформы, и три сферы вести себя как предметы коллекционирования.

  • Player Capsule Я создал пустой объект для игрока и установил его в начале координат. Этот пустой объект будет обрабатывать всю логику и движение. Затем внутри родительского объекта я добавил визуальные элементы, такие как капсула.
  • Предметы коллекционирования Пустые объекты для хранения всех предметов коллекционирования на сцене.

  • Коллекционная сборка представляет собой модифицированную сферу с монетным скриптомt, сферой, коллайдером и Rigibody.

Скрипт монеты

Простой скрипт запускается всякий раз, когда игрок сталкивается с монетой.

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

public class Coin : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Player")) 
        {
            other.gameObject.TryGetComponent<Player>(out Player _playerScript);
            _playerScript.AddCoins();
            Destroy(this.gameObject);
        }
    }
}

При входе в триггер мы находим компонент player и вызываем метод add coin в классе player. Этот метод обновит количество монет, которые есть у игрока.

public class Player : MonoBehaviour
{
    private GameInput _gameInput;
    private CharacterController _controller;
    [SerializeField] private float _speed = 2.0f;
    [SerializeField] private float _jumpStrength = 15.0f;
    [SerializeField]private float _gravity = 1.0f;
    [SerializeField] private bool _groundPlayer;
    private float _yVelocity;
   
    private int _coinCollected = 0;
    private bool _doubleJump;
    private float _jumpDelay;
    



public void AddCoins() 
    {
        _coinCollected++;
        UIManager._instance.UpdateCoinText(_coinCollected);
    }
}

Я немного изменил актив, чтобы было веселее в процессе тестирования. Но, как видите, мы можем собирать «монеты», когда игрок заходит в них.