x


Changing texture with raycast on iPad

Hi, I've got an application on iPad, where I change the render of a building (transparent/opaque) when touching this building My script here works well to switch from initial Opaque to Transparent for the 3 buildings tagged (casault, education and felix) but then, once a building is transparent, if I touch this building again, he doesn't go back to Opaque . Any ideas why ???

var _casault : GameObject;
var _education : GameObject;
var _felix : GameObject;
var material_transparent: Material;
var material_opaque: Material;
var hit: RaycastHit;

var casault_visible: boolean=true;
var education_visible: boolean=true;
var felix_visible: boolean=true;

function Update(){

for(var touch: Touch in Input.touches)
{
    if(touch.phase==TouchPhase.Began)
    {
       var ray= Camera.main.ScreenPointToRay(touch.position);
       if(Physics.Raycast(ray,hit))
       {
         if(hit.collider.tag=="Casault"&&casault_visible=true)
         {
         _casault.renderer.material=material_transparent;
         casault_visible=false;
         }

         if(hit.collider.tag=="Education"&&education_visible=true)
         {
         _education.renderer.material=material_transparent;
         education_visible=false;
         }

         if(hit.collider.tag=="Felix"&&felix_visible=true)
         {
         _felix.renderer.material=material_transparent;
         felix_visible=false;
         }

         if(hit.collider.tag=="Casault"&&casault_visible=false)
         {
         _casault.renderer.material=material_opaque;
         casault_visible=true;
         }

         if(hit.collider.tag=="Education"&&education_visible=false)
         {
         _education.renderer.material=material_opaque;
         education_visible=true;
         }

         if(hit.collider.tag=="Felix"&&felix_visible=false)
         {
         _felix.renderer.material=material_opaque;
         felix_visible=true;
         }
       }
    }



}
}
more ▼

asked May 11 '12 at 03:42 AM

soybenito gravatar image

soybenito
1 2 4 5

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

I am not really sure if this will work but try this:

function Update(){

for(var touch: Touch in Input.touches) { if(touch.phase==TouchPhase.Began) {

   var ray= Camera.main.ScreenPointToRay(touch.position);
   if(Physics.Raycast(ray,hit))
   {
     if(hit.collider.tag=="Casault"&&casault_visible=true)
     {
     _casault.renderer.material=material_transparent;
     casault_visible=false;
     }else if(_casault.renderer.material=material_opaque){

casault_visible=true; }

}

}

}

}

Try using else instead of just using if. Good Luck!!

more ▼

answered May 11 '12 at 04:28 AM

Noah 1 gravatar image

Noah 1
1.1k 33 45 50

(comments are locked)
10|3000 characters needed characters left

Cool it works with "Else if", except the condition was not the good one Here the code working:

    function Update(){

for(var touch: Touch in Input.touches) { if(touch.phase==TouchPhase.Began) {

   var ray= Camera.main.ScreenPointToRay(touch.position);
   if(Physics.Raycast(ray,hit))
   {
     if(hit.collider.tag=="Casault"&&casault_visible==true)
     {
     _casault.renderer.material=material_transparent;
     casault_visible=false;
     }else if(hit.collider.tag=="Casault"&&casault_visible==false){
_casault.renderer.material=material_opaque
casault_visible=true; }

}

}

}

}

Thank you !

more ▼

answered May 11 '12 at 04:08 PM

soybenito gravatar image

soybenito
1 2 4 5

Exellent, happy to help!!

May 11 '12 at 04:19 PM Noah 1
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x1686
x1528
x811
x360
x275

asked: May 11 '12 at 03:42 AM

Seen: 376 times

Last Updated: May 11 '12 at 04:19 PM