forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Прицеливание на объект (http://forum.boolean.name/showthread.php?t=14065)

Nazgul 16.01.2011 13:30

Прицеливание на объект
 
Проблема: Необходимо отобразить на экране текстуру прицела, которая будет следить за определенным объектом (как бы целимся в объект).
PHP код:

public GameObject obj;
public 
Texture2D crosshair;

void Update{
    
//определяем позицию объекта
    
Vector3 position obj.position
}

void OnGUI{


Как на месте позиции объекта нарисовать текстуру прицела?
Что дописать в методах Update и onGUI?

pax 16.01.2011 14:13

Ответ: Прицеливание на объект
 
как-то так:
PHP код:

public GameObject obj;
    public 
Texture2D crosshair;
    private 
Vector3 position;

    
void Update()
    {
        
//определяем позицию объекта
        
position obj.transform.position;
    }

    
void OnGUI()
    {
        
Vector3 screenPoint Camera.mainCamera.WorldToScreenPoint(position);
        
Rect texturePos = new Rect(
            
screenPoint.crosshair.width 2f
            
screenPoint.crosshair.height 2f,
            
crosshair.widthcrosshair.height);
        
GUI.DrawTexture(texturePoscrosshair);
    } 

Но еще надо определить, попадает ли объект в поле зрения камеры.

Nazgul 16.01.2011 16:50

Ответ: Прицеливание на объект
 
Спасибо!
"Но еще надо определить, попадает ли объект в поле зрения камеры" - над этим уже думаю:) Правда, пока что без понятия как это сделать...
А что значит 2f? 2 типа float?

pax 16.01.2011 17:20

Ответ: Прицеливание на объект
 
Цитата:

Сообщение от Nazgul (Сообщение 175828)
А что значит 2f? 2 типа float?

Да..

UPD: вообще тебе наверное надо сюда было заглянуть: http://forum.boolean.name/showthread.php?t=13332

Nazgul 17.01.2011 00:00

Ответ: Прицеливание на объект
 
Cделал все по примеру, указанному Pax.
Мой скрипт полностью:
PHP код:

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(rectCrosshaircrosshairTexture);
    }
    
//задаем положение текстуры
    
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);
    }


targ - цель, на которую должен постоянно целится прицел.
Скрипт вешается на стандартный First Person controller.
Проблема в том, что при движении First Person controller прицел колеблется вверх-вниз (изменяется координата y текстуры прицела), но координата x постоянна. Т.е. прицел то выше цели, то ниже.
Почему координата y изменяется? Вроде должна постоянной быть, Объект targ ведь не движется.

Nazgul 18.01.2011 09:26

Ответ: Прицеливание на объект
 
Проблему решил сам:
PHP код:

float topRect    Screen.height screentargPos.y-crosshairTexture.height 2f


pax 18.01.2011 11:54

Ответ: Прицеливание на объект
 
Ну вообще-то в примере, на который я давал ссылку так и было ;)

Nazgul 18.01.2011 17:01

Ответ: Прицеливание на объект
 
Ага, только я сначала этого не заметил:)


Часовой пояс GMT +4, время: 16:56.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot