| In ein normales Fenster verwandeln  | close  
> gametheory.ch - swiss gamedesign (elearning & knowhow at gamedesign.zhdk.ch [zürcher hochschule der künste])> GAMEDESIGN: Programmierung & GameEngines> Game-Development (3D-Gameengines)> Unity3D> yz. CameraProblem> Lösung A

Lösung A
 
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen


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");
}
}
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen
Text/Objekt verändern
OrbitCameraBugFixTransparent.js
[ download zip-file ]
(Bauer René) 7-6-2009 / 1:11
Text/Objekt verändernEinen Kommentar (einer Stelle[markiert]) hinzufügen
text