|  OrbitCameraBugFixTransparent.js /* orbit camera bug fix transparent dirty version
*/
var orbitCamera;
var centerObj;
var transparentObjects; // all transparent objects var transparentObjectsStatus; // the actual transparent objects var transparentObjectRenderings; // the renderings ... var transparentObjectRenderingsTransparent; var transparentObjectMaterial;
function Start() { // get orbit camera orbitCamera=GetComponent("MouseOrbit"); if (orbitCamera) { radiusDist=orbitCamera.distance; // get centerObject centerObj=orbitCamera.target; } // arrays transparentObjects=new Array(); transparentObjectsStatus=new Array(); // 0 / 1 restore / 2 active / 3 new
transparentObjectRenderings=new Array(); transparentObjectRenderingsTransparent=new Array(); transparentObjectMaterial=new Array();; }
function FixedUpdate () {
// orbit camera if (orbitCamera) { var vec=centerObj.transform.position; var diffvec=(vec-transform.position); // from avatar to screen .. var hits : RaycastHit[]; hits = Physics.RaycastAll (vec, -diffvec, 100.0);
// all from 2 to 1 for (var z=0;z { if (transparentObjectsStatus[z]==2) { transparentObjectsStatus[z]=1; } }
// found var found=false; for (var i=0;i { var hit : RaycastHit = hits[i]; // print(hit.collider.name); // index var indexIt=-1; // check if it is yet in the array of the transformed... for (var zz=0;zz { obj=transparentObjects[zz]; // print(i+"----"+obj.GetInstanceID()+"=="+hit.collider.GetInstanceID()); if (obj.GetInstanceID()==hit.collider.GetInstanceID()) { if (transparentObjectsStatus[zz]==0) { // update it .. // transparentObjectRenderingsTransparent[zz]=hit.renderer.material.color.a; } transparentObjectsStatus[zz]=2;
// print("found "+i+"---"+zz);
indexIt=zz; if (obj.renderer) { obj.renderer.material.shader = Shader.Find("Transparent/Diffuse"); obj.renderer.material.color.a = 0.3; } // storeRenderings(); break; } } // not found add it .. if (indexIt==-1) { indexNew=transparentObjects.length; print("new ID: "+indexNew); transparentObjects[indexNew]=hit.collider; // collider
// print(hit.transform.parent.name+"---"+hit.transform.name+"("+hit.transform.GetInstanceID()+") "+" --- "+hit.transform.parent); print("--"+hit.transform.name+"("+hit.transform.GetInstanceID()); transparentObjectsStatus[indexNew]=2; // new transparentObjectRenderingsTransparent[indexNew]=1;
// transparentObjectRenderings[transparentObjectRenderings.length]=1; // renderer ... var renderer = hit.collider.renderer; if (renderer) { transparentObjectMaterial[indexNew]=renderer.material; // store it transparentObjectRenderingsTransparent[indexNew]=renderer.material.color.a; print("store first time "+"--"+renderer.material.color.a); print("store first time "+"--"+renderer.material.shader); // print(renderer); renderer.material.shader = Shader.Find("Transparent/Diffuse"); renderer.material.color.a = 0.3; } }
} // restore from array // check for 1 not anymore for (var zi=0;zi { if (transparentObjectsStatus[zi]==1) { transparentObjectsStatus[zi]=0; if (transparentObjects[zi].renderer) { // transparentObjects[zi].renderer.material.color.a=transparentObjectRenderingsTransparent[zi]; // print(transparentObjectRenderingsTransparent[zi]);
transparentObjects[zi].renderer.material=transparentObjectMaterial[zi]; transparentObjects[zi].renderer.material.color.a=1.0;
} } } } // not an orbit camera? if (!orbitCamera) { print("OrbitCamerFix-Script not applied to an Orbit-Camera-Script"); } } |