Unity3D入门之JavaScript动态创建对象

接着上一篇Unity3D入门文章,这里继续使用JavaScript脚本语言。

调试:Unity集成了MonoDevelop编辑器,在代码某行的左侧点击,即可下一个断点。然后先关闭Unity编辑器,在MonoDevelop的菜单栏中依次点击Run->RunWith->UnityDebugger即可启动Unity编辑器,在编辑器中运行程序即可进入调试状态。

创建对象:GameObject.CreatePrimitive(PrimitiveType.Cube);

通过名称获取对象:GameObject.Find("Cube");

通过标签获取单个对象:GameObject.FindWithTag("MyTag");要设置对象的标签,在Inspector中点击Tag中的Add Tag进入Tag Manager中,在Element 0中输入标签名字即可。

通过标签获取对象数组:GameObject.FindGameObjectsWithTag("newsphere");

克隆对象:var clone : GameObject = Instantiate(cube, cube.transform.position * 2, cube.transform.rotation);其中的cube是已有的对象。

销毁对象:Destroy(clone, 3);这里的“3”代表3秒后销毁对象。

下面的代码将详细展示对游戏对象的各种操作,包括平移、旋转等,先来一张截图。代码同样不能直接运行,需要为全局变量Cylindertexture赋值,就是一张贴图。

Unity3D入门之JavaScript动态创建对象_第1张图片

 1 #pragma strict  2 
 3 //立方体对象
 4 private var cube : GameObject;  5 private var mycube : GameObject;  6 
 7 //缩放比例
 8 var scaleX : float = 1.0;  9 var scaleY : float = 1.0;  10 var scaleZ : float = 1.0;  11 
 12 //通过标签获取圆柱体对象,这个方法只能获取一个游戏对象
 13 private var cylinder1 : GameObject;  14 
 15 //渲染器
 16 private var render : Renderer;  17 
 18 //贴图
 19 public var cylindertexture : Texture;  20 
 21 //新建立的球体对象
 22 private var spheres : GameObject[];  23 
 24 //是否旋转
 25 private var isCubeRotate = false;  26 
 27 //按钮提示信息
 28 private var CubeInfo : String = "旋转立方体";  29 
 30 //旋转速度
 31 private var speed : int = 1000;  32 
 33 function Start () {  34     //获取游戏对象
 35     cube = GameObject.Find("Cube");  36     mycube = GameObject.Find("MyCube");  37     
 38     //克隆游戏对象
 39     var clone : GameObject = Instantiate(cube, cube.transform.position * 2, cube.transform.rotation);  40     Destroy(clone, 3);  41     
 42     //初始化圆柱体对象
 43     cylinder1 = GameObject.FindWithTag("MyTag");  44     //获取对象的渲染器
 45     render = cylinder1.GetComponent("Renderer");  46 }  47 
 48 function Update () {  49     //初始化球体对象,包括动态添加的球体
 50     spheres = GameObject.FindGameObjectsWithTag("newsphere");  51 
 52     //用户点击“旋转立方体”按钮时旋转模型
 53     if (isCubeRotate)  54  {  55         if (cube)  56  {  57             cube.transform.Rotate(0.0f,Time.deltaTime*200,0.0f);  58  }  59  }  60 }  61 
 62 function OnGUI()  63 {  64     if (GUILayout.Button("创建立方体",GUILayout.Height(50)))  65  {  66         //设置该模型默认为立方体
 67         var objCube = GameObject.CreatePrimitive(PrimitiveType.Cube);  68         //给此对象添加一个刚体,用于物理感应
 69  objCube.AddComponent(Rigidbody);  70         //设置这个游戏对象的名称
 71         objCube.name = "Cube1";  72         //设置此模型材质的颜色
 73         objCube.renderer.material.color = Color.blue;  74         //设置此模型的坐标
 75         objCube.transform.position = new Vector3(0.0f,10.0f,0.0f);  76  }  77     
 78     if (GUILayout.Button("创建球体",GUILayout.Height(50)))  79  {  80         var objSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);  81  objSphere.AddComponent(Rigidbody);  82         objSphere.name = "Sphere1";  83         objSphere.tag = "newsphere";  84         objSphere.renderer.material.color = Color.red;  85         objSphere.transform.position = new Vector3(0.0f, 10.0f, 0.0f);  86  }  87     
 88     //添加用于旋转立方体的按钮
 89     if (GUILayout.Button(CubeInfo,GUILayout.Height(50)))  90  {  91         if (!isCubeRotate)  92  {  93             isCubeRotate = true;  94             CubeInfo = "停止旋转立方体";  95  }  96         else
 97  {  98             isCubeRotate = false;  99             CubeInfo = "旋转立方体"; 100  } 101  } 102     
103     //添加移动球体对象的按钮
104     if (GUILayout.Button("移动所有新创建的球体",GUILayout.Height(50))) 105  { 106         if (spheres) 107  { 108             for (var sp in spheres) 109  { 110                 sp.transform.Translate(Vector3.left * Time.deltaTime * 50); 111  } 112  } 113  } 114     
115     //添加用于销毁对象的按钮
116     if (GUILayout.Button("销毁对象",GUILayout.Height(50))) 117  { 118  Destroy(cube); 119  } 120     
121     if (GUILayout.Button("对圆柱体上色",GUILayout.Width(100),GUILayout.Height(50))) 122  { 123         //修改渲染颜色为绿色
124         render.material.color = Color.yellow; 125         //为了避免残留,将贴图置空
126         render.material.mainTexture = null; 127  } 128     if (GUILayout.Button("给圆柱体贴图",GUILayout.Width(100),GUILayout.Height(50))) 129  { 130         render.material = null; 131         render.material.mainTexture = cylindertexture; 132  } 133     
134     //控件偏移
135     GUILayout.BeginArea(Rect(650,0,200,500)); 136  GUILayout.BeginVertical(); 137     
138     if (GUILayout.Button("立方体沿X轴旋转",GUILayout.Height(50))) 139  { 140         mycube.transform.Rotate(Vector3.right * Time.deltaTime * speed); 141  } 142     if (GUILayout.Button("立方体沿y轴旋转",GUILayout.Height(50))) 143  { 144         mycube.transform.Rotate(Vector3.up * Time.deltaTime * speed); 145  } 146     if (GUILayout.Button("立方体沿Z轴旋转",GUILayout.Height(50))) 147  { 148         mycube.transform.Rotate(Vector3.forward * Time.deltaTime * speed); 149  } 150     if (GUILayout.Button("立方体围绕圆柱体旋转",GUILayout.Height(50))) 151  { 152         mycube.transform.RotateAround(cylinder1.transform.position, Vector3.up, Time.deltaTime * speed); 153  } 154     GUILayout.Label("立方体旋转角度" + mycube.transform.rotation); 155     
156     //缩放立方体
157     GUILayout.Label("X轴缩放"); 158     scaleX = GUILayout.HorizontalSlider(scaleX, 1.0, 2.0, GUILayout.Width(100)); 159     GUILayout.Label("Y轴缩放"); 160     scaleY = GUILayout.HorizontalSlider(scaleY, 1.0, 2.0, GUILayout.Width(100)); 161     GUILayout.Label("Z轴缩放"); 162     scaleZ = GUILayout.HorizontalSlider(scaleZ, 1.0, 2.0, GUILayout.Width(100)); 163     mycube.transform.localScale = Vector3(scaleX, scaleY, scaleZ); 164     
165  GUILayout.EndVertical(); 166  GUILayout.EndArea(); 167 }

 

 

你可能感兴趣的:(JavaScript)