Пятница, 22 Ноября 2024, 12:24

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема WorldToScreenPoint() [Решено]
sinoptisДата: Вторник, 11 Декабря 2012, 17:20 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Здравствуйте форумчане. У меня возникла проблема с использованием функции WorldToScreenPoint(). Вот скрипт:

Code

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
    public Transform spawnPoint;
    public Texture2D trunkCrossHair;
    public float cursorSizeX = 32;
    public float cursorSizeY = 32;
       
    // Use this for initialization
    void Start () {
       
    }
       
    // Update is called once per frame
    void Update () {
    RaycastHit hit;
     if(Physics.Raycast(spawnPoint.transform.position,spawnPoint.forward ,out hit)){
       screenPos = Camera.main.WorldToScreenPoint(hit.point);
      Debug.DrawLine(spawnPoint.transform.position, hit.point);
     }
    }
       
    void OnGUI(){
     GUI.DrawTexture (new Rect (screenPos.x -(cursorSizeX/2)  , screenPos.y - (cursorSizeY/2), cursorSizeX, cursorSizeY),trunkCrossHair);
    }
}

Рейкаст верен т.к. DrawLine показывает всё верно, но текстура на экране совсем не там где должна быть, где-то на треть высоты экрана ниже.
В чем проблема?
Заранее спасибо.

Добавлено (11.12.2012, 17:20)
---------------------------------------------
Ну и как всегда, решение было близко happy . Вот исправленный скрипт, может кому-нибудь понадобиться:
Code

using UnityEngine;    
using System.Collections;    

public class test : MonoBehaviour {    
     public Transform spawnPoint;    
     private Vector3 screenPos;    
     public Texture2D trunkCrossHair;    
     public float cursorSizeX = 32;    
     public float cursorSizeY = 32;    
     private  RaycastHit hit;    
         
     // Use this for initialization    
     void Start () {    
         
     }    
         
     // Update is called once per frame    
     void Update () {    
       
      Physics.Raycast(spawnPoint.transform.position,spawnPoint.forward ,out hit);
          
     }    
         
     void OnGUI(){    
      GUI.DrawTexture (new Rect (OnScreen(hit.point).x -(cursorSizeX/2)  , OnScreen(hit.point).y - (cursorSizeY/2), cursorSizeX, cursorSizeY),trunkCrossHair);
     }    
Vector3 OnScreen(Vector3 pos){
     pos = Camera.main.WorldToScreenPoint(pos);
           pos.y = Screen.height - pos.y;
           return pos;
    }
}    


Сообщение отредактировал sinoptis - Вторник, 11 Декабря 2012, 17:22
  • Страница 1 из 1
  • 1
Поиск:

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