Здравствуйте форумчане. У меня возникла проблема с использованием функции 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)
---------------------------------------------
Ну и как всегда, решение было близко . Вот исправленный скрипт, может кому-нибудь понадобиться:
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;
}
}