Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
6 / 5 / 1
Регистрация: 28.03.2021
Сообщений: 132

Перемещение игрока по оси х

09.08.2022, 08:10. Показов 1601. Ответов 14

Студворк — интернет-сервис помощи студентам
Всем привет! Не могу реализовать плавное смещение игрока по оси х на минус одну единицу. Как это сделать?

Добавлено через 1 час 17 минут
Можно ли это сделать через MoveTowards? К примеру у текущей позиции игрока отнимать единицу по х
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2022, 08:10
Ответы с готовыми решениями:

Перемещение игрока в runner
подскажите пожалуйста как можно реализовать движение влево и право по оси Z при нажатие на экран,грубо говоря на левую и правую сторону...

Перемещение игрока во время анимации
Здравствуйте, есть такой вопрос, как мне можно сделать так, что бы во время проигрывания определенной анимации персонаж не мог сдвигаться с...

Перемещение 2D игрока без учета массы
Здравствуйте! Подскажите пожалуйста, как исправить управление чтобы масса не учитывалась при перемещение? . void Update() ...

14
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
09.08.2022, 08:39
Leemics,
C#
1
2
3
4
Vector2 vector = transform.position;//в Strart
//в Update
var direction = Vector2.right;
transform.position = new Vector2(vector.x + direction.x * Time.deltaTime, transform.position.y)
0
6 / 5 / 1
Регистрация: 28.03.2021
Сообщений: 132
09.08.2022, 08:43  [ТС]
zhunshun, Спасибо за ответ, но мне нужно для 3D игры
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
09.08.2022, 09:08
Leemics,
C#
1
2
3
4
Vector3 vector = transform.position;//в Strart
//в Update
var direction = Vector3.left;
transform.position = new Vector3(Mathf.Clamp(vector.x + direction.x * Time.deltaTime, vector.x, vector.x + direction.x), transform.position.y, transform.position.z);
0
6 / 5 / 1
Регистрация: 28.03.2021
Сообщений: 132
09.08.2022, 15:57  [ТС]
zhunshun, Не подскажите почему он ругается на "vector" (The name 'vector' does not exist in the current context)

Добавлено через 40 минут
zhunshun, весь код запихал в Update, в итоге не ругается на "vector". Но теперь другая проблема нечего не происходит с игроком вообще. Может я что-то не правильно делаю? Скрипт накинул на игрока
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
09.08.2022, 18:11
Leemics, сори, не подумал
C#
1
2
3
4
5
6
Vector3 vector; //поставьте отдельно перед стартом в тело класса
//потом
vector = transform.position;//в Strart
//в Update
var direction = Vector3.left;
transform.position = new Vector3(Mathf.Clamp(vector.x + direction.x * Time.deltaTime, vector.x, vector.x + direction.x), transform.position.y, transform.position.z);
1
6 / 5 / 1
Регистрация: 28.03.2021
Сообщений: 132
10.08.2022, 01:36  [ТС]
zhunshun, Спасибо за вашу помощь, но конкретно в моей ситуации, мне не подошел данный скрипт.
Вот к примеру который мне подходит, но это не плавное смещение, а резкое:

C#
1
transform.position = new Vector3(transform.position.x - 1, transform.position.y, transform.position.z);
Могли бы вы помочь переделать вот эту строку, только с плавным перемещением?
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
10.08.2022, 02:47
Лучший ответ Сообщение было отмечено Leemics как решение

Решение

Leemics, В тауом случае делаите тогда в MoveTowards
C#
1
transform.position = Vector3.MoveTowards(transform.position, new Vector3(transform.position.x - 1, transform.position.y, transform.position.z), .5f  * Time.deltaTime);
1
6 / 5 / 1
Регистрация: 28.03.2021
Сообщений: 132
10.08.2022, 06:19  [ТС]
zhunshun, Вот это уже гораздо лучше. Спасибо вам огромное!

Добавлено через 19 минут
Хотел бы еще уточнить можно ли, после того как игрок сдвинулся на -1 по оси х остановить его, а то бывает он сдвинется чуть больше или чуть меньше.
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
10.08.2022, 06:31
Цитата Сообщение от Leemics Посмотреть сообщение
Хотел бы еще уточнить можно ли, после того как игрок сдвинулся на -1 по оси х остановить его, а то бывает он сдвинется чуть больше или чуть меньше.
Да ну,даже не замечал такого. насколько дальше?
0
6 / 5 / 1
Регистрация: 28.03.2021
Сообщений: 132
10.08.2022, 06:38  [ТС]
zhunshun, Все зависит конечно же от скорости, но примерно на 0.0 - 0.1 когда какю
Пытаюсь сейчас идеальную скорость подобрат
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
10.08.2022, 06:42
Leemics, Или может быть не от скорости, а от поворота? скорость тут не причем. У него есть конкретные точки откуда и куда
0
6 / 5 / 1
Регистрация: 28.03.2021
Сообщений: 132
10.08.2022, 06:44  [ТС]
zhunshun, Я тоже над этим задумался, думаю что именно из-за управления игроком происходит эта беда)))
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
10.08.2022, 06:49
Leemics, Не проверял, можно попробовать так
C#
1
2
Vector3 target = new Vector3(transform.position.x - 1, transform.position.y, transform.position.z) - transform.position;
transform.position = Vector3.MoveTowards(transform.position, target, .5f  * Time.deltaTime);
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
11.08.2022, 19:20
Leemics, Например код, который плавно двигает объект стрелочками вправо/влево. В инспекторе можно изменить скорость или величину "шага" (в вашем случае шаг = 1, ход на одну клетку).

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
using UnityEngine;
 
public class Movement : MonoBehaviour
{
    public float Speed = 3f; // скорость передвижения
    public float Step = 1f; // ширина шага
 
    private Vector3 _targetPos;
    private Vector3 _currentPos;
 
    void Start()
    {
        _currentPos = _targetPos = transform.position;
    }
 
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.RightArrow))
            _targetPos.x += Step;
 
        if (Input.GetKeyDown(KeyCode.LeftArrow))
            _targetPos.x -= Step;
 
        if (_currentPos != _targetPos)
        {
            _currentPos = Vector3.MoveTowards(_currentPos, _targetPos, Speed * Time.deltaTime);
            transform.position = _currentPos;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2022, 19:20
Помогаю со студенческими работами здесь

Игра, подобная Roguelike - перемещение игрока по карте
В общем, пишу ASCII игрушку, семейства Rogue-like, для того что бы закрепить знание Pascal'я. Как происходит передвижение: Рисуется...

Перемещение игрока в сетевой игре пс использованием джойстика
Есть два скрипта:джойстик и скрипт игрока, который получает от джойстика вектор. Но суть в том, что джойстик работает только у последнего...

Перемещение игрока возможно лишь если клик был по необходимому объекту (?)
Здравствуйте, ребята! Я новичок в Unity, поэтому не судите строго. Столкнулся с вроде бы легкой на первый взгляд проблемой. Есть игрок...

Перемещение линии по оси х
Подскажи ,пожалуйста. Есть нарисованная линия по двум точкам. Как можно осуществить перемещение этой линии по оси х или оси у???

перемещение графика по оси Х
Помогите реализовать движение графика по оси Х. Данные поступают только по оси Y , при этом послядняя точка смещается назад, а на ее месте...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru