Четверг, 26 Декабря 2024, 04:06

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Движение объекта. Ограничение по скорости и остановка.
alexsilentДата: Четверг, 01 Августа 2013, 23:10 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Уже пару дней мучаюсь с rigidbody, и с AddForce... Хочу сделать, чтобы герой подлетал плавно к цели и останавливался, а если выбирать другую цель,
то перемещался туда по законам инерции слегка с заносом, но без изменение угла/поворота (объект который не поворачивается носом к цели)...

Разобрался с тем, чтобы объект двигался так, но теперь появилась новая проблема, объект движется без ограничения по скорости, и занос слишком крутой и
не знаю, как сделать чтобы останавливался объект около цели. Как сделать, чтобы ограничить движение по скорости?
Код

#pragma strict

var target : Vector3;
var speed : float = 2.0;

function Update() {
      if(Input.GetMouseButton(0)) {
       var distance : float = transform.position.z - Camera.main.transform.position.z;
       target = Camera.main.ScreenToWorldPoint (Vector3 (Input.mousePosition.x,Input.mousePosition.y,distance)); // set target
      }
      rigidbody.AddForce((target-transform.position).normalized*speed); //apply force
      print("rigidbody.velocity: "+rigidbody.velocity);
}


Сообщение отредактировал alexsilent - Пятница, 02 Августа 2013, 05:22
lentinantДата: Пятница, 02 Августа 2013, 00:48 | Сообщение # 2
ленивый программист
Сейчас нет на сайте
Создаешь переменную максимальной скорости, создаешь временный двухмерный вектор, и присваиваешь его x и y компонентам x и z компоненты rigidbody.velocity, берешь его magnitude, сравниваешь ее с твоей максимальной скоростью, и если максимальная скорость превышена, нормализируешь временный вектор, умножаешь его на максимальную скорость, и обратно присваиваешь компонентам rigidbody.velocity компоненты временного вектора.

Когда-то тут будут ссылки на крутые проекты. Или нет.
alexsilentДата: Пятница, 02 Августа 2013, 05:17 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
lentinant, Спасибо! Более-менее нормально получилось! Только вот с акселерацией траблы непонятные) хотелось чтобы ускорение накапливалось постепенно, но из-за того-что я пока не понимаю как делать я умножаю просто в общую кучу и это получается тоже дополнительной скоростью, а не постепенным ускорением.

Код

#pragma strict

var target : Vector3;
var speed : float = 10.0;
var acceleration : float = 12.0;

function Update() {
    if(Input.GetMouseButton(0)) {
     var distance : float = transform.position.z - Camera.main.transform.position.z;
     target = Camera.main.ScreenToWorldPoint (Vector3 (Input.mousePosition.x,Input.mousePosition.y,distance)); // set target
    }
}

function FixedUpdate()
{
    rigidbody.velocity *= .9;
    var correct_speed : float = Mathf.Clamp(Vector3.Distance(target,transform.position)*.1,0,.5);
    rigidbody.AddForce((target-transform.position).normalized * speed * acceleration * correct_speed); //apply force
    if (rigidbody.velocity.magnitude > speed) {
     rigidbody.velocity = rigidbody.velocity.normalized * speed;
    }
    print("rigidbody.velocity 0: "+rigidbody.velocity.magnitude);
}


Сообщение отредактировал alexsilent - Пятница, 02 Августа 2013, 05:23
ЛевшаДата: Пятница, 02 Августа 2013, 06:37 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата (alexsilent)
это получается тоже дополнительной скоростью, а не постепенным ускорением.

Mathf.Lerp


X.cor.R (Prologue)
lentinantДата: Пятница, 02 Августа 2013, 17:19 | Сообщение # 5
ленивый программист
Сейчас нет на сайте
Или Mathf.SmoothDamp

Когда-то тут будут ссылки на крутые проекты. Или нет.
Fr0sTДата: Пятница, 02 Августа 2013, 20:18 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
или Vector3.moveTowards =)



  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг