|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
09.11.2011, 00:35
|
#1
|
AnyKey`щик
Регистрация: 09.11.2011
Сообщений: 19
Написано 0 полезных сообщений (для 0 пользователей)
|
Проблема со скриптом
Всем привет. Есть скрипт движения по точкам. Все движется, но не так как надо. При координате объекта (Y = 1.284865) и такой же самой координате у точки объект всеравно продолжает менять свой Y. А в конце движения объект вообще поднимается примерно в 2 раза выше исходной координаты. По идее скорость по оси Y должна равнятся 0, но получается что это не так.
using UnityEngine;
using System.Collections;
public class WaypointMove : MonoBehaviour
{
public float speed_move = 2f;
public int points_count;
private Transform _thisTransform;
public Transform waypoint_0;
public Transform waypoint_1;
Transform[] waypoints = new Transform[2];
private int i = 0;
private float distance;
private float target_x;
private float target_y;
private float target_z;
private float speed_x;
private float speed_y;
private float speed_z;
void Start()
{
_thisTransform = transform;
waypoints[0] = waypoint_0;
waypoints[1] = waypoint_1;
}
void Update()
{
target_x = all_Points[i].position.x;
target_y = all_Points[i].position.y;
target_z = all_Points[i].position.z;
distance = Mathf.Sqrt((Mathf.Pow(_thisTransform.position.x - target_x, 2))-(Mathf.Pow(_thisTransform.position.y - target_y, 2))-(Mathf.Pow(_thisTransform.position.z - target_z, 2)));
speed_x = ((target_x - _thisTransform.position.x)/distance)*speed_move;
speed_y = ((target_y - _thisTransform.position.y)/distance)*speed_move;
speed_z = ((target_z - _thisTransform.position.z)/distance)*speed_move;
transform.Translate(speed_x*Time.fixedTime, speed_y*Time.fixedTime, speed_z*Time.fixedTime);
if (distance < 0.1)
{
if (i < points_count)
{
i++;
}
else
{
speed_move = 0;
}
}
}
}
|
(Offline)
|
|
09.11.2011, 01:19
|
#2
|
ПроЭктировщик
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений (для 52 пользователей)
|
Ответ: Проблема со скриптом
Unity не знаю, но distance у тебя считается очень странно.
Правильная формула
d = sqrt ((x- x0)(x- x0) + (y - y0)(y - y0) + (z - z0)(z - z0))
P.S. А что такое all_Points? Где ты их задал. Если в редакторе, то как? Хочу попробовать сделать.
|
(Offline)
|
|
09.11.2011, 04:31
|
#3
|
Бывалый
Регистрация: 24.05.2011
Адрес: Украина,Харьков
Сообщений: 890
Написано 359 полезных сообщений (для 880 пользователей)
|
Ответ: Проблема со скриптом
public class WaypointMove : MonoBehaviour { public float speed_move = 10f; public Transform [] waypoint; private int i=0; private bool move = true; void Update() { if (move) { var direction = waypoint[i].position - transform.position; var distance = direction.magnitude; direction.Normalize();
var movement = speed_move *Time.deltaTime; if (distance > movement ) { transform.Translate(direction * movement ); } else { transform.position = waypoint[i].position; if (i < waypoint.Length-1) { movement -= distance; transform.Translate((waypoint[i+1].position - waypoint[i].position).normalized * movement ); i++; } else { move = false; } } } } }
__________________
Нам суждено построить мосты и храмы,которых никогда не существовало и не могло существовать в природе.
Последний раз редактировалось pax, 09.11.2011 в 08:01.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Lestar за это полезное сообщение:
|
|
09.11.2011, 07:33
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Проблема со скриптом
Поправил предыдущий пример.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
09.11.2011, 10:36
|
#5
|
AnyKey`щик
Регистрация: 09.11.2011
Сообщений: 19
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Проблема со скриптом
Все работает, но до того момента, когда я начинаю двигать объект по диагонали. Он просто начинает вращатся по орбите вокруг вейпоинта.
|
(Offline)
|
|
09.11.2011, 12:58
|
#6
|
ПроЭктировщик
Регистрация: 12.02.2011
Сообщений: 131
Написано 23 полезных сообщений (для 52 пользователей)
|
Ответ: Проблема со скриптом
defz, проверил: поставил кубик, повесил на него скрипт. waypoint - это dummy-объекты. Если оси кубика коллинеарны (параллельны) глобальным осям, то все ок. Если оси кубика повернуты, то шастает не правильно и крутится.
Ошибка скорее всего тут
> transform.Translate((waypoint[i+1].position - waypoint[i].position).normalized * movement );
Надо делать перенос по глобальным координатам.
|
(Offline)
|
|
09.11.2011, 22:03
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Проблема со скриптом
Я на самом деле не пользуюсь транслейтом, решил оставить в примере. Видно не надо было...
public class WaypointMove : MonoBehaviour { public float speed_move = 10f; public Transform [] waypoint; private int i=0; private bool move = true; void Update() { if (move) { var direction = waypoint[i].position - transform.position; var distance = direction.magnitude; direction.Normalize();
var movement = speed_move *Time.deltaTime; if (distance > movement ) { transform.position += direction * movement; } else { transform.position = waypoint[i].position; if (i < waypoint.Length-1) { movement -= distance; transform.position += (waypoint[i+1].position - waypoint[i].position).normalized * movement; i++; } else { move = false; } } } } }
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
|
|
09.11.2011, 23:00
|
#8
|
AnyKey`щик
Регистрация: 09.11.2011
Сообщений: 19
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Проблема со скриптом
Большое спасибо, все работает как надо. И еще 1 вопрос: будет ли работать скрипт если я добавлю поворот объекта путем получения угла поворота вейпоинта, т.е. оси вейпоинта будут не параллельны глобальным осям?
|
(Offline)
|
|
10.11.2011, 00:43
|
#9
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Проблема со скриптом
будет
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:39.
|