impowski
@impowski
Программист C/C++

Как написать игру только с использованием скриптов в Unity?

Начали с другом делать игру на Unity, только на скриптах, то есть минимальное количество объектов на сцене, только камера и один объект, который как бы запускает скрипт Main, который должен запускать как бы все остальное что нужно и так далее.
Вообщем, суть вот в чем, я немного запутался с тем как правильно писать вообще игру. Приведу пример я создаю скрипт без MonoBehaviour примерно вот такой:
using UnityEditor;
using UnityEngine;

namespace Assets.Scripts
{
    public class Animal
    {
        public GameObject go = new GameObject("", typeof(CircleCollider2D), typeof(Rigidbody2D), typeof(SpriteRenderer));

        public Animal()
        {
            go.name = "Animal";
            go.GetComponent<Rigidbody2D>().gravityScale = 0f;
            go.transform.position = new Vector3(0, 0);
            go.transform.rotation = new Quaternion(0, 0, 0, 0);
            Debug.Log(go.name);
        }

    public class Cat : Animal
    {
        public GameObject go = new GameObject("", typeof(CircleCollider2D), typeof(Rigidbody2D), typeof(SpriteRenderer));

        public Cat()
        {
            go.name = "Cat";
            go.GetComponent<Rigidbody2D>().gravityScale = 0f;
            go.transform.position = new Vector3(0, 0);
            go.transform.rotation = new Quaternion(0, 0, 0, 0);
            Debug.Log(go.name);
        }
    }
}

Стоит ли так вообще делать, потому что мне кажется, что что-то не так, хотя может быть и правильно. Просто я сужу исходя из того, что если я делаю класс наследуемый от MonoBehaviour, то потом нельзя просто создать экземпляр объекта через new(ну оно и понятно почему). Меня как бы не устраивает что я должен создавать заранее объект, цеплять на него скрипт, а потом он будет работать, когда я могу просто взять создать из конструктора объект, который будет иметь все нужные мне функции, заранее прописанные. Если кто меня понял, объясните пожалуйста, что с этим делать, как все мне это довести до логического завершения, что для чего. Вот например у меня еще есть скрипт с управление он уже идет от MonoBehaviour, я его цепляю например через AddComponent к кошке и ей управляю, но правильно ли это со стороны проектирования всей игры?
По факту очень удобно из рантайма все вызывать, есть некоторые проблемы с пониманием всего этого, если кто то что может подсказать с чем мы можем столкнуться во время разработки.
  • Вопрос задан
  • 2751 просмотр
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Разработка игр
1) Изучите что такое префабы
2) Так делать можно. Равно как и забивать гвозди микроскопом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Espleth
А еще почитайте, как наследоввние устроено, вы явно плохо понимаете этот момент
Ответ написан
Комментировать
Есть такой плагин для Unity3d - PlayMaker - www.hutonggames.com
Он позволяет без прямого программирования делать игры в Unity3d путем, так называемого визуального программирования. Это похоже на Blueprint в Unreal Engine.
Но честно говоря, я бы все таки советовал вам не делать этого, а взяться и нормально начать изучать С# или javascript.
Ответ написан
Комментировать
ArXen42
@ArXen42
Возможно вам поможет описание моей игры - тоже новичок, но делаю уже более полугода, общая архитектура более менее устаканилась. Суть игры вдохновлена Космическими Рейнджерами - вселенная, состоящая из звезд, основное место действия - звездные системы, игра протекает внутри них. Соответственно до старта игры ни одного объекта практически и нет - только пустышки и скрипты на них, ну и UI. При старте игры из сохранения (либо случайно генерируется) вселенная - массив звезд, которые в свою очередь содержат планеты, пояса и т.д. Эти данные никак не связаны с MonoBehaviour, просто статический массив (List на самом деле, но не суть). При старте игры опять же из сохранения берется местоположение игрока, информация о его корабле и в соответствии с этим
1)Спаунится текущая система: солнце, планеты (есть префаб планеты, при спауне висящий на нем скрипт накладывает случайно генерируемую текстуру, а другой скрипт размещает в пространстве в соответствии с заданными параметрами орбиты) и т.д.
2)Спаунится игрок (а в будущем и другие игроки)
Таким образом сцена содержит только пустышку игрока с повешенными на него скриптами и объекты UI. Все остальное создается по ходу игры.
Ответ написан
Комментировать
SN_007
@SN_007
Программист C#
Разумеется, можно писать и так, как Вы предлагаете: всё создавать в коде, а управлять только одним объектом. Наверное, для каких-то случаев это будет разумным решением (я не знаю, какая у Вас задача). Для Вашего случая можно заранее создать объекты, сохранить их в префабах (это очень просто), и затем из кода создавать необходимое количество объектов и делать с ними всё, что угодно. В любом случае, объект, созданный из префаба (например, методом Instantiate) будет иметь минимальный набор механизмов для манипуляций с ним. Как минимум, любой объект имеет компонент Transform. Также из кода к любому объекту можно прикреплять в процессе различные другие компоненты (и также отцеплять при необходимости). Всё это возможно. Главное, важно понимать - действительно ли оправдан такой подход. Если Вы считаете, что так в данном случае будет в чём-то эффективнее, то нет проблем...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы