Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 16.01.2011, 13:30   #1
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Прицеливание на объект

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

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

void OnGUI{

Как на месте позиции объекта нарисовать текстуру прицела?
Что дописать в методах Update и onGUI?
(Offline)
 
Ответить с цитированием
Старый 16.01.2011, 14:13   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Прицеливание на объект

как-то так:
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);
    } 
Но еще надо определить, попадает ли объект в поле зрения камеры.
(Offline)
 
Ответить с цитированием
Старый 16.01.2011, 16:50   #3
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Прицеливание на объект

Спасибо!
"Но еще надо определить, попадает ли объект в поле зрения камеры" - над этим уже думаю Правда, пока что без понятия как это сделать...
А что значит 2f? 2 типа float?
(Offline)
 
Ответить с цитированием
Старый 16.01.2011, 17:20   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Прицеливание на объект

Сообщение от Nazgul Посмотреть сообщение
А что значит 2f? 2 типа float?
Да..

UPD: вообще тебе наверное надо сюда было заглянуть: http://forum.boolean.name/showthread.php?t=13332
(Offline)
 
Ответить с цитированием
Старый 17.01.2011, 00:00   #5
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Прицеливание на объект

Cделал все по примеру, указанному Pax.
Мой скрипт полностью:
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 ведь не движется.
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 09:26   #6
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Прицеливание на объект

Проблему решил сам:
float topRect    Screen.height screentargPos.y-crosshairTexture.height 2f
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 11:54   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Прицеливание на объект

Ну вообще-то в примере, на который я давал ссылку так и было
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 17:01   #8
Nazgul
Нуждающийся
 
Регистрация: 14.01.2011
Сообщений: 72
Написано 9 полезных сообщений
(для 44 пользователей)
Ответ: Прицеливание на объект

Ага, только я сначала этого не заметил
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com