Такая проблема: Необходимо отобразить на экране текстуру прицела, которая будет следить за определенным объектом (как бы целимся в объект).
В сцене 2 объекта: First Person controller и цель - напимер сфера.
Написал скрипт:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class TracingTargetsTest : MonoBehaviour {
//цель, на которую прицеливаемся
public Transform targ;
//текстура прицела
public Texture2D crosshairTexture;
//прямоугольник для задания координат цели
private Rect rectCrosshair;
//позиция цели на экране
private Vector3 screentargPos;
// Update is called once per frame
void Update () {
//определяем экранное положение цели
screentargPos = Camera.main.WorldToScreenPoint(targ.position);
}
void OnGUI(){
findCrossHairCoor();
//рисуем текстуру
GUI.DrawTexture(rectCrosshair, crosshairTexture);
}
//задаем положение текстуры
private void findCrossHairCoor(){
float leftRect = screentargPos.x-crosshairTexture.width / 2f;
float topRect = screentargPos.y-crosshairTexture.height / 2f;
float widthRect = crosshairTexture.width;
float heightRect = crosshairTexture.height;
rectCrosshair = new Rect(leftRect,topRect,widthRect,heightRect);
}
}
using System.Collections;
public class TracingTargetsTest : MonoBehaviour {
//цель, на которую прицеливаемся
public Transform targ;
//текстура прицела
public Texture2D crosshairTexture;
//прямоугольник для задания координат цели
private Rect rectCrosshair;
//позиция цели на экране
private Vector3 screentargPos;
// Update is called once per frame
void Update () {
//определяем экранное положение цели
screentargPos = Camera.main.WorldToScreenPoint(targ.position);
}
void OnGUI(){
findCrossHairCoor();
//рисуем текстуру
GUI.DrawTexture(rectCrosshair, crosshairTexture);
}
//задаем положение текстуры
private void findCrossHairCoor(){
float leftRect = screentargPos.x-crosshairTexture.width / 2f;
float topRect = screentargPos.y-crosshairTexture.height / 2f;
float widthRect = crosshairTexture.width;
float heightRect = crosshairTexture.height;
rectCrosshair = new Rect(leftRect,topRect,widthRect,heightRect);
}
}
Скрипт вешается на стандартный First Person controller.
Проблема в том, что при движении First Person controller прицел (структура) передвигается вверх или вниз (изменяется координата y текстуры прицела), но координата x постоянна. Т.е. прицел то выше цели, то ниже.
Почему координата y изменяется? Вроде должна постоянной быть, Цель ведь не движется.