Некорректная работа луча ... - Форум Игроделов
Пн, 20 Май 2024, 02:18 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Некорректная работа луча ...
Некорректная работа луча ...
dostalitionДата: Вс, 29 Дек 2013, 12:03 | Сообщение # 1
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Пускаю луч для определения столкновения по тегу и выведения соответствующей текстуры прицела. Бок номер 1: если объект импортированный, то луч работает, а если , например, стандартный куб из Юни, то не работает вообще (в логе постоянно чередуются сообщения "Действие" (1 раз) и "Текстура прицела" (2 раза), т.е. сообщения в логе не изменяются хоть луч попадает на коллайдер, хоть нет (тег DEISTVIE выставлен на объектах). Бок номер 2: когда луч наведён на импортированный меш с нужным тегом, то текстура прицела изменяется на нужную (на скрине текстура глаза из стандартного набора)
, а когда увожу луч вбок, то сразу, после смещения из коллайдера, изменяется обратно, но ... Когда увожу прицел вверх или вниз, то текстура не меняется, как-будто луч ещё на коллайдере
Подскажите где напортачил в коде ... sad Сам код
Код
    var textura_DEISTVIA : Texture2D;
     var texturaPRICELA : Texture2D;
     var position : Rect;
     var deistvie = false;
     var position_2 : Rect;
     var hit : RaycastHit;
     var n = 3;
      
      
   function Start () {
    
     
        position = new Rect((Screen.width - texturaPRICELA.width)/2, (Screen.height - texturaPRICELA.height)/2,
                            texturaPRICELA.width, texturaPRICELA.height);

                            
        position_2 = new Rect((Screen.width - textura_DEISTVIA.width)/2, (Screen.height - textura_DEISTVIA.height)/2,
                            textura_DEISTVIA.width, textura_DEISTVIA.height);
                    
     }

function Update (){  

    
   var fwd = transform.TransformDirection (Vector3.forward);
    
  if (Physics.Raycast (transform.position, fwd,hit, n) && hit.collider.tag == "DEISTVIE"){
      deistvie = true;
      Debug.Log ("Действие");
      }  
      else deistvie = false;
       
}

function OnGUI(){

if(deistvie == true){
GUI.DrawTexture(position_2, textura_DEISTVIA);
Debug.Log ("Текстура действия");
}
  else {   
   GUI.DrawTexture(position, texturaPRICELA);   
   Debug.Log ("Текстура прицела");  
  }
    

}


Сообщение отредактировал dostalition - Вс, 29 Дек 2013, 17:23
 
СообщениеПускаю луч для определения столкновения по тегу и выведения соответствующей текстуры прицела. Бок номер 1: если объект импортированный, то луч работает, а если , например, стандартный куб из Юни, то не работает вообще (в логе постоянно чередуются сообщения "Действие" (1 раз) и "Текстура прицела" (2 раза), т.е. сообщения в логе не изменяются хоть луч попадает на коллайдер, хоть нет (тег DEISTVIE выставлен на объектах). Бок номер 2: когда луч наведён на импортированный меш с нужным тегом, то текстура прицела изменяется на нужную (на скрине текстура глаза из стандартного набора)
, а когда увожу луч вбок, то сразу, после смещения из коллайдера, изменяется обратно, но ... Когда увожу прицел вверх или вниз, то текстура не меняется, как-будто луч ещё на коллайдере
Подскажите где напортачил в коде ... sad Сам код
Код
    var textura_DEISTVIA : Texture2D;
     var texturaPRICELA : Texture2D;
     var position : Rect;
     var deistvie = false;
     var position_2 : Rect;
     var hit : RaycastHit;
     var n = 3;
      
      
   function Start () {
    
     
        position = new Rect((Screen.width - texturaPRICELA.width)/2, (Screen.height - texturaPRICELA.height)/2,
                            texturaPRICELA.width, texturaPRICELA.height);

                            
        position_2 = new Rect((Screen.width - textura_DEISTVIA.width)/2, (Screen.height - textura_DEISTVIA.height)/2,
                            textura_DEISTVIA.width, textura_DEISTVIA.height);
                    
     }

function Update (){  

    
   var fwd = transform.TransformDirection (Vector3.forward);
    
  if (Physics.Raycast (transform.position, fwd,hit, n) && hit.collider.tag == "DEISTVIE"){
      deistvie = true;
      Debug.Log ("Действие");
      }  
      else deistvie = false;
       
}

function OnGUI(){

if(deistvie == true){
GUI.DrawTexture(position_2, textura_DEISTVIA);
Debug.Log ("Текстура действия");
}
  else {   
   GUI.DrawTexture(position, texturaPRICELA);   
   Debug.Log ("Текстура прицела");  
  }
    

}

Автор - dostalition
Дата добавления - 29 Дек 2013 в 12:03
N0ratorДата: Вс, 29 Дек 2013, 14:23 | Сообщение # 2
 
Сообщений: 16
Награды: 0
Репутация: 1
Статус: Offline
Попробуйте:
Код

if (Physics.Raycast (transform.position, fwd,hit, n))
{
      if(hit.collider.tag == "DEISTVIE")  
      deistvie = true;  
else
{
      deistvie = false;  
      Debug.Log ("Действие");  
}

И вместо
Код

else{  
  GUI.DrawTexture(position, texturaPRICELA);  
  Debug.Log ("Текстура прицела");

Напишите это
Код

if(deistvie == false) {  
  GUI.DrawTexture(position_2, textura_DEISTVIA);  
  Debug.Log ("Текстура прицела");
}

P.S. Стандартное шаманство, обычно помогает.

Добавлено (29 Дек 2013, 14:23)
---------------------------------------------
Ещё, замечу, что стоит перепроверить, те ли текстуры стоят в инспекторе.

 
СообщениеПопробуйте:
Код

if (Physics.Raycast (transform.position, fwd,hit, n))
{
      if(hit.collider.tag == "DEISTVIE")  
      deistvie = true;  
else
{
      deistvie = false;  
      Debug.Log ("Действие");  
}

И вместо
Код

else{  
  GUI.DrawTexture(position, texturaPRICELA);  
  Debug.Log ("Текстура прицела");

Напишите это
Код

if(deistvie == false) {  
  GUI.DrawTexture(position_2, textura_DEISTVIA);  
  Debug.Log ("Текстура прицела");
}

P.S. Стандартное шаманство, обычно помогает.

Добавлено (29 Дек 2013, 14:23)
---------------------------------------------
Ещё, замечу, что стоит перепроверить, те ли текстуры стоят в инспекторе.


Автор - N0rator
Дата добавления - 29 Дек 2013 в 14:23
ilyakosДата: Вс, 29 Дек 2013, 14:42 | Сообщение # 3
 
Сообщений: 171
Награды: 0
Репутация: 8
Статус: Offline
Ты ему подсказал так, что только если касается коллайдера с другим тагом, то deistvie = false, и когда он будет убирать прицел со шкафа своего, то у него deistvie будет true , пока луч не коснется другого коллайдера, без такого тага. Мб лучше написать так :

Код
if (Physics.Raycast (transform.position, fwd,hit, n))   
   {   
        if(hit.collider.tag == "DEISTVIE")    
        deistvie = true;    
   else   
   {   
      if( !hit.collider || hit.collider.tag != "DEISTVIE" ){
        deistvie = false;    
        Debug.Log ("Действие");    
        }
   }


Сообщение отредактировал ilyakos - Вс, 29 Дек 2013, 14:44
 
СообщениеТы ему подсказал так, что только если касается коллайдера с другим тагом, то deistvie = false, и когда он будет убирать прицел со шкафа своего, то у него deistvie будет true , пока луч не коснется другого коллайдера, без такого тага. Мб лучше написать так :

Код
if (Physics.Raycast (transform.position, fwd,hit, n))   
   {   
        if(hit.collider.tag == "DEISTVIE")    
        deistvie = true;    
   else   
   {   
      if( !hit.collider || hit.collider.tag != "DEISTVIE" ){
        deistvie = false;    
        Debug.Log ("Действие");    
        }
   }

Автор - ilyakos
Дата добавления - 29 Дек 2013 в 14:42
dostalitionДата: Вс, 29 Дек 2013, 17:23 | Сообщение # 4
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Скрипт висел на префабе перса ... 8-x Повесил на камеру и всё в поряде стало :))

Сообщение отредактировал dostalition - Пн, 30 Дек 2013, 16:54
 
СообщениеСкрипт висел на префабе перса ... 8-x Повесил на камеру и всё в поряде стало :))

Автор - dostalition
Дата добавления - 29 Дек 2013 в 17:23
Форум Игроделов » UNITY3D » СКРИПТИНГ » Некорректная работа луча ...
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024