Unity 3D Coin-Collector Tutorial in 8 Steps

Answered using AI by Vibe Coding

Code Question:

напиши 3д игру

Code Solution:

Хорошо — могу помочь написать простую 3D-игру. Прежде чем начинать, уточни: для какого движка/платформы хочешь игру? (Unity, Godot, Three.js/веб, Unreal и т. п.) Пока жду ответ — приведу быстрый готовый пример для Unity (самый популярный вариант для начинающих). Это маленькая 3D-игра "собирай монетки" (FPS-передвижение, собираешь предметы, считаешь очки).

Требования

  • Unity 2020.3+ (или 2021/2022)
  • Новый проект 3D

Шаги создания сцены (коротко)

  1. Создай новый 3D-проект в Unity.
  2. Создай Plane (GameObject → 3D Object → Plane) — пол.
  3. Создай Player: пустой GameObject, добавь компонент CharacterController, помести камеру как дочерний объект (Camera → перетащи в Player).
  4. Добавь тег "Player" к Player объекту.
  5. Создай префаб монеты: GameObject → 3D Object → Sphere, уменьшить размер (например scale 0.5), добавить Collider (Sphere Collider) и поставить Is Trigger = true. Сделай материал желтым/золотым. Сохрани как prefab (перетащи в папку Prefabs).
  6. Размести несколько префабов монет по сцене.
  7. Создай UI: Canvas → внутри Text (UI → Text) для отображения счёта (назовём ScoreText). Убедись, что в Canvas добавлен компонент Canvas и Text видим.
  8. Создай пустой объект GameManager в сцене.

Скрипты (C#). Создай 3 скрипта и повесь их так описано.

  1. PlayerController.cs — перемещение + мышь (CharacterController)
using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class PlayerController : MonoBehaviour
{
    public float walkSpeed = 6f;
    public float runSpeed = 10f;
    public float gravity = -9.81f;
    public float mouseSensitivity = 2f;
    public Transform cameraTransform;
    public float cameraPitchLimit = 85f;

    CharacterController cc;
    float velocityY = 0f;
    float pitch = 0f;

    void Start()
    {
        cc = GetComponent<CharacterController>();
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Mouse look
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
        transform.Rotate(Vector3.up * mouseX);
        pitch -= mouseY;
        pitch = Mathf.Clamp(pitch, -cameraPitchLimit, cameraPitchLimit);
        if (cameraTransform != null) cameraTransform.localEulerAngles = Vector3.right * pitch;

        // Movement
        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");
        Vector3 move = transform.right * x + transform.forward * z;
        float speed = Input.GetKey(KeyCode.LeftShift) ? runSpeed : walkSpeed;
        velocityY += gravity * Time.deltaTime;
        Vector3 final = move.normalized * speed + Vector3.up * velocityY;
        cc.Move(final * Time.deltaTime);

        if (cc.isGrounded && velocityY < 0) velocityY = -1f; // keep grounded
    }
}
  • Присвой cameraTransform в инспекторе: перетащи дочернюю камеру.
  • Поставь тег Player на объект.
  1. Coin.cs — собирание монет
using UnityEngine;

public class Coin : MonoBehaviour
{
    public int value = 1;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            GameManager.instance.AddScore(value);
            Destroy(gameObject);
        }
    }
}
  • Добавь этот скрипт на prefab монеты. Collider должен иметь Is Trigger = true.
  1. GameManager.cs — управление счётом и UI
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
    public static GameManager instance;
    public int score = 0;
    public Text scoreText;

    void Awake()
    {
        if (instance == null) instance = this;
        else Destroy(gameObject);
    }

    void Start()
    {
        UpdateUI();
    }

    public void AddScore(int v)
    {
        score += v;
        UpdateUI();
    }

    void UpdateUI()
    {
        if (scoreText != null) scoreText.text = "Score: " + score;
    }
}
  • На GameManager в инспекторе укажи ScoreText (перетащи UI Text).
  • Если используешь TextMeshPro — код немного другой, но принцип тот же.

Дополнительно

  • Добавь немного звуков: в Coin.OnTriggerEnter можно проигрывать AudioSource.
  • Можно сделать спавн монет скриптом: разместить их случайно в пределах площади.
  • Полируем коллайдеры, ограничения, UI, меню паузы и т.д.

Как запустить

  • Нажми Play, используй WASD для передвижения, мышь — смотреть, Shift — бег. Подойди к монетам — они исчезнут, а счёт обновится.

Хочешь, могу:

  • дать версию для Godot (GDScript) или для браузера (Three.js);
  • добавить прыжок, физику, анимации, звуки;
  • прислать архив проекта Unity с этими файлами.

Напиши, какой вариант предпочитаешь или какие фичи добавить.