Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 3
1

Ограничение движения объекта в заданной области и его запуск с силой по вектору

13.12.2018, 21:34. Показов 4592. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вечер добрый. Я новичок в Unity. Пытаюсь сделать механику подобную Angry Birds, собственно по ней и вопрос.
Суть в том, чтобы кликнув по экрану началось считывание положения мыши и на его основе двигался объект, я это реализовал через обычную разность начального положения мыши(во время щелчка) и положения мыши, пока кнопка нажата, умноженное на коэффициент(возможно есть вариант практичнее). Суть вопроса в том, как ограничить область, в которой может перемещаться объект, то-есть он сможет двигаться лишь в определенном окружности, аналогично вектору мыши, двигающейся за ней.

Также вопрос, как лучше реализовать его запуск, как в AB, который я реализовал через AddForce, но он лишь набирает скорость


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
  
    [SerializeField]
    Rigidbody rb;
 
    [SerializeField]
    int minSpeed = 100;
 
    [SerializeField]
    float powerMultiplier = 100;
 
    [SerializeField]
    float movementRange = 150;
 
    bool key, start = true;
 
    Vector3 startPos, _curPos, startBirdPos, posDif, curPosBird;
 
    void Start () {
        
    }
    
    void Update () {
        if (Input.GetMouseButtonDown(0) && start)
        {
            startPos = Input.mousePosition;
 
            startBirdPos = rb.transform.position;
 
            key = true;
 
            start = false;
        }
        if (Input.GetMouseButtonUp(0))
        {
            rb.isKinematic = false;
 
            key = false;
        }
        if (key)
        {
            _curPos = Input.mousePosition;
 
            posDif = _curPos - startPos;
 
            curPosBird = startBirdPos + posDif * 0.05f;
 
            if (Vector3.Distance(startBirdPos, curPosBird) <= movementRange * 0.05f)
            {
 
                rb.transform.position = curPosBird;
            }
            else
            {
               //ограничение движения в области
            }
        }
 
        var _distance = Vector3.Distance(startPos, _curPos);
 
        if (_distance > movementRange) _distance = movementRange;
 
        var _force = Mathf.Clamp(0, minSpeed, _distance * powerMultiplier);
 
        rb.AddForce(Vector3.Normalize(startPos - _curPos) * _force, ForceMode.Force);
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2018, 21:34
Ответы с готовыми решениями:

Ограничение движения объекта в 3D
Прошу помощи. Нужно ограничить возможную область движения для корабля в SpaceShooter-e. Для...

Ограничение движения объекта
Есть картинка, мы передвигаем её с клавиатуры, при помощи стрелок. Как можно ограничить...

Ограничение движения объекта с помощью hitTestPoint
Столкнулся с проблемой. Есть мувик Stage1 на сцене, в нем 2 мувика currentPath (путь) и currentMC....

Ограничение области перемещения объекта
Всем доброго времени суток. У меня есть вот такой вот код (пример кода): &lt;!-- Настройка...

1
Эксперт .NETАвтор FAQ
10418 / 5148 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
14.12.2018, 01:59 2
Лучший ответ Сообщение было отмечено martinbirn как решение

Решение

Цитата Сообщение от martinbirn Посмотреть сообщение
как ограничить область, в которой может перемещаться объект
Нужно вычислить направляющий вектор и ограничить его длину:

C#
1
2
3
4
5
6
7
8
9
10
posDif = _curPos - startPos;
 
var distance = posDif.magnitude;
 
if (distance > maxDistance)
   distance = maxDistance;
 
var dir = posDif.normalized;
 
curPosBird = startBirdPos + dir * distance * 0.05f;
1
14.12.2018, 01:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2018, 01:59
Помогаю со студенческими работами здесь

Ограничение перемещения курсора в заданной области
пытаюсь задать ограничение для работы мышью.. использую следущее RECT r; r.left=100; r.top=100;...

Создайте программный код для движения геометрического объекта по заданной траектории
Создайте программный код для движения геометрического объекта по заданной траектории.Для рисования...

Составить программу движения объекта по графику функции ”Астроида”, заданной параметрически:
Составить программу движения объекта по графику функции ”Астроида”, заданной параметрически: x = a...

Перемещение объекта путем направления его движения + натягивание
Здравствуйте, Форумчане! Столкнулся с одной проблемой! Не могу организовать такую систему...

Как увеличить скорость движения объекта по таймеру, если его интервал уже и так равен единице
Есть объект он передвигается по форм, передвижение осуществлено по таймеру, в таймере интервал...

В чем сходство работ, совершаемых силой упругости и силой тяжести?
Помогите пожалуйста, дайте ответ, голову уже сломал...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru