| Перемещение объекта 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)
 |  |  |  |  |