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

Движение персонажа

31.07.2020, 04:29. Показов 1832. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Создал игру, но потом нашел не большой баг и не могу исправить!
У меня есть два объекта на сцене, персонаж к ним должен идти, когда я прикосаюсь к первому объекту, то он должен пропасть и перейди в другое место по координатам X, а появиться он тогда когда я прикоснусь ко второму объекту, а если я нажимаю на экран не дойдя до 2 объекта, то он у меня идет к объекту, который еще не появился!
Как это можно исправить?)
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
public bool CheckPlayerMove = true;
 
void Update()
    {
        if (CheckPlayerMove) transform.position = Vector3.MoveTowards(transform.position, Coin1.transform.position, 3f * Time.deltaTime);
        if (!CheckPlayerMove) transform.position = Vector3.MoveTowards(transform.position, Coin2.transform.position, 3f * Time.deltaTime);
    }
 
//скрипт на кнопку для управления персонажем 
public void MovePlayer()
    {
        CheckPlayerMove = !CheckPlayerMove;
    }
 
 public void OnTriggerEnter2D(Collider2D othet)
    {
        if (othet.tag == "Coin1")
        {
            CheckPlayerMove = false;
 
            Coin1.SetActive(false);
            Coin1.transform.position = new Vector3(Coin1.transform.position.x, 2.65f, 0f);
            Coin2.SetActive(true);
            Coin2.transform.position = new Vector3(Random.Range(-0.3f, 1.3f), -2.65f, 0f);
 
        }
 
        if (othet.tag == "Coin2")
        {
            CheckPlayerMove = true;
 
            Coin1.SetActive(true);
            Coin1.transform.position = new Vector3(Coin1.transform.position.x, 2.65f, 0f);
            Coin2.SetActive(false);
            Coin2.transform.position = new Vector3(Random.Range(-1.6f, 1.6f), -2.65f, 0f);
 
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2020, 04:29
Ответы с готовыми решениями:

Движение персонажа
Пишу на андроид. Есть 3 кнопки, лево право, прыжок. Так вот, все три действия реализовываю с помощью OnMouseDrag и OnMouseDown. Так вот,...

Движение персонажа
Как сделать так что б персонажа двигался в направлении камеры, вот моя попытка Turn = myCam.transform.rotation.eulerAngles.y;...

Движение персонажа 2д
Приветствую! Делаю 2д платформер. Правильно ли я делаю движение персонажа? Если делать так, то персонаж как то медленно падает. ...

7
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
31.07.2020, 06:13
Если не ошибаюсь, то вам нужно что-то вроде этого. Возможно в коде синтаксические ошибки, так как писал здесь
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
using System;
 
class MainClass {
  public static void Main (string[] args) {
    Console.WriteLine ("Hello World");
  } 
public bool CheckPlayerMove = true;
 
void Update()
    {
        if (CheckPlayerMove) transform.position = Vector3.MoveTowards(transform.position, Coin1.transform.position, 3f * Time.deltaTime);
        if (!CheckPlayerMove) transform.position = Vector3.MoveTowards(transform.position, Coin2.transform.position, 3f * Time.deltaTime);
    }
 
//скрипт на кнопку для управления персонажем 
public void MovePlayer()
    {
        CheckPlayerMove = !CheckPlayerMove;
         changeTarget();
    }
 
 public void OnTriggerEnter2D(Collider2D othet)
    {
        if (othet.tag == "Coin1")
        {
            CheckPlayerMove = false;
 
            changeTarget() ;
            
 
        }
 
        if (othet.tag == "Coin2")
        {
            CheckPlayerMove = true;
 
            changeTarget();
 
        }
    } 
    
    void changeTarget()
    {
      if(CheckPlayerMove == false) 
      {
 
            Coin1.SetActive(false);
            Coin1.transform.position = new Vector3(Coin1.transform.position.x, 2.65f, 0f);
            Coin2.SetActive(true);
            Coin2.transform.position = new Vector3(Random.Range(-0.3f, 1.3f), -2.65f, 0f);
      } 
      else
      {
            Coin1.SetActive(true);
            Coin1.transform.position = new Vector3(Coin1.transform.position.x, 2.65f, 0f);
            Coin2.SetActive(false);
            Coin2.transform.position = new Vector3(Random.Range(-1.6f, 1.6f), -2.65f, 0f);
 
      }
    }
}
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 87
31.07.2020, 06:44  [ТС]
А теперь при нажатии первый раз у меня появляется первый объект, а второй раз второй объект а первый пропал , то есть я до них даже не дохожу
0
 Аватар для epyskop
144 / 131 / 30
Регистрация: 26.07.2017
Сообщений: 633
31.07.2020, 17:38
А если CheckPlayerMove поставить после того, как уже будет заданы координаты Coin1 и Coin2?

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
if (othet.tag == "Coin1")
        {
            
 
            Coin1.SetActive(false);
            Coin1.transform.position = new Vector3(Coin1.transform.position.x, 2.65f, 0f);
            Coin2.SetActive(true);
            Coin2.transform.position = new Vector3(Random.Range(-0.3f, 1.3f), -2.65f, 0f);
            CheckPlayerMove = false;
 
        }
 
        if (othet.tag == "Coin2")
        {
            
 
            
            Coin2.SetActive(false);
            Coin2.transform.position = new Vector3(Random.Range(-1.6f, 1.6f), -2.65f, 0f);
            Coin1.SetActive(true);
            Coin1.transform.position = new Vector3(Coin1.transform.position.x, 2.65f, 0f);
            CheckPlayerMove = true;
 
        }
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
31.07.2020, 20:00
Цитата Сообщение от OKLINS Посмотреть сообщение
а если я нажимаю на экран не дойдя до 2 объекта, то он у меня идет к объекту, который еще не появился!
Но вы ведь сами задаёте это поведение и меняете направление персонажу в методе MovePlayer.

Распишите более конкретно - что должно происходить при нажатии по экрану, когда персонаж идёт уже ко второму объекту?
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 87
01.08.2020, 05:06  [ТС]
Так, игра 2D, есть две точки Coin1 Coin2, у Coin2 стоит
C#
1
SetActive(false);
, когда наш персонаж спавнится, то он должен пойти к точки Coin 1, также он может менять направление по нажатию, и нужно сделать так, что когда игрок коснется Coin2(а после этого Coin2 рандомно спавнится), нужно чтобы он не знал где находиться этот Coin2 а запоминал его плследние координаты и двигался туда при нажатии на экран
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
01.08.2020, 08:31
Лучший ответ Сообщение было отмечено OKLINS как решение

Решение

Мне действительно неудобно, что до сих пор не понимаю вашу идею целиком, но всё же.

Вы пишете
Цитата Сообщение от OKLINS Посмотреть сообщение
когда наш персонаж спавнится, то он должен пойти к точке Coin 1, также он может менять направление по нажатию
Вот начало игры, появился персонаж, Coin1 виден, Coin2 скрыт. Персонаж идёт к Coin1. С этим всё понятно.
Но куда должен двигаться персонаж, если он ещё не успел дойти до Coin1, но случилось нажатие по экрану?
1
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 87
01.08.2020, 10:46  [ТС]
Ребят все спасибо! Я все решил)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2020, 10:46
Помогаю со студенческими работами здесь

Движение персонажа
Всем привет! Подскажите как сделать движение персонажа на С# как в игре Subway surfers?

Движение персонажа 3D
Уважаемые коллеги, пару дней как увлекся Unity и чтобы изучить его как можно лучше, решил написать Subway Surfers самосоятельно. в Unity...

Движение персонажа
Здравствуйте! Как сделать движение и отражение персонажа. я сделала движение вправо-влево и сделала отражение но работает неккоректно....

Движение персонажа 2d платформер
Здравствуйте! Нужно сделать движение персонажа в 2д платформере, пока что только влево/вправо. GetAxis настроил так, чтобы при движении...

Движение персонажа типа марио
Пишу в 2d варианте. Все вроде бы нормально, спрайт персонажа движется хорошо и вправо и влево и подпрыгивает хорошо. Но как...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru