接着上一篇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赋值,就是一张贴图。
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 }