- Home /
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;
}
}
}
}
}
Answer by Noah-1 · May 11, 2012 at 04:28 AM
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!!
Answer by soybenito · May 11, 2012 at 04:08 PM
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 !