Перемещение объекта Unity2D
|
|
RebyataYaNeShary | Дата: Пятница, 09 Декабря 2016, 20:14 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Нужна помощь. Помогите со скриптом. Типа, если объект попадает на эти координаты, то возвращается на прежние
|
|
| |
BotOne | Дата: Пятница, 09 Декабря 2016, 23:01 | Сообщение # 2 |
уже был
Сейчас нет на сайте
| Код // Прежние координаты, куда возвращается. Vector3 lastPosition = new Vector3(1, 0, 0); // Координаты для проверки, если объект попал сюда. Vector3 checkPosition = new Vector3(0, 0, 0);
if (transform.position == checkPosition) { transform.position = lastPosition; }
Но метод с координатами не есть хорошее решение, лучше использовать OnTriggerEnter или просто проверять дистанцию до цели.
|
|
| |
romeo98 | Дата: Пятница, 09 Декабря 2016, 23:47 | Сообщение # 3 |
участник
Сейчас нет на сайте
| ЦитатаBotOne ( ) Но метод с координатами не есть хорошее решение
Да, ты прав. Просто объясню ТС почему. Некоторые способы передвижения игрока действуют следующим способом - они прибавляют к позиции какое-то очень маленькое значение, но очень часто. Например, 0.03. Допустим, что твоя точка на которой ты хочешь остановить объект это 1. Если игрок в один момент/фрейм находиться на точке 0.99, то в следующий момент/фрейм он будет в точке 1.02. Он просто минует точку 1. Поэтому, просто приравнивание двух позиций может не сработать. С такой проблемой можно столкнуться в transform.Translate, в физике (rigidbody). BotOne, дал правильное решение
ЦитатаBotOne ( ) лучше использовать OnTriggerEnter или просто проверять дистанцию до цели
Лично я бы использовал вариант с дистанцией, чтобы не запариваться с триггерами. Просто проверь, если дистанция достаточно маленькая, то можно считать, что объект на конечной точке.
Flist - social platform PuzzleSystem - Open-source Unity Asset [2D] Mission: Defender
Сообщение отредактировал romeo98 - Пятница, 09 Декабря 2016, 23:56 |
|
| |
RebyataYaNeShary | Дата: Суббота, 10 Декабря 2016, 20:38 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| Спасибо за метод с координатами. Да, возможно лучше использовать триггеры, но в моем проекте лучше их не использовать, а насчет проверки дистанции до цели я бы использовал. Можете скинуть какой нибудь пример как это сделать. Спасибо.
|
|
| |
FlyOfFly | Дата: Суббота, 10 Декабря 2016, 21:02 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Код Vector3 lastPosition = new Vector3(1, 0, 0); // Координаты для проверки, если объект попал сюда. Vector3 checkPosition = new Vector3(0, 0, 0); //растояние Vector3 distance = transform.position - checkPosition; //радиус Vector3 radious = new Vector3(1, 1, 1); if (distance.magnitude <= radious.magnitude ) { transform.position = lastPosition; }
ну или такая проверка, что бы наверняка
Код if (Mathf.Abs(distance.x) <= radious.x && Mathf.Abs(distance.y) <= radious.y && Mathf.Abs(distance.z) <= radious.z ) { transform.position = lastPosition; }
|
|
| |
RebyataYaNeShary | Дата: Суббота, 10 Декабря 2016, 21:45 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| Спасибо большое Добавлено (10 декабря 2016, 21:44) --------------------------------------------- Попробовал, появились ошибки, что делать file:///C:/Users/andrey/Desktop/Screenshot_1.jpg Добавлено (10 декабря 2016, 21:45) --------------------------------------------- The best overloaded method match for `UnityEngine.Vector3.Vector3(float, float, float)' has some invalid arguments
Argument `#1' cannot convert `double' expression to type `float'
|
|
| |
FlyOfFly | Дата: Суббота, 10 Декабря 2016, 21:54 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| ЦитатаRebyataYaNeShary ( ) The best overloaded method match for `UnityEngine.Vector3.Vector3(float, float, float)' has some invalid arguments
Argument `#1' cannot convert `double' expression to type `float'
f добавь к значением )
|
|
| |
RebyataYaNeShary | Дата: Суббота, 10 Декабря 2016, 22:36 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| Спасибо. Такой прикол. Смотрел видосы на такие темы, и там объект сам движется (типа +коорд тайм дельтатайм), а у меня в игре, я сам перетаскиваю объект. И когда я перетаскиваю, скрипт не работает, может он не совместим с скриптом перетаскивания. Или проблема в том что у меня 2D объекты прост спрайты. На всякий вот скрипт перетаскивания объекта Код using UnityEngine; using System.Collections; using Image = UnityEngine.UI.Image;
public class MoveFood : MonoBehaviour {
Image Food; bool MouseDown = false;
void Start () { }
void OnMouseDown() {
MouseDown = true; }
void OnMouseUp() {
MouseDown = false; }
void Update () {
Vector3 Cursor = Input.mousePosition;
Cursor = Camera.main.ScreenToWorldPoint(Cursor);
Cursor.z = -0.09f;
if (MouseDown) {
this.transform.position = Cursor;
}
} } Добавлено (10 декабря 2016, 22:36) --------------------------------------------- The variable `lastPosition' is assigned but its value is never used ?
|
|
| |
beril | Дата: Воскресенье, 11 Декабря 2016, 12:12 | Сообщение # 9 |
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
| ЦитатаRebyataYaNeShary ( ) The variable `lastPosition' is assigned but its value is never used ? Это предупреждение а не ошибка на функционал не влияет. Ты обьявил переменную и присвоил ей знаяение , но нигде в коде не использовал ее Отключить такие ошибки можно так
Код #pragma warning disable 0168 // variable declared but not used. #pragma warning disable 0219 // variable assigned but not used. #pragma warning disable 0414 // private field assigned but not used.
Накодил? Убери за собой! Инвентарь в Unity(UI) Инвентарь в Unity(GUI)
|
|
| |