2017-02-13 2 views
3

Я знаю очень мало Unity и хотел бы создать платформу 2D-игры очень просто, просто используя основные фигуры (квадраты, прямоугольники, круги и т. Д.). Я искал в Интернете, и я нашел более сложный учебник о том, что мне нужно.Создайте базовую 2D-платформерную игру в Unity

Например, я увидел this, но его цель более амбициозна, чем моя (также я просмотрел другие учебники, но не могу добавить дополнительные ссылки).

Я хотел бы создать что-то очень простое, чтобы понять основы программы, а затем попытаться поставить что-то более сложное, сделанное мной. У кого-нибудь есть совет для меня?

Это то, что я представляю себе, как первый уровень, очень просто (и некрасиво):
first level

Я не знаю, с чего начать, я не думаю, что это имеет смысл начать с чем-то сложным то ничего не понимают и копируют только. Желательно от чего-то простого и усложнить работу, поскольку я становлюсь более практичным, верно?

Я добавляю, что я знаю Java и немного JavaScript.


Я последовал за учебник Фредрика и это то, что я got. Чтение кода, я вижу это:

if(col.tag == "Coin") { 
    coins++; 
    Destroy(col.gameObject); // remove the coin 
} 

Так что, когда игрок сталкивается с монету, монеты не должны быть уничтожены? Но в моем случае это не так.

+1

Я был заинтересован в То же самое, но я видел, что люди сначала советуют изучать Java или C/C++ для флеш-игр. Мне бы хотелось узнать, что ответят люди. – jhhoff02

+1

Хорошо начать. Я думаю, вам, возможно, повезло найти ответ на [http: //gamedev.stackexchange.com/](http://gamedev.stackexchange.com/) – Catwood

+0

Это очень широкий вопрос, требующий довольно глубокого ответа. Как сказано выше, это может быть лучше подходит на другом форуме, но я я напишу вам немного чего-нибудь, чтобы вы начали! Держитесь – Maakep

ответ

6

Это не совсем подходящий форум для этого вопроса, но я в настроении отвечать, поэтому буду. Надеюсь, это может помочь вам, даже если это будет помечено, хе-хе.

Так для простого 2D платформер вам нужно:

Игрок

  • с физикой (Rigidbody компонент)
  • и столкновения (компонент коллайдер Box)
  • с влево/вправо перемещение и скачок (код)
  • , который может обнаруживать триггеры, такие как бонусы/пики/уровень окончания (код)

объектов земля Уровень

  • коллайдерах (так игрок может ходить по нему) (компонент коллайдер Box)

Пикапы

  • с триггерными коллайдерах (так что игрок может пройти через них &) (Код коллайдера)

Создайте новый 2D-проект через Unity. Проверьте кнопку 2D.

  • Во-первых, позволяет создавать наши GameObjects. GameObjects - каждый Объект в игре и создаются путем правки в иерархии (где ваша основная камера по умолчанию) и нажмите «Создать пустой». Но поскольку это 2D-игра, мы хотим, чтобы каждый объект был Sprite; изображение. Поэтому вместо нажатия «Создать пустой», нажмите «2D-объект -> спрайт». Это будет наш Игрок. Прямо сейчас игрок не выглядит ничем, потому что нет изображения для его представления. Измените это, перетащив изображение по вашему выбору куда-нибудь в свою папку с активами, а затем перетащите импортированное изображение в поле спрайта спрайта. Как это: http://i.imgur.com/6cKQCss.gifv

  • Добавить компоненты (Как это: http://i.imgur.com/UkkxbgK.png) Box Collider, Rigidbody2d и новый C# сценарий называется что-то вроде ... "Игрок". Идите вперед и помечать наш игрок GameObject с предварительно существующим тегом «Player» и, в Rigidbody компонентов ограничения раз вниз, проверьте «Замораживание Обороты: Z» Смотрите изображение: http://i.imgur.com/be6G2pB.png

Вашего плеер должен теперь выглядят примерно так: http://i.imgur.com/be6G2pB.png (+ сценарий игрока)

  • Здесь идет скрипт игрока. Там могут быть некоторые ошибки (например, игрок может прыгать навсегда, даже если не на земле), попробуйте исправить их, если есть, или улучшить, если он не работает достаточно хорошо.Она требует от игрока иметь Rigidbody2D - & Collider2D компонентная (компонент коллайдер может быть коробка коллайдер, circel коллайдер и т.д. и т.п. любой формы), который мы добавили в предыдущем шаге. Rigidbody2d дает физик игрок (падение под действием силы тяжести, пострадавший от принудительного) и коллайдера дает ему возможность столкнуться с вещами. Без этого игрок просто провалится сквозь землю и не сможет определить, касается ли он других триггеров/коллайдеров.

Это C# -скрипт, который я рекомендую вам использовать. Он очень похож на java и легко подбирается. В любом случае, большая часть из них является единственной:

using UnityEngine; 

public class Test : MonoBehaviour { 

    float speed = 3f; 
    Rigidbody2D rb; 
    int coins = 0; 
    Vector3 startingPosition; // If we hit a spike we will teleport player to starting position. 

    void Start() 
    { 
     rb = GetComponent<Rigidbody2D>(); // Get the rigidbody component added to the object and store it in rb 
     startingPosition = transform.position; 
    } 

    void Update() 
    { 
     var input = Input.GetAxis("Horizontal"); // This will give us left and right movement (from -1 to 1). 
     var movement = input * speed; 

     rb.velocity = new Vector3(movement, rb.velocity.y, 0); 

     if (Input.GetKeyDown(KeyCode.Space)) 
     { 
      rb.AddForce(new Vector3(0, 100, 0)); // Adds 100 force straight up, might need tweaking on that number 
     } 
    } 


    void OnTriggerEnter2D(Collider2D col) // col is the trigger object we collided with 
    { 
     if (col.tag == "Coin") 
     { 
      coins++; 
      Destroy(col.gameObject); // remove the coin 
     } 
     else if (col.tag == "Water") 
     { 
      // Death? Reload Scene? Teleport to start: 
      transform.position = startingPosition; 
     } 
     else if (col.tag == "Spike") 
     { 
      // Death? Reload Scene? Teleport to start: 
      transform.position = startingPosition; 
     } 
     else if (col.tag == "End") 
     { 
      // Load next level? Heres how you get this level's scene number, add 1 to it and load that scene: 
      // SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); 
     } 
    } 
} 

Далее, давайте создадим объекты уровня.

  • правая кнопка мыши в иерархии и нажмите "Создать Пустую". Это будет действовать как папка для всех наших объектов уровня, чтобы она была аккуратной. Щелкните правой кнопкой мыши на этом недавно созданном пустом игровом объекте и нажмите «2D-объект -> Sprite» и назовите этот «Этаж» (или что-то еще). Если вы хотите увидеть его, дайте ему спрайт, как мы сделали с игроком! (снова gif: http://i.imgur.com/6cKQCss.gifv) Дайте этому блоку компонент «Box Collider 2D». Теперь игрок может стоять на этих объектах. Теперь вы можете продолжить игру, вы должны иметь (несколько) функционирующий игрок и объекты для игрока, чтобы стоять на нем. Измените его значения в компоненте Transform, чтобы изменить его свойства. Вы можете скопировать и вставить этот объект, если вам нужно больше (что вы будете). Там также называется «Prefab». Это похоже на сохранение GameObject, поэтому вы можете использовать его много раз и имеет гораздо больше преимуществ, которые вы поймете позже. Чтобы сохранить GameObject как Prefab, просто перетащите объект из иерархии игр в папку «Projects Assets» (как, например, с спрайтами, вроде).

  • Для Монеты, сделать то же самое, но придать ему новый тег (как создать новый тег: http://i.imgur.com/dYt9b0T.gifv) под названием «Монета» и в коробке Colldier 2D компоненте, проверить «спуски» кнопки , Это заставит его запускать OnTriggerEnter2D, когда мы пойдем туда, и игрок не сможет стоять на нем; мы пойдем прямо через него (так как это просто триггер). И мы будем использовать имя тега, чтобы определить, какой именно объект он использует в нашем методе OnTriggerEnter2D в проигрывателе.

Повторите шаг монеты для большинства других объектов, которые вы хотите. Мы идентифицируем их и обрабатываем действие, которое мы хотим, с помощью

void OnTriggerEnter2D(Collider2D col) 
{ 
    if (col.tag == "Coin") 
    { 
     coins++; 
     Destroy(col.gameObject); 
    } 
    else if (col.tag == "Water") 
    { 
     transform.position = startingPosition; 
    } 
    else if (col.tag == "Spike") 
    { 
     // Death? Reload Scene? Teleport to start: 
     transform.position = startingPosition; 
    } 
    else if (col.tag == "End") 
    { 
     SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); 
    } 

    /* 
    * 
    * Keep adding objects to collide with here! 
    * 
    */ 
} 

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

Каждый объект имеет Transform, который содержит положение, поворот и масштаб объекта. Измените их (в скрипте: transform.position, transform.rotation, transform.localScale), чтобы изменить ... ну, указанные свойства.

Чтобы получить компонент в коде, вам необходимо использовать GetComponent(); где Component - это компонент, который вы хотите, как в нашем Player-скрипте с rb = GetComponent<Rigidbody>();.

Теперь этот пример, развернуть его, google "Unity how to ..."Если вам нужна помощь с чем-нибудь или спросить здесь, если вы не можете заставить его работать.

Днем Unitying! О, и спросить, если у вас есть вопросы, на мой ответ.

+2

У меня вопрос: как я могу дать вам очки кармы/награды за это? – jhhoff02

+1

Хороший ответ. Я думаю, что Op будет хорошо, если он будет следовать [one] (https://unity3d.com/learn/tutorials) учебника 2D проекта Unity. @ jhhoff02 Вы можете поставить баунти через 3 дня или около того, но не сегодня. – Programmer

+0

Ха-ха, ваша оценка - это все, что мне нужно! Понравилось писать, хотя я должен был спешить в конце. Ура! – Maakep

Смежные вопросы