Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для dedlovscky
16 / 11 / 0
Регистрация: 06.03.2015
Сообщений: 162

Змейка движение частей тела

22.01.2016, 07:35. Показов 5889. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!!
Уже очень долго не могу реализовать движение частей тела, чтобы эти части описывали траекторию сначала головы,а потом, по мере съеденных объектов, каждый сегмент тела двигался по траектории сегмента перед ним.

И как поставить каждый новый элемент тела за другим в нужную позицию???
Очень нужна помощь!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2016, 07:35
Ответы с готовыми решениями:

Движение тела по окружности в пространстве(вычисление координат тела)
Здравствуйте, меня интересует такой вопрос: можно ли математически смоделировать движение тел по окружности в пространстве так, чтобы их...

Игра змейка. Ошибка с добавлением нового тела
Добрый вечер, возникла проблема при создании игры змейка(да-да). Необходимо создавать (в коде java) новое тело(голова уже есть) и...

Распознавания частей тела человека по фото (видео)
есть задача: фиксировать положение человека и перемещение его по камерам, для этого нужно распознавать части тела, ну и потом смотреть их...

25
44 / 17 / 7
Регистрация: 19.09.2015
Сообщений: 55
22.01.2016, 14:01
В классической змейке само тело не движется, удалятся последний элемент с хвоста и добавляется с головы, создается впечатление движения.
2
 Аватар для dedlovscky
16 / 11 / 0
Регистрация: 06.03.2015
Сообщений: 162
23.01.2016, 13:47  [ТС]
У меня игра на Unity, там плавное движение змейки.Голова это отдельный префаб, тело другой префаб,который добавляются за голову,тело должно двигаться по траектории движения головы,там ничего не удаляется.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
23.01.2016, 14:06
Тут надо смотреть как реализовано движение головы и как связаны части тела змеи.
0
 Аватар для dedlovscky
16 / 11 / 0
Регистрация: 06.03.2015
Сообщений: 162
24.01.2016, 06:55  [ТС]
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
   [Range(1, 20)]
    public int speedNormal = 8;
    [Range(1, 30)]
    public int speedUp = 20;
    [Range(1, 15)]
    public int speedDown = 4;
    int position_x, position_y;
    int speed;
    Vector3 rotation;
 
    void Start()
    {
        Data.indexCount = 0;
        speed = speedNormal;
        rotation = Vector3.zero;
    }
 
    void Update () {
        Moves();
        Speed();
 
        if (Data.indexCount == Data.wayPoint.Count)
            Data.indexCount = 0;
 
        if (Data.wayPoint.Capacity != Data.wayPoint.Count)
            Data.wayPoint.Add(transform.position);
        else
        {
            Data.wayPoint.Clear();
            Data.wayPoint.Add(transform.position);
        }
 
        transform.Translate(Vector2.left * Time.deltaTime * speed);
        transform.Rotate(rotation);
 
        position_x = (int)transform.position.x;
        position_y = (int)transform.position.y;
        Outside();
    }
 
    void Speed()
    {
        if(Input.GetKey(KeyCode.UpArrow))
        {
            speed = speedUp;
        }
 
        if(Input.GetKey(KeyCode.DownArrow))
        {
            speed = speedDown;
        }
 
        if(Input.GetKeyUp(KeyCode.UpArrow)||Input.GetKeyUp(KeyCode.DownArrow))
        {
            speed = speedNormal;
        }
    }
 
    void Moves()
    {
        if(Input.GetKeyDown(KeyCode.LeftArrow))
        {
            rotation.z = 2.0f;
        }
 
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            rotation.z = -2.0f;
        }
    }
 
    void Outside()
    {
        switch(position_x)
        {
            case -70:
                transform.position=new Vector2(69,position_y);
                break;
            case 70:
                transform.position=new Vector2(-69,position_y);
                break;
 
        }
 
        switch(position_y)
        {
            case 44:
                transform.position = new Vector2(position_x, -43);
                break;
            case -44:
                transform.position = new Vector2(position_x, 43);
                break;
        }
    }
}
Добавлено через 1 минуту
Вот я и хочу понять,как мне связать голову и части тела воедино.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
24.01.2016, 09:17
dedlovscky, как вариант, список вейпоинтов на каждую часть тела, при повороте или каждые N юнитов пути головы добавлять в начало вейпоинт с координатами головы. Получится, что каждая часть тела ползет к предыдущей части тела, а голова создаёт маршрут. И не забывать, при достижении хвостом своего вейпоинта, удалять этот вейпоинт. При удлинении змеи список вейпоинтов надо тоже удлинять.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
25.01.2016, 16:10
Если речь идёт о классической змейки, то создаёте хвост:
C#
1
2
// Keep Track of Tail
List<Transform> tail = new List<Transform>();
При движении нужно на место головы ставить последний элемент хвоста.

Весь процесс описан в пошаговой инструкции: Unity 2D Snake Tutorial
0
 Аватар для dedlovscky
16 / 11 / 0
Регистрация: 06.03.2015
Сообщений: 162
25.01.2016, 19:50  [ТС]
В том то и дело,что не классическая


Добавлено через 6 минут
http://www.flashplayer.ru/play_7910.php
Типо того
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
25.01.2016, 22:18
Похожа на такую: Змейка Scaven'а на Unity
0
44 / 17 / 7
Регистрация: 19.09.2015
Сообщений: 55
26.01.2016, 00:35
Классическая змейка.
Вот вам еще задача. Когда змейка выходит за пределы поля, она зеркально появляется с другой стороны.
https://www.youtube.com/watch?v=9kceAymRAoE
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
26.01.2016, 00:46
Цитата Сообщение от Sadonis Посмотреть сообщение
Классическая змейка.
Вот вам еще задача. Когда змейка выходит за пределы поля, она зеркально появляется с другой стороны.
Такую задачку я решил:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    void OnTriggerEnter2D(Collider2D coll)
    {
        // Food?
        if (coll.name.StartsWith("FoodPrefab"))
        {
            // Get longer in next Move coll
            ate = true;
 
            // Remove the food
            Destroy(coll.gameObject);
 
            GameObject camera = GameObject.Find("Main Camera");
            SpawnFood spawnFood = camera.GetComponent<SpawnFood>();
            spawnFood.Spawn();
        }
        else if (coll.name.StartsWith("Border"))
        {
            if (coll.name == "BorderRight")
            {
                GameObject borderLeft = GameObject.Find("BorderLeft");
                transform.position = new Vector3(borderLeft.transform.position.x + 1, transform.position.y);
            } else if (coll.name == "BorderLeft")
            {
                GameObject borderRight = GameObject.Find("BorderRight");
                transform.position = new Vector3(borderRight.transform.position.x - 1, transform.position.y);
            }
            else if (coll.name == "BorderTop")
            {
                GameObject borderBottom = GameObject.Find("BorderBottom");
                transform.position = new Vector3(transform.position.x, borderBottom.transform.position.y + 1);
            }else if (coll.name == "BorderBottom")
            {
                GameObject borderTop = GameObject.Find("BorderTop");
                transform.position = new Vector3(transform.position.x, borderTop.transform.position.y - 1);
            }
        }
        else // Collided with Tail or Border
        {
            // ToDo show lose scene
            Debug.Log("You lost.");
        }
    }
0
44 / 17 / 7
Регистрация: 19.09.2015
Сообщений: 55
26.01.2016, 01:20
https://www.youtube.com/watch?... U#t=72.701

Добавлено через 17 минут
Для решения этой задачи обязательно использовать физику и коллайдеры
0
 Аватар для dedlovscky
16 / 11 / 0
Регистрация: 06.03.2015
Сообщений: 162
26.01.2016, 15:19  [ТС]
Это все хорошо, но у меня к знающим конкретный вопрос НЕ про классическую змейку.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
26.01.2016, 15:58
dedlovscky, trail render либо вручную вейпоинты организовывать для хвоста
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
26.01.2016, 16:04
dedlovscky, а этот вариант неклассической змейки чем не понравился? Змейка Scaven'а на Unity
0
 Аватар для dedlovscky
16 / 11 / 0
Регистрация: 06.03.2015
Сообщений: 162
27.01.2016, 10:18  [ТС]
А где добавление хвоста там???Или я не увидел???

Добавлено через 16 часов 56 минут
Да что,такое,я же пример показал,что должно быть на выходе.
Вот http://www.flashplayer.ru/play_7910.php
Если бы все так примитивно было,я бы не стал терять время и писать сюда.

Добавлено через 3 минуты
Динамическое добавление элементов хвоста и их четкое перемещение по координатам головы(Тело должно повторить пройденный пусть головы).
Понятно что без waypoint здесь не обойтись.

Добавлено через 2 минуты
Пожалуйста,кому не лень,посмотрите пример по ссылке и если знаете,то подскажите,каков там алгоритм.
Буду очень признателен вам!!!
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
28.01.2016, 00:59
Цитата Сообщение от dedlovscky Посмотреть сообщение
А где добавление хвоста там???Или я не увидел???
Там есть добавление хваста в коде. Змейка получается точно такая же, какую вы хотите. Показать где хвост добавляется или сами найдёте?
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
28.01.2016, 01:24
Нужно в Player.cs добавить:
C#
1
2
3
4
5
6
7
8
9
    public void CreateTail()
    {
        Vector3 pos = current.transform.position - current.transform.forward * 2;
        GameObject tail = Instantiate(Resources.Load("Prefabs/TailPrefab"), pos, transform.localRotation) as GameObject;
        tail.GetComponent<Tail>().target = current.transform;
        tail.GetComponent<Tail>().targetDistance = 1f;
        Destroy(tail.GetComponent<Collider>());
        current = tail.transform;
    }
Моё творение:
Миниатюры
Змейка движение частей тела  
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
28.01.2016, 01:45
Я там ошибся:
C#
1
Vector3 pos = current.transform.position - current.transform.forward * 2;
Нужно двойку на единицу исправить.

В туториале всё есть: Змейка Scaven'а на Unity
0
 Аватар для dedlovscky
16 / 11 / 0
Регистрация: 06.03.2015
Сообщений: 162
28.01.2016, 08:07  [ТС]
Спасибо всем, сделал сам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2016, 08:07
Помогаю со студенческими работами здесь

Змейка движение вправо
Здравствуйте,пишу игру змейку дошёл до того чтобы когда дошёл до конца массива перешёл на 0-ой столбец,т.е чтобы было циклично,вниз(клавиша...

Движение тела
Задания: 13. Тело брошено под углом к горизонту. Формулы проекции скорости при подъеме и спуске на ось ОХ и ось ОУ . рисунок 14....

Движение тела
Программа,иллюстрирующая движение тела по синусоиде(до края формы и обратно)...

Движение тела
Помогите кодом на счет движения тела, даижения прямой сам уже сделал по таймеру!

Движение тела
Программа,иллюстрирующая движение тела по синусоиде!..(до конца формы и обратно)Помогите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru