分类:Unity、C#、VS2015 函数
建立日期:2016-04-16 spa
在游戏开发过程当中,脚本不但须要访问脚本所在的游戏对象的组件,还常常须要访问和控制真他游戏对象。另外,根据项目需求,还可能须要经过脚本建立对象。 设计
本节示例的最终运行效果以下: 3d
在Unity脚本中,开发人员能够经过下面量的方式来访问游戏对象。 code
一、经过名称字符串来查找 orm
使用函数GameObject.Find()查找在参数中指定的游戏对象。若是场景中存在指定名称的游戏对象,则返回该对象的引用,不然返回null。若是存在多个重名的对象,该方法仅返回第一个对象的引用。 对象
例如: blog
private GameObject obj; 游戏
void Start() 图片
{
//寻找整个场景中名为Cube的游戏对象并赋予obj变量
obj = GameObject.Find("Cube");
}
二、经过标签(Tag)来查找
使用函数GameObject.FindWithTag()查找在参数中指定的游戏对象。若是场景中存在指定标签的游戏对象,那么返回该对象的引用,不然返回null。
例如:
GameObject player=GameObject.FindWithTag("player");
三、注意的问题
获取游戏对象或组件的函数都比较耗时,所以,通常不要在Update()方法中去获取这些对象,而是应该在Start()方法中查找并将其保存到声明的字段变量中,而后再在Update()方法中使用这些组件或对象。
除了查找场景中的游戏对象外,固然也能够直接用脚本建立对象并将其添加到场景中。具体用法见接下来介绍的示例。
在实际项目中(包括游戏项目、虚拟现实VR项目,加强现实AR项目、……),这些场景中动态添加、修改或者删除的对象都须要经过脚原本控制。
一、在Unity的Project中Assets文件夹下添加一个名为“6.3”的子文件夹,而后在该文件夹下建立一个名为“Scene6_3.unity”的场景。
二、向场景中添加一个Plane,设置(复位)其位置:
三、向场景中添加一个Cube。
四、调整摄像机以及Cube的参数,使其方便地可看到:
其中,Cube的参数以下:
Main Camera的参数以下:
五、向场景中添加一个空GameObject,并将其换名为manager:
六、切换到VS2015,在6.3子文件夹下添加一个名为“Demo3_1.cs”的脚本文件:
添加后看到的结果以下:
七、将Demo3_1.cs文件改成下面的内容并保存:
using UnityEngine; using System.Collections; public class Demo3_1 : MonoBehaviour { public Texture texture; private GameObject obj; private Renderer render; void Start() { //获取游戏对象 obj = GameObject.Find("Cube"); //获取该对象的渲染器 render = obj.GetComponent<Renderer>(); } void OnGUI() { if (GUILayout.Button("建立立方体", GUILayout.Height(50))) { //设置该模型默认为立方体 GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube); //为对象添加一个刚体,赋予物理属性 obj.AddComponent<Rigidbody>(); //赋予对象的材质红色 obj.GetComponent<Renderer>().material.color = Color.green; //设置对象的名称 obj.name = "Cube"; //设置此模型材质的位置坐标 obj.transform.position = new Vector3(0, 5f, 0); } if (GUILayout.Button("建立球体", GUILayout.Height(50))) { //设置该模型默认为立方体 GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); //为对象添加一个刚体,赋予物理属性 obj.AddComponent<Rigidbody>(); //赋予对象的材质红色 obj.GetComponent<Renderer>().material.color = Color.red; //设置对象的名称 obj.name = "Sphere"; //设置此模型材质的位置坐标 obj.transform.position = new Vector3(0, 5f, 0); } if (GUILayout.Button("添加颜色", GUILayout.Width(100), GUILayout.Height(50))) { //修改渲染颜色为红色 render.material.color = Color.red; } if (GUILayout.Button("添加贴图", GUILayout.Width(100), GUILayout.Height(50))) { //添加组件贴图 render.material.mainTexture = texture; } } }
八、切换到Unity,向6.3子文件夹下拖放一个图片(随便选一个图片就行):
九、在层次视图中选中manager,而后将Demo3_1拖放到检视图中,再将图片拖放到检视图脚本下的Texture上(赋初值):
十、按【播放】按钮进入预览模式,便可看到下面的运行界面:
单击【建立立方体】按钮,会看到下落的立方体(由于代码中添加了刚体因此会自动下落),可是下落到Plane上后就停下来了:
单击【建立球体】按钮,这个球会下落到立方体的上面停下来:
单击【添加颜色】按钮,就会给左边那个立方体换色:
单击【添加纹理】按钮,就会给左边那个立方体贴图:
哈哈,好玩吧。