Телепорт

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Телепорт

Сообщение Denis313 08 ноя 2013, 09:46

Пытаюсь сделать теле пор персонажа, но скрипт работает не корректно, что не так?

Синтаксис:
Используется csharp
                                if (Input.GetKey (KeyCode.Mouse0))
                                {
                Vector3 a =     Input.mousePosition;

            Vector3 b =  CamCil.ScreenToWorldPoint(new Vector3(a.x, a.y, 0.0f));
                       
                       
                                                transform.Translate (new Vector3(b.x,b.y,0.0f));
                                }



Персонаж просто подает сильно в минус по Y X не передается вовсе!
Аватара пользователя
Denis313
UNIт
 
Сообщения: 111
Зарегистрирован: 26 июл 2012, 09:46

Re: Телепорт

Сообщение extravert 08 ноя 2013, 12:45

transform.Translate() используется для смещения.
Вам нужно transform.position
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54

Re: Телепорт

Сообщение seaman 08 ноя 2013, 13:32

transform.Translate() используется для смещения.

Да ну?
Форум
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Телепорт

Сообщение extravert 08 ноя 2013, 15:05

Ну и? Translate это смещение.Обычный += с проверкой и направлением. Что ты мне ссылки кидаешь, думаешь я не смотрел эти методы под рефлектором? Посмотри у Vector3, там тоже есть смещение, с проверкой на размер шага чтобы около цели ничего не прыгало. В этом и есть ключевое отличие от обычного +=. Имхо выход на плюсы вполне оправдан тем, что надо сделать расчет направления более "дешевым".
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54

Re: Телепорт

Сообщение seaman 08 ноя 2013, 20:48

transform.Translate() используется для смещения.
Вам нужно transform.position

Что ты мне ссылки кидаешь, думаешь я не смотрел эти методы под рефлектором?

Судя по всему не смотрел. Поскольку Translate это изменение transform.position. Ни больше ни меньше.
Потому вывод - Вы написали лажу.
Если "нужен transform.position"?- 'то по Вашему что значит? Использовать его не меняя? Это как? Ну а если меняя - это тоже самое что Translate! Отличается только одним - учетом системы координат - локальная/глобальная.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Телепорт

Сообщение extravert 08 ноя 2013, 21:20

лажу пишешь ты. Translate это конкретно смещение объекта. Не изменение значения на совершенно независимое, а учитывая текущее положение объекта. ТСу нужно было тупо присваивание новой точки, а не "изменение учитывая текущее положение". Давайте называть вещи своими именами, +=, -=, Translate делают имитацию смещения объекта (на самом деле ДЕЙСТВИТЕЛЬНО присваивают новой значение). Они не применяются для получения нового значения, без учета старого. Если тебе действительно нужно было чтобы я назвал это "присваиванием с использованием старого значения" заместо "смещения" то я не понимаю зачем тебе это нужно. По-моему ты цепляешься за ниточки.
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54

Re: Телепорт

Сообщение Denis313 09 ноя 2013, 10:18

Не ссорьтесь, помоги пожалуйста, мне игру нужно сделать на конкурс к 15-му числу, а я все с теле портам ковыряюсь, уже вариантов 10 перепробовал все ни как не получается!

Вот переписал код по идеи все должно идеально работать.


Синтаксис:
Используется csharp
RaycastHit hit;
public float speed;
Vector3 position;
public Camera CamCil;

void Update () {
if(Input.GetMouseButtonDown(0))
{

//Вот в этом месте мне чюка не понятно по с правки там
//должно быть вот так
//Camera.main если так то ошибка
//я сделал так CamCil это ссылка на камеру
Ray ray = CamCil.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
position = hit.point;
}
Vector3 direction = position - transform.position;
float targ_pos = Vector3.Distance(transform.position, position);

if(targ_pos<1)
{
transform.Translate(direction * speed, Space.World);
}
}
}


на вид вроде все правильно, ошибок нет, но не пашит!
Аватара пользователя
Denis313
UNIт
 
Сообщения: 111
Зарегистрирован: 26 июл 2012, 09:46

Re: Телепорт

Сообщение extravert 09 ноя 2013, 10:30

вам нужно плавно передвинуть объект в точку или просто переставить?
Если переставить то ваш код такой

Синтаксис:
Используется csharp
RaycastHit hit;
if (Physics.Raycast(Camera.mainCamera.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity))
{
  //Просто присваиваем новую точку объекту
  transform.position = hit.point;
}


Если передвинуть, то

Синтаксис:
Используется csharp
public float speed;
Vector3 endPosition;

void Update () {
if (Input.GetMouseButtonDown(0) {
    RaycastHit hit;
    if (Physics.Raycast(Camera.mainCamera.ScreenPointToRay(Input.mousePosition), out hit, Mathf.Infinity))
    {
      endPosition = hit.point;
    }
}
   
     //Движемся в позицию со скоростью speed. Если нужно не всегда - кидай в условие
    float step = speed * Time.deltaTime;
    transform.position = Vector3.MoveTowards(transform.position, endPosition, step);
}
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54

Re: Телепорт

Сообщение Denis313 09 ноя 2013, 11:01

Да мне нужно сразу и первый вариант работает, но он перемещает объект только к другому объекту куда попал луч, а мне нужно просто в точку где кликнул курсор! по координатном xy
Аватара пользователя
Denis313
UNIт
 
Сообщения: 111
Зарегистрирован: 26 июл 2012, 09:46

Re: Телепорт

Сообщение Medveckij 09 ноя 2013, 11:57

Denis313 писал(а):Да мне нужно сразу и первый вариант работает, но он перемещает объект только к другому объекту куда попал луч, а мне нужно просто в точку где кликнул курсор! по координатном xy



На нужной вам оси растяните плоскость и добавьте отступ(offset) перпендикулярно этой плоскости в которую тычете. Включаем мозг :)
Аватара пользователя
Medveckij
Адепт
 
Сообщения: 1014
Зарегистрирован: 10 ноя 2012, 15:44

Re: Телепорт

Сообщение extravert 09 ноя 2013, 19:11

Physics.Raycast обнаруживает столкновение с любым коллайдером.. нет коллайдера - нет столкновения
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 18