Convert (X,Y,Z)scene to (X,Y)display? [РЕШЕНО]

Программирование на Юнити.

Convert (X,Y,Z)scene to (X,Y)display? [РЕШЕНО]

Сообщение duduka 12 мар 2011, 21:06

Парни!
Вопрос, наверно, совсем смешной... Но я чего-то в (полная Ж) запутался... Подскажите пожалуйста!
Как преобразовать позицию точки в сцене(X,Y,Z) в позицию на дисплее(X,Y)?
Последний раз редактировалось duduka 13 мар 2011, 16:09, всего редактировалось 1 раз.
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь

Re: Convert (X,Y,Z)scene to (X,Y)display?

Сообщение seaman 12 мар 2011, 21:12

Camera
WorldToScreenPoint Transforms position from world space into screen space.
WorldToViewportPoint Transforms position from world space into viewport space.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Convert (X,Y,Z)scene to (X,Y)display?

Сообщение duduka 13 мар 2011, 12:38

Спасибо!
Только вот настроить не могу...
Изображение
Скрипт примерно такой:
Синтаксис:
Используется csharp
public Texture2D sight_decoy; - текстура

Vector3 decoyV3 = camera.WorldToScreenPoint(GameObject.Find("Ship").transform.position);

float decoyXdisp = decoyV3.x - sight_decoy.width/2;
float decoyYdisp = Screen.height - decoyV3.y - sight_decoy.height/2;

Rect decoy_position = new Rect(decoyXdisp, decoyYdisp, sight_decoy.width, sight_decoy.height);
GUI.DrawTexture(decoy_position, sight_decoy);
 

Посидел, покавырял - создаётся такое ощущение, что WorldToScreenPoint выдаёт не центр объекта, а его ближайшую точку относительно камеры.
А вот как центр получить не понятно...
Последний раз редактировалось duduka 13 мар 2011, 16:23, всего редактировалось 1 раз.
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь

Re: Convert (X,Y,Z)scene to (X,Y)display?

Сообщение Ert Donuell 13 мар 2011, 12:59

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Transform target;
    void Update() {
        Vector3 screenPos = camera.WorldToScreenPoint(target.position);
        print("target is " + screenPos.x + " pixels from the left");
    }
}


Не забывайте использовать теги CS([syntаx=csharp][/syntаx]) и JS([syntаx=javascript][/syntаx])
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Convert (X,Y,Z)scene to (X,Y)display? [РЕШЕНО]

Сообщение duduka 13 мар 2011, 16:01

Накодил всё-таки!
Все проблемы в импорте и построении префаба.

Т.е. Получается это и был его центр(внутренний)! Даже если повороты объекта работают правильно и оси при наведении на префаб идут от центра - это не означает, что функция будет работать как надо. :) Я так понимаю она считает на более глубоком уровне.

Решил проблему просто: не стал заморачиваться с импортом, а сделал пустышку в префабе и назвал её Center!!!
Синтаксис:
Используется csharp
Vector3 decoy_Nposition = camera.WorldToScreenPoint(GameObject.Find("Ship/Center").transform.position);
Аватара пользователя
duduka
UNец
 
Сообщения: 25
Зарегистрирован: 04 мар 2011, 12:47
Откуда: Тверь


Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12