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

Ограничение скорости движения при движении через transform

26.06.2022, 10:28. Показов 1221. Ответов 6

Студворк — интернет-сервис помощи студентам
помогите пожалуйста разобраться в парадоксальной ситуевине, а именно имеем простой код перемещения по оси y:

C#
1
2
3
4
5
6
7
8
9
10
[SerializeField] float Speed = 0.1f;
 
        Vector2 screeenPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screeenPosition);
        float yOffset = Speed * Time.deltaTime;
        float newYpos = worldPosition.y + yOffset;
        if(newYpos < TopHook && newYpos > BotHook)
        {
         transform.position = new Vector2(transform.position.x,newYpos);
        }
проблема в том что изменение Speed и соответственно yOffset не влияет на скорость движения никак, а надо бы, более того если просто написать
C#
1
 float newYpos = worldPosition.y
то обьект продолжает двигаться, что странно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2022, 10:28
Ответы с готовыми решениями:

Инвариантность скорости света при перпендикулярном движении
В движущемся вагоне в полу есть лазер направленный вертикально вверх. Относительно системы отсчета вагона свет попадает в точку на...

Ограничение вращения камеры при использовании функции Transform.RotateAround
Здравствуйте! Я не могу разобраться как ограничить вращения камеры при использовании функции Transform.RotateAround. Я пытался использовать...

При движении мыши рисовать за ней шлейф, который исчезает при прекращении движения
Задача: при движении мыши рисовать за ней шлейф, который исчезает при прекращении движения Шлейф рисую, как удалить его при прекращении...

6
 Аватар для Uzist
209 / 143 / 68
Регистрация: 09.05.2020
Сообщений: 747
26.06.2022, 12:07
попробуй это
C#
1
transform.position = Vector2.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), Speed);
должно помочь
1
18 / 11 / 7
Регистрация: 06.04.2022
Сообщений: 172
26.06.2022, 13:06
RedRocks, transform.position = Vector2.Lerp(transform.position, new Vector2(transform.position.x, worldPosition.y), Speed);

Добавлено через 6 минут
float yOffset сделай публичной переменной и посмотри как она меняется в инспекторе

Добавлено через 28 секунд
какой эффект ты хочешь получить данным скриптом?

Добавлено через 1 минуту
чтоб объект просто двигался за мышкой по Y? с запаздыванием?
1
0 / 0 / 0
Регистрация: 31.08.2021
Сообщений: 26
26.06.2022, 14:06  [ТС]
C#
1
float yOffset = Speed * Time.deltaTime;
Делал, смотрел, при Speed = 10, yOffset постоянно равен 0.2.

какой эффект ты хочешь получить данным скриптом?

Добавлено через 1 минуту
чтоб объект просто двигался за мышкой по Y? с запаздыванием?

Нет, как это сделать я уже понял, просто / вместо +
C#
1
float newYpos = worldPosition.y + yOffset;
, либо чуть чуть по другому делить worldPosition.y на число и потом добавлять + yOffset, но тогда именно что обьект движется с запаздыванием это как бы просто уменьшение чувствительности при движении мышкой, но скорость самого движения та же, просто в этом случае не хватает стола для движения вниз). Я же хочу добиться именно уменьшения скорости самого движения. Понимаю что наверное лучше использовать физическое движение через Rigidboby, но мне предпочтительней чтобы он оставался типа Kinematic, вот и пытаюсь через transform.

Добавлено через 39 секунд
Спасибо, попробую

Добавлено через 35 минут
C#
1
transform.position = Vector2.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), Speed);
Попробовал вот это, оч похоже на то что мне надо,насколько я понимаю то переменная Speed задает величину замедления движения, только когда я задаю ограничения движения по оси y например

C#
1
2
3
4
if(newYpos < TopHook && newYpos > BotHook)
            {
             transform.position = Vector2.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), Speed);
            }
где TopHook это ограничение по оси Y сверху и BotHook снизу, то движение у границ с какими то фризами происходит, и просто прекращается около пограничных значений, но на приличном расстоянии, почему так происходит нигде не нашел ответа, а мне необходимо ограничить движение обьекта по обеим осям. Если есть какое решение проблемы или где про такое почитать скиньте пожалуйста(Про сам Lerp читал). Вообще для нелинейного движения советуют HOTween или DOTween, может в этом направлении копать?
0
 Аватар для Uzist
209 / 143 / 68
Регистрация: 09.05.2020
Сообщений: 747
26.06.2022, 14:29
я не очень тебя понял, но видимо ты хочешь сделать, чтобы объект не уходил дальше определённого расстояния?
Если так, то создай геймобжект(центр от которого будет высчитываться расстояние).
От него уже делай условие





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
   private Transform CenterPoint;
    public float MaxDistance = 100f;
 
 
    
    void Start()
    {
        CenterPoint = GameObject.FindWithTag("Center").GetComponent<Transform>();
        StartPosition = GetComponent<Transform>().position;
    }
 
  
    void Update()
    {
        
 
 
        float dist = Vector2.Distance(CenterPoint.position, this.transform.position);
 
      
            if (MaxDistance > dist)
       {
                this.transform.position = Vector2.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), speed);
 
        }
     
 
    
}
1
0 / 0 / 0
Регистрация: 31.08.2021
Сообщений: 26
26.06.2022, 14:54  [ТС]
Спасибо за подсказку,только мне нужно чтобы обьект перемещался в области в форме прямоугольника, а по вашему получается что он как бы в круге, сравнивает удаленность от центра
0
18 / 11 / 7
Регистрация: 06.04.2022
Сообщений: 172
26.06.2022, 20:45
RedRocks, Объект у тебя перемещается только по оси Y, правильно? и надо его ограничить сверху и снизу, как я понял у тебя там какойто прямоугольник, который и должен быть ограничителем. создай два пустых объекта и расположи их на границах прямоугольника, они и будут ограничивать. дальше в скрипте создаешь условие
вот пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class YposChange : MonoBehaviour
{
    public Transform _upLimit;
    public Transform _downLimit;
    [SerializeField] float Speed = 0.1f;
 
    void Update()
    {
        Vector2 screeenPosition = new(Input.mousePosition.x, Input.mousePosition.y);
        Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screeenPosition);
        if (transform.position.y < _upLimit.position.y && transform.position.y > _downLimit.position.y)
        {
            transform.position = Vector2.Lerp(transform.position, new Vector2(transform.position.x, worldPosition.y), Speed);
        }
    }
}
Добавлено через 2 минуты
RedRocks, Обрати внимание что у нас с Uzist, разные Lerp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2022, 20:45
Помогаю со студенческими работами здесь

При движении слайдера вверх или вниз должен срабатывать таймер, а при остановке движения - останавливаться
Добрый день.Такая проблема.....Нужно сделать такую вещь. При движении слайдера вверх или вниз должен срабатывать таймер,но останавливаться...

Ограничение скорости передачи через WI-FI
Добрый день! Купил себе модем Router Dsl-2600U, не составило сложности все настроить самому, но вот что странно, у меня 2 компа, 1 я...

Ограничение скорости через роутер
Подскажите пожалуйста как можно ограничить скорость интернета через роутер, на каждый компьютер отдельно. Роутер Asus WL-AM604g. Заранее...

Вывод зависимости скорости от времени при движении с сопротивлением воздуха
Тело падает вертикально вниз с нулевой начальной скоростью. На тело действует сила сопротивления воздуха Fсопр = kV^2 (прямо...

Ограничение скорости через ADSL модем
Имеется adsl модем(Интеркросс IC x DSL 5633 NE) раздающий 2 компам инет. На 1ом компе человек постоянно качает с торрентов, а на втором...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru