Пятница, 27 Декабря 2024, 03:28

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Перемещение объекта 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)
  • Страница 1 из 1
  • 1
Поиск:

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