Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/41: Рейтинг темы: голосов - 41, средняя оценка - 4.56
Заблокирован

Создание змейки на Unity2D

12.12.2015, 12:25. Показов 9953. Ответов 79
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
воспользовавшись советом попробовал делать по урокам noobtuts, разбирался очень долго, но в конце концов начало получаться, правда не все...

1. змейка проходит сквозь стену, я проставил у стен Box Collider 2D, но это не помогает...
2. так и не понял как убрать лишнюю еду (она же каждые несколько секунд новая генерируется, а должна только когда съел старую)
3. прикрепляю скрин, почему у меня не ровно получается еда и змейка? ну в смысле хотелось бы чтобы они были выровнены по сетке, а они неровно, присмотритесь к скрину
Миниатюры
Создание змейки на Unity2D  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2015, 12:25
Ответы с готовыми решениями:

Прыжок в unity2D
Пробую создать простенькую 2D игру, не получается реализовать прыжки, вернее один прыжок. При нажатии нескольких раз пробела персонаж...

Unity2D Камера
Как можно изменить соотношение сторон камеры, чтобы не было широкого экрана?

Бесконечный фон Unity2D v5.5
Побегал по многим ссылкам - результат один и тот же: везде описан метод лупа бэкграунда на версиях unity ниже 5, а на 5+ такие способы уже...

79
Заблокирован
13.12.2015, 17:11  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Потому что начальную позицию Head нужно занулить. У тебя со сдвигом получилось. Кликни на объект Head и занули. Можно кликнуть правой кнопкой по Transform и выбрать Reset. А то у тебя вот что:
так и правда лучше но иногда еще у меня еда появляется прямо на границе, как от этого избавиться?

Добавлено через 4 минуты
а ну с этим сам разобрался
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void Spawn() {
    // x position between left & right border
    int x = (int)Random.Range(borderLeft.position.x + 1,
                              borderRight.position.x - 1);
 
    // y position between top & bottom border
    int y = (int)Random.Range(borderBottom.position.y + 1,
                              borderTop.position.y - 1);
 
    // Instantiate the food at (x, y)
    Instantiate(foodPrefab,
                new Vector2(x, y),
                Quaternion.identity); // default rotation
}
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 17:17
Вот, что я и писал, у тебя текст вне области камеры. В окне Scene мышкой перетащи UIText в область камеры:
Миниатюры
Создание змейки на Unity2D  
1
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 17:20
Ой, я ошибся, в большой прямоугольник перетащи, который за камерой идёт на скрине выше. Потому что большой прямоугольник - это Canvas. А Canvas привязана к камере.
1
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 17:35
Шрифт нужно увеличить. Я выставил 35. А ещё скачай какой-нибудь более интересный бесплатный шрифт. Обычно они в формате .otf или ttf. Я прикрепил в архиве шрифт для примера. Кинь файл в папку Assets. А потом перетащи мышкой в область на скрине, я стрелкой показал:
Миниатюры
Создание змейки на Unity2D  
Вложения
Тип файла: zip epsil.zip (41.9 Кб, 1 просмотров)
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 17:38
А что по поводу меню? Создай сцену menu_scene. Добавь две кнопки: Start и Exit
0
Заблокирован
13.12.2015, 17:41  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вот, что я и писал, у тебя текст вне области камеры. В окне Scene мышкой перетащи UIText в область камеры:
оч странно, я это настраивал реально, было нормально, почему то сбилась настройка...
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Шрифт нужно увеличить. А ещё скачай какой-нибудь более интересный бесплатный шрифт. Обычно они в формате .otf или ttf. Кинь файл в папку Assets. А потом перетащи мышкой в область на скрине, я стрелкой показал:
да какая разница... успеется, что то ты все к оформлению лезешь, а ведь еще основная логика не до конца реализована надо сначала доделать основу, а потом уже пихать музыку и шрифты...

Добавлено через 1 минуту
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А что по поводу меню? Создай сцену menu_scene. Добавь две кнопки: Start и Exit
угу, сделаю, ты мне насчет выползания змейки из противоположной стены ответь пожалуйста
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 17:47
Цитата Сообщение от Volrajas Посмотреть сообщение
да какая разница... успеется, что то ты все к оформлению лезешь, а ведь еще основная логика не до конца реализована
Одно другому не мешает. Я это на автомате делаю. Даже не задумываюсь, что первее делать. Всё равно делать придётся.

Цитата Сообщение от Volrajas Посмотреть сообщение
угу, сделаю, ты мне насчет выползания змейки из противоположной стены ответь пожалуйста
Да, я помню, не забуду, но позже.

Цитата Сообщение от Volrajas Посмотреть сообщение
оч странно, я это настраивал реально, было нормально, почему то сбилась настройка...
Когда ты перетащил UIText на Canvas, то он обязан отобразиться в окне на вкладке Game:
Миниатюры
Создание змейки на Unity2D  
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 17:55
Volrajas, ты сделай, чтобы про столкновении с собой и стеной показывалась сцена проигрыша.
0
Заблокирован
13.12.2015, 18:08  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Volrajas, ты сделай, чтобы про столкновении с собой и стеной показывалась сцена проигрыша.
с собой то я уже сделал, но со стеной я так не хочу, в классической змейке несколько вариантов, в том числе и стена и вовсе лабиринты (препятствия) и без стены (змейка выходит на противоположной стороне), я хочу сделать последний вариант

Добавлено через 3 минуты
ах да еще момент: у меня змейка может ходить назад, т.е. идет например вверх и потом жму вниз и она как бы сама по себе идет вниз, это же не правильно... но и конец игры тут не надо выдавать, это тоже было бы не правильно, надо просто ограничить чтобы нельзя было идти в сторону противоположную направлению движения, я пока не знаю как
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 18:35
Цитата Сообщение от Volrajas Посмотреть сообщение
ах да еще момент: у меня змейка может ходить назад, т.е. идет например вверх и потом жму вниз и она как бы сама по себе идет вниз
Добавь в условия:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    // Update is called once per frame
    void Update ()
    {
        var h = Input.GetAxisRaw("Horizontal");
        var v = Input.GetAxisRaw("Vertical");
 
        if (v > 0 && (dir != Vector2.down))
        {
            dir = Vector2.up;
        }
        else if (v < 0 && (dir != Vector2.up))
        {
            dir = Vector2.down;
        }
 
        if (h < 0 && (dir != Vector2.right))
        {
            dir = Vector2.left;
        }
        else if (h > 0 && (dir != Vector2.left))
        {
            dir = Vector2.right;
        }
    }
Добавлено через 5 минут
Как видишь, у меня уплавление немного по-другому. Оно более универсальное, как в Pong2D от нубтутс. Смысл в том, что можно уплавлять стрелками, WASD и на геймпаде

Добавлено через 3 минуты
Ключевое слово "Horizontal" связано с настройками, открой: в меню "Edit" -> "Player Setting" -> "Input" и ты увидешь в выпадающем списке "Axis" настройки Input

Добавлено через 3 минуты
Ты, скорее всего, догадался, что в твоём случае будет вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    // Update is called once per frame
    void Update()
    {
        // Move in a new Direction?
        if (Input.GetKey(KeyCode.RightArrow) && (dir != Vector2.left))
            dir = Vector2.right;
        else if (Input.GetKey(KeyCode.DownArrow) && (dir != Vector2.up))
            dir = -Vector2.up;    // '-up' means 'down'
        else if (Input.GetKey(KeyCode.LeftArrow) && (dir != Vector2.right))
            dir = -Vector2.right; // '-right' means 'left'
        else if (Input.GetKey(KeyCode.UpArrow) && (dir != Vector2.down))
            dir = Vector2.up;
    }
1
Заблокирован
13.12.2015, 18:59  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Добавить условие:
да спасибо это помогло

Добавлено через 1 минуту
но почему то у меня опять сбилась вот эта фигня то что змейка и еда немного не на одной линии находятся, я позицию занулил, сначала вроде все норм было, а щас опять сбилось

Добавлено через 14 минут
хмм еще проблема я никак не пойму как на кнопку повесить событие... кинул на "lose_form" кнопку "try again" для перезапуска, но не знаю как обработчик повесить...

Добавлено через 3 минуты
Цитата Сообщение от 8Observer8 Посмотреть сообщение
на геймпаде
уже представляю себе кучу моих юзеров играющих на playstation в змейку
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 20:42
Цитата Сообщение от Volrajas Посмотреть сообщение
уже представляю себе кучу моих юзеров играющих на playstation в змейку
Под геймпадом я имел ввиду тот, который к компу подсоединяется.

Добавлено через 3 минуты
Цитата Сообщение от Volrajas Посмотреть сообщение
хмм еще проблема я никак не пойму как на кнопку повесить событие... кинул на "lose_form" кнопку "try again" для перезапуска, но не знаю как обработчик повесить...
Нужно в каком-нибудь скрипте сделать public метод - обработчик. Повесить этот скрипт на какой-нибудь объект, например, на камеру, или создать пустой объект и назвать его UIManager. Выделить кнопку и в инспекторе добавить OnClick(), то есть плюсик нажать, закинуть UIManager и в списке выбрать public обработчик.

Добавлено через 19 минут
Цитата Сообщение от Volrajas Посмотреть сообщение
дак вроде точно также, я попробовал работает также как старый
Ага, вот значит, как можно. Написать SceneManager.LoadScene(""); и дать студии возможность самой подключить using
0
Заблокирован
13.12.2015, 20:46  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Нужно в каком-нибудь скрипте сделать public метод - обработчик. Повесить этот скрипт на какой-нибудь объект, например, на камеру, или создать пустой объект и назвать его UIManager. Выделить кнопку и в инспекторе добавить OnClick(), то есть плюсик нажать, закинуть UIManager и в списке выбрать public обработчик.
че то я вот это не понял как это повесить скрипт на какой нибудь объект? я создал public обработчик в SpawnFood например, нашел где добавляются вешается на кнопку обработчик, но своего я не вижу там... там только стандартные
Миниатюры
Создание змейки на Unity2D  
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 20:49
Для меню я создал пустой объект UIManager и скрипт для него UIManager.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
 
public class UIManager : MonoBehaviour
{
    public void OnClickStartButton()
    {
        SceneManager.LoadScene("Level001");
    }
 
    public void OnClickExitButton()
    {
        Application.Quit();
    }
}
Добавлено через 1 минуту
Цитата Сообщение от Volrajas Посмотреть сообщение
там только стандартные
Выбери Button, ты же его кинул, как объект, на котором висит твой обработчик.
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 20:51
Вот как у меня выглядит:
Миниатюры
Создание змейки на Unity2D  
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 20:54
Цитата Сообщение от Volrajas Посмотреть сообщение
че то я вот это не понял как это повесить скрипт на какой нибудь объект?
Просто возьми и перетащи его мышкой на объект. Или выдели объект и нажми в инспекторе "Add Component" и выбери скрипт.

Добавлено через 1 минуту
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Выбери Button, ты же его кинул, как объект, на котором висит твой обработчик.
Да, кстати, а что за объект Button ты кинул? Ты на него вешал скрипт с обработчиком? Button - это пустой объект?
0
Заблокирован
13.12.2015, 20:57  [ТС]
8Observer8, а у меня чето нету класс и обработчики создал, видите он там выбран на скрине, но не видно его в выборе функций
Миниатюры
Создание змейки на Unity2D  
0
Заблокирован
13.12.2015, 20:58  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Да, кстати, а что за объект Button ты кинул? Ты на него вешал скрипт с обработчиком? Button - это пустой объект?
GameObject\UI\Button обычная кнопка, ну раз я спрашиваю значит наверное у меня еще пока не получилось на него кинуть обрабочик...
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
13.12.2015, 21:06
Создай пустой объект, для этого, правой кнопкой в окне "Hierarchy", выбери "Create Empty". Назови этот объект UIManager.

Кинь на него скрипт:

UIManager.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
 
public class UIManager : MonoBehaviour
{
    public void OnClickStartButton()
    {
        SceneManager.LoadScene("Level001");
    }
 
    public void OnClickExitButton()
    {
        Application.Quit();
    }
 
    public void OnClickTryAgainButton()
    {
        SceneManager.LoadScene("Menu");
    }
}
Выбери кнопку и кинь объект UIManager в OnClick и покажи какой список методов покажет.
1
Заблокирован
13.12.2015, 21:11  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Создай пустой объект, для этого, правой кнопкой в окне "Hierarchy", выбери "Create Empty". Назови этот объект UIManeger.
вот это помогло, спасибо а что все таки со змейкой??? как сделать чтобы при столкновении со стеной она выходила с другой стороны? ты мне уже весь день обещаешь показать!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2015, 21:11

Столкновение (Collider, Collition) Unity2d
Добрый день) У меня есть объекты - шары, и есть объекты - стены. Суть заключается в том, что шары бегают между стенами ударяются и...

Как сделать в Unity2D гранату?
Все привет))) Делаю игру и у меня возник такой вопрос как сделать в 2D гранату? Я посмотрел видеорилик где делают гранату в 3D и там...

Unity2d, отключение и включение объектов, C#
Доброго дня. Пытаюсь сделать следующее - есть этажи и комнаты, при нажатии на двери хочу отключить &quot;floor&quot; и включить...

Начинающий пользователь-аутист в Unity2D
Вопросов несколько, но, если хоть на какой-то найдется ответ, то буду невероятно благодарен вам. 1. Как в Unity сделать так, чтобы значения...

Перемещать спрайт Тачем по оси X Unity2d
Привет коллеги, у меня есть спрайт который движется по горизонтальной плоскости, а именно по оси X. У меня сенсорный монитор и я хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru