- Home /
How can I convert this code to Unity Android?
How can I convert this code to unity Android.. because when I switch platforms, too many errors are being detected...
// var cam: GameObject;
var skin1: GUISkin;
private var steps: int;
private var n1: int;
var isTweening: boolean = false;
var smoothing: boolean = false;
private var tStart: float = -1;
private var tGameStart: float = 0;
function Awake () {
init();
}
function init () {
steps = 0;
tStart = Time.time;
corners = new Array();
for (var i=0; i<2; i++) {
for (var j=0; j<2; j++) {
for (var k=0; k<2; k++) {
corners.Push(Vector3(i*(n-1),j*(n-1),k*(n-1)));
}
}
}
edges = new Array();
for (var i1=1; i1<n-1; i1++) {
for (var j1=0; j1<2; j1++) {
for (var k1=0; k1<2; k1++) {
edges.Push(Vector3(i1,j1*(n-1),k1*(n-1)));
edges.Push(Vector3(j1*(n-1),i1,k1*(n-1)));
edges.Push(Vector3(j1*(n-1),k1*(n-1),i1));
}
}
}
//Debug.Log(edges);
edgeMats = new Array();
for (var i2=0; i2<6; i2++) {
var arr4 = new Array();
for (var j2=0; j2<8; j2++) {
var mat1 = Instantiate(mats[i2]);
mat1.shader = Shader.Find( "Self-Illumin/Specular" );
mat1.SetTexture("_Illum", textures[j2]);
//mat1.mainTexture = textures[j2];
arr4.Push(mat1);
}
edgeMats.Push(arr4);
}
}
function Start () {
n1 = n;
hub = new GameObject();
hubDummy1 = new GameObject();
hubDummy2 = new GameObject();
sceneSetup();
}
function sceneSetup () {
cam.transform.position = Vector3.zero ;
cam.transform.rotation.eulerAngles = Vector3.zero ;
cam.transform.position.z = - n*2;
cam.transform.RotateAround(Vector3.zero,Vector3.up,45);
cam.GetComponent("Cameraorbit").distance = n*2;
cam.GetComponent("Cameraorbit").distanceMin = n;
cam.GetComponent("Cameraorbit").distanceMax = n*5;
cam.GetComponent("Cameraorbit").Init();
cam.GetComponent("Cameraorbit").enabled = true;
Supercube ();
tGameStart = Time.time;
}
function Supercube () {
for (var i=0; i<n; i++) {
for (var j=0; j<n; j++) {
for (var k=0; k<n; k++) {
var cube = new GameObject ();
cube.name = "cube"+i+j+k;
addWalls(cube,i,j,k);
var c1: float = -n*0.5;
cube.transform.parent = transform;
cube.transform.localPosition = Vector3(-n*0.5 + i+0.5,-n*0.5 +j+0.5,-n*0.5 +k+0.5);
}
}
}
}
function Update () {
hub.transform.rotation = Quaternion.Slerp (hubDummy1.transform.rotation, hubDummy2.transform.rotation, (Time.time - tStart)/rotTime);
}
function addWalls(box:GameObject,u:int,v:int,w:int){
var edge: GameObject;
var cornerEdgeU: GameObject;
var cornerEdgeV: GameObject;
var cornerEdgeW: GameObject;
for (var corner in corners) {
if(Vector3(u,v,w)==corner){
cornerEdgeU = new GameObject();
cornerEdgeV = new GameObject();
cornerEdgeW = new GameObject();
cornerEdgeU.transform.parent = box.transform;
cornerEdgeV.transform.parent = box.transform;
cornerEdgeW.transform.parent = box.transform;
}
}
for (var element in edges) {
if(Vector3(u,v,w)==element){
edge = new GameObject ();
edge.name = "edge" +u+v+w;
edge.transform.parent = box.transform;
}
}
if(w==n-1){//back
if(Vector2(u,v)==Vector2(0,0)||Vector2(u,v)==Vector2(n-1,0)||Vector2(u,v)==Vector2(0,n-1)||Vector2(u,v)==Vector2(n-1,n-1)){
cornerWall(0,Vector2(u,v),cornerEdgeU,cornerEdgeV);
}else{
if(u==0||u==n-1||v==0||v==n-1){wall(0,"outer",u,v,edge,true);}else{wall(0,"outer",u,v,box,false);}
}
}else{wall(0,"inner",u,v,box,false);}
if(u==n-1){//right - magenta
if(Vector2(w,v)==Vector2(0,0)||Vector2(w,v)==Vector2(n-1,0)||Vector2(w,v)==Vector2(0,n-1)||Vector2(w,v)==Vector2(n-1,n-1)){
cornerWall(1,Vector2(w,v),cornerEdgeW,cornerEdgeV);
}else{
if(w==0||w==n-1||v==0||v==n-1){wall(1,"outer",n-1-w,v,edge,true);}else{wall(1,"outer",n-1-w,v,box,false);}
}
}else{wall(1,"inner",w,v,box,false);}
if(w==0){//front - light blue
if(Vector2(u,v)==Vector2(0,0)||Vector2(u,v)==Vector2(n-1,0)||Vector2(u,v)==Vector2(0,n-1)||Vector2(u,v)==Vector2(n-1,n-1)){
cornerWall(2,Vector2(u,v),cornerEdgeU,cornerEdgeV);
}else{
if(u==0||u==n-1||v==0||v==n-1){wall(2,"outer",n-1-u,v,edge,true);}else{wall(2,"outer",n-1-u,v,box,false);}
}
}else{wall(2,"inner",-u,v,box,false);}
if(u==0){//left
if(Vector2(w,v)==Vector2(0,0)||Vector2(w,v)==Vector2(n-1,0)||Vector2(w,v)==Vector2(0,n-1)||Vector2(w,v)==Vector2(n-1,n-1)){
cornerWall(3,Vector2(w,v),cornerEdgeW,cornerEdgeV);
}else{
if(w==0||w==n-1||v==0||v==n-1){wall(3,"outer",w,v,edge,true);}else{wall(3,"outer",w,v,box,false);}
}
}else{wall(3,"inner",w,v,box,false);}
if(v==0){//bottom
if(Vector2(w,u)==Vector2(0,0)||Vector2(w,u)==Vector2(n-1,0)||Vector2(w,u)==Vector2(0,n-1)||Vector2(w,u)==Vector2(n-1,n-1)){
cornerWall(4,Vector2(u,w),cornerEdgeU,cornerEdgeW);
}else{
if(w==0||w==n-1||u==0||u==n-1){wall(4,"outer",u,w,edge,true);}else{wall(4,"outer",u,w,box,false);}
}
}else{wall(4,"inner",w,u,box,false);}
if(v==n-1){//top - king blue
if(Vector2(w,u)==Vector2(0,0)||Vector2(w,u)==Vector2(n-1,0)||Vector2(w,u)==Vector2(0,n-1)||Vector2(w,u)==Vector2(n-1,n-1)){
cornerWall(5,Vector2(u,w),cornerEdgeU,cornerEdgeW);
}else{
if(w==0||w==n-1||u==0||u==n-1){wall(5,"outer",u,n-1-w,edge,true);}else{wall(5,"outer",u,n-1-w,box,false);}
}
}else{wall(5,"inner",w,u,box,false);}
}
function cornerWall (pos:int,vect:Vector2,parentObject1:GameObject,parentObject2:GameObject) {
var parentObjects = new Array(parentObject1,parentObject2);
var k1=1;
var matHighlight: Material;
for (var po in parentObjects) {
var tri = new GameObject();
var a1 = 2*s*vect.x/(n-1);
var b1 = 2*s*vect.y/(n-1);
var mesh : Mesh = new Mesh ();
tri.transform.parent = po.transform;
tri.AddComponent(MeshFilter);
tri.AddComponent(MeshRenderer);
tri.renderer.material = mats[pos];
tri.GetComponent(MeshFilter).mesh = mesh;
switch(pos){
case 0: //back - red
mesh.vertices = [k1*Vector3(s-a1,s-b1,0), k1*Vector3(s-a1,-s+b1,0), k1*Vector3(-s+a1,-s+b1,0)];
mesh.uv = [k1*Vector2 (0, 1 - b1/s), k1*Vector2 (0, 0), k1*Vector2 (1-a1/s, 0)];
tri.transform.localPosition.z = s;
break;
case 1://right - magenta
mesh.vertices = [k1*Vector3(0,-s+b1,-s+a1), k1*Vector3(0,-s+b1,s-a1), k1*Vector3(0,s-b1,s-a1)];
mesh.uv = [k1*Vector2 (1-a1/s, 0), Vector2 (0, 0), k1*Vector2 (0, 1- b1/s)];
tri.transform.localPosition.x = s;
break;
case 2://front - light blue
mesh.vertices = [k1*Vector3(-s+a1,-s+b1,0), k1*Vector3(s-a1,-s+b1,0), k1*Vector3(s-a1,s-b1,0)];
mesh.uv = [k1*Vector2 (1-a1/s, 0), Vector2 (0, 0), k1*Vector2 (0, 1 - b1/s)];
tri.transform.localPosition.z = -s;
break;
case 3://left - green
mesh.vertices = [k1*Vector3(0,s-b1,s-a1), k1*Vector3(0,-s+b1,s-a1), k1*Vector3(0,-s+b1,-s+a1)];
mesh.uv = [k1*Vector2 (0, 1 - b1/s), k1*Vector2 (0, 0), k1*Vector2 (1-a1/s, 0)];
tri.transform.localPosition.x = -s;
break;
case 4://bottom - yellow
mesh.vertices = [k1*Vector3(s-a1,0,s-b1), k1*Vector3(s-a1,0,-s+b1), k1*Vector3(-s+a1,0,-s+b1)];
mesh.uv = [k1*Vector2 (0, 1 - b1/s), k1*Vector2 (0, 0), k1*Vector2 (1-a1/s, 0)];
tri.transform.localPosition.y = -s;
break;
case 5://top - king blue
mesh.vertices = [k1*Vector3(-s+a1,0,-s+b1), k1*Vector3(s-a1,0,-s+b1), k1*Vector3(s-a1,0,s-b1)];
mesh.uv = [k1*Vector2 (1-a1/s, 0), Vector2 (0, 0), k1*Vector2 (0, 1-b1/s)];
tri.transform.localPosition.y = s;
break;
}
switch(vect){
case Vector2(0,n-1): //top-left
matHighlight= edgeMats[pos][5];
break;
case Vector2(0,0): //bottom-left
matHighlight= edgeMats[pos][6];
break;
case Vector2(n-1,0): //bottom-left
matHighlight= edgeMats[pos][7];
break;
case Vector2(n-1,n-1): //bottom-left
matHighlight= edgeMats[pos][4];
break;
}
if(vect.x==vect.y){mesh.triangles = [0, 2, 1];}else{mesh.triangles = [0, 1, 2];}
mesh.RecalculateNormals();
tri.AddComponent(MeshCollider);
tri.AddComponent("mouseInteract"); tri.GetComponent("mouseInteract").n=n;
tri.GetComponent("mouseInteract").mat=mats[pos];
tri.GetComponent("mouseInteract").matOver=matHighlight;
Debug.Log("pos" + pos);
k1 *= -1;
}
}
function wall (pos:int,inner:String,x1,y1,parentObject:GameObject,interactive:boolean) {
var matHighlight: Material;
var square = new GameObject();
var mesh : Mesh = new Mesh ();
square.transform.parent = parentObject.transform;
square.AddComponent(MeshFilter);
square.AddComponent(MeshRenderer);
square.GetComponent(MeshFilter).mesh = mesh;
mesh.vertices = [Vector3(s,s,0), Vector3(s,-s,0), Vector3(-s,-s,0),Vector3(-s,s,0)];
mesh.uv = [Vector2 (0, 0), Vector2 (0, -1), Vector2 (-1, -1), Vector2 (-1, 0)];
mesh.triangles = [0, 2, 1, 0, 3, 2];
mesh.RecalculateNormals();
square.transform.position.z = s;
switch(pos){
case 0: //back
break;
case 1://right
square.transform.RotateAround(Vector3.zero,Vector3.up,90);
break;
case 2://front
square.transform.RotateAround(Vector3.zero,Vector3.up,180);
break;
case 3://left
square.transform.RotateAround(Vector3.zero,Vector3.up,270);
break;
case 4://bottom
square.transform.RotateAround(Vector3.zero,Vector3.right,90);
break;
case 5://top
square.transform.RotateAround(Vector3.zero,Vector3.right,270);
break;
}
if(inner=="inner"){square.renderer.material = mats[6];}else{
square.renderer.material = mats[pos];
switch(x1){
case 0: //left
matHighlight = edgeMats[pos][0];
break;
case n-1: //right
matHighlight = edgeMats[pos][1];
break;
}
switch(y1){
case 0: //bottom
matHighlight = edgeMats[pos][2];
break;
case n-1: //top
matHighlight = edgeMats[pos][3];
break;
}
}
if(interactive){
square.AddComponent(MeshCollider);
square.AddComponent("mouseInteract"); square.GetComponent("mouseInteract").n=n;
square.GetComponent("mouseInteract").mat=mats[pos];
square.GetComponent("mouseInteract").matOver=matHighlight;
}
}
function OnGUI () {
GUI.skin = skin1;
GUI.Label (Rect (0,0,0.16*Screen.width,Screen.height), " ","window");
if (GUI.Button (Rect (12,12,100,20), "RESET")) {
Rebuild();
}
if (GUI.Button (Rect (12,42,100,20), "RANDOMIZE")) {
for (var i=0; i<8*n; i++) {
Randomize();
steps = 0;
}
}
GUI.Label (Rect (12,72,40,40), "matrix size");
if (GUI.Button (Rect (92,72,20,20), "+")) {n1++;}
if (GUI.Button (Rect (92,92,20,20), "-")) {if(n1>2)n1--;}
GUI.Label (Rect (52,72,40,40), n1.ToString(),"box1");
smoothing = GUI.Toggle (Rect (12, 132, 100, 30), smoothing, "smoothing");
GUI.Label (Rect (12,Screen.height-72,100,20), "Time: "+(Time.time - tGameStart).ToString("#.0"));
GUI.Label (Rect (12,Screen.height-42,100,20), "Moves: "+ steps);
}
function Rebuild () {
var toDestroy = new Array();
for (var child in transform) {
toDestroy.Push(child.gameObject);
}
var m = toDestroy.length;
for (var i=0; i<m; i++) {
Destroy(toDestroy[i]);
}
n = n1;
//yield WaitForSeconds (10);
cam.GetComponent("Cameraorbit").enabled = false;
yield WaitForSeconds (0.1);
init();
sceneSetup();
}
function Randomize () {
var rand1 = Mathf.Round(6*Random.value-0.5);
var rand2 = Mathf.Round(n*Random.value-0.5);
steps = 0;
tGameStart = Time.time;
switch(rand1){
case 0:
version = "x";axis=Vector3.right;
break;
case 1:
version = "x";axis=-Vector3.right;
break;
case 2:
version = "y";axis=Vector3.up;
break;
case 3:
version = "y";axis=-Vector3.up;
break;
case 4:
version = "z";axis=Vector3.forward;
break;
case 5:
version = "z";axis=-Vector3.forward;
break;
}
Debug.Log("random" + rand1 + " " + rand2);
selectRotate(version, axis, rand2,rand2,rand2,true);
}
function selectRotate(version1:String, axis:Vector3, ixx:int,iyy:int,izz:int,noSmoothing:boolean){
steps++;
var hubArr = new Array();//
for (var box in transform) {
//Debug.Log(box.name);
switch(version1){
case "x":
if(Mathf.Round(box.transform.position.x+0.5*(n-1))==ixx){
hubArr.push(box);
}
break;
case "y":
if(Mathf.Round(box.transform.position.y+0.5*(n-1))==iyy){
hubArr.push(box);
}
break;
case"z":
if(Mathf.Round(box.transform.position.z+0.5*(n-1))==izz){
hubArr.push(box);
}
break;
}
}
var m = hubArr.length;
Debug.Log("hubArr "+m);
for (var i=0; i<m; i++) {
hubArr[i].transform.parent = hub.transform;
}
hubDummy2.transform.RotateAround(Vector3.zero,-axis,90);
if(!smoothing||noSmoothing){
hub.transform.RotateAround(Vector3.zero,-axis,90);
hubDummy1.transform.RotateAround(Vector3.zero,-axis,90);
}else{
tStart = Time.time;
yield WaitForSeconds (rotTime + 0.1);
hubDummy1.transform.RotateAround(Vector3.zero,-axis,90);
isTweening = false;
}
for (var j=0;j<m; j++) {
hubArr[j].transform.parent = transform;
}
}
Some advices:
What @eric5h5 said.
You script is much too long. Consider breaking it into smaller parts (other classes or other $$anonymous$$onoBehaviour-derived scripts).
Don't compare int or string values within switch cases but create and use enums.
$$anonymous$$ore about the second point
Don't mix GUI, procedural generation, rendering, etc. in the same script. Use one script for the camera. One script for generating the mesh. One script for the GUI. It will be much easier to maintain and to debug.
If you need to share some value between each script, make those variables public and access them using GetComponent() in the other scripts.
@imbagpaolo what is #pragma. This is related to Performance Optimization.
Answer by Eric5h5 · Oct 23, 2012 at 04:26 AM
Don't use Array, and put #pragma strict at the top of all your scripts.