【Unity】6.3 通过 C# 脚本创建和访问游戏对象
分类:Unity、C#、VS2015
创建日期:2016-04-16
一、简介
在游戏开发过程中,脚本不但需要访问脚本所在的游戏对象的组件,还经常需要访问和控制真他游戏对象。另外,根据项目需求,还可能需要通过脚本创建对象。
本节示例的最终运行效果如下:

二、查找场景中的游戏对象
在Unity脚本中,开发人员可以通过下面量的方式来访问游戏对象。
1、通过名称字符串来查找
使用函数GameObject.Find()查找在参数中指定的游戏对象。如果场景中存在指定名称的游戏对象,则返回该对象的引用,否则返回null。如果存在多个重名的对象,该方法仅返回第一个对象的引用。
例如:
private GameObject obj;
void Start()
{
//寻找整个场景中名为Cube的游戏对象并赋予obj变量
obj = GameObject.Find("Cube");
}
2、通过标签(Tag)来查找
使用函数GameObject.FindWithTag()查找在参数中指定的游戏对象。如果场景中存在指定标签的游戏对象,那么返回该对象的引用,否则返回null。
例如:
GameObject player=GameObject.FindWithTag("player");
3、注意的问题
获取游戏对象或组件的函数都比较耗时,因此,一般不要在Update()方法中去获取这些对象,而是应该在Start()方法中查找并将其保存到声明的字段变量中,然后再在Update()方法中使用这些组件或对象。
三、创建游戏对象
除了查找场景中的游戏对象外,当然也可以直接用脚本创建对象并将其添加到场景中。具体用法见接下来介绍的示例。
在实际项目中(包括游戏项目、虚拟现实VR项目,增强现实AR项目、……),这些场景中动态添加、修改或者删除的对象都需要通过脚本来控制。
四、本节例子的设计步骤
1、在Unity的Project中Assets文件夹下添加一个名为“6.3”的子文件夹,然后在该文件夹下创建一个名为“Scene6_3.unity”的场景。
2、向场景中添加一个Plane,设置(复位)其位置:
3、向场景中添加一个Cube。
4、调整摄像机以及Cube的参数,使其方便地可看到:

其中,Cube的参数如下:
Main Camera的参数如下:

5、向场景中添加一个空GameObject,并将其换名为manager:
6、切换到VS2015,在6.3子文件夹下添加一个名为“Demo3_1.cs”的脚本文件:

添加后看到的结果如下:
7、将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;
}
}
}
8、切换到Unity,向6.3子文件夹下拖放一个图片(随便选一个图片就行):

9、在层次视图中选中manager,然后将Demo3_1拖放到检视图中,再将图片拖放到检视图脚本下的Texture上(赋初值):

10、按【播放】按钮进入预览模式,即可看到下面的运行界面:

单击【创建立方体】按钮,会看到下落的立方体(因为代码中添加了刚体所以会自动下落),但是下落到Plane上后就停下来了:

单击【创建球体】按钮,这个球会下落到立方体的上面停下来:

单击【添加颜色】按钮,就会给左边那个立方体换色:

单击【添加纹理】按钮,就会给左边那个立方体贴图:

哈哈,好玩吧。
【Unity】6.3 通过 C# 脚本创建和访问游戏对象的更多相关文章
- Unity3D基础--动态创建和设置游戏对象
转载自原文:http://m.blog.csdn.net/blog/smbroe/43488627 1.如何动态创建对象:调用GameObject的CreatePrimitive方法可以按模型进行创建 ...
- 使用Unity创建塔防游戏(Part1)
How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...
- 使用Unity创建塔防游戏(Part3)—— 项目总结
之前我们完成了使用Unity创建塔防游戏这个小项目,在这篇文章里,我们对项目中学习到的知识进行一次总结. Part1的地址:http://www.cnblogs.com/lcxBlog/p/60759 ...
- Unity3D 中的面向对象设计 {游戏对象(创建、删除、获取),以及添加修改组件}
一.创建游戏对象 游戏对象分三种:(1) 将物体模型等资源由Project工程面板拖拽到Hierarchy层次面板中 (2) 由GameObject菜单创建Unity自带的游戏对象,如Cube.Cam ...
- unity, 用脚本创建mesh
创建一个空gameObject,添加Mesh Filter和Mesh Renderer两个component,再添加一个脚本createMeshScript: using UnityEngine;us ...
- Unity通过脚本创建Mesh(网格)
##1.创建一个带Mesh的物体 Unity中的网格作为组件不能脱离物体单独存在 新建脚本CreateMesh public class CreateMesh: MonoBehaviour { voi ...
- Unity学习疑问记录之脚本生命周期
总的来说unity的脚本生命周期分几个部分:编辑→初始化→游戏逻辑→渲染→GUI→Teardown首先是Reset,顾名思义:重置.在什么情况下调用呢?1.用户第一次添加组件时.2用户点击见组件面板上 ...
- 使用Unity创建塔防游戏(Part2)
How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...
- 使用unity创建塔防游戏(原译)(part1)
塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了. 在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏. 你将会学到如何: 创建一波一波的敌人 使敌人随着路标移动 ...
随机推荐
- Servlet路径跳转问题
Servlet中路径跳转(服务器端跳转)JSP 1.相对路径 注意这里的相对含义,相对于谁而言 经过多次试验总结,servlet相对路径跳转相对于servlet配置的xml路径(或servlet3. ...
- Spark -14:spark Hadoop 高可用模式下读写hdfs
第一种,通过配置文件 val sc = new SparkContext() sc.hadoopConfiguration.set("fs.defaultFS", "hd ...
- tableview中头部信息
//创建tableview中头部的文件#define kPadding 10 #define kIconWidth 100 #define kIconHeight 100 #define kCount ...
- [转载]TortoiseGit安装与使用
原文地址:TortoiseGit安装与使用作者:了凡春秋 之前一直用SVN做项目开发,确实感觉这些版本控制工具非常实用,尤其是在一个团队开发项目的时候.最近偶然看到一个新的版本管理工具Git,它本来是 ...
- c++ 11 override final
C++ 11添加了两个继承控制关键字:override和final. override确保在派生类中声明的重载函数跟基类的虚函数有相同的签名.final阻止类的进一步派生和虚函数的进一步重载
- Idea导出可运行Jar包
一.导出Jar包可以使用Maven方式 <project> ... <packaging>jar</packaging> ... <build> < ...
- Cobbler自动部署主机系统
Cobbler自动部署主机系统 简介: Cobbler由python语言开发,是对PXE和 Kickstart以及DHCP的封装.融合很多特性,提供了CLI和Web的管理形式.更加方便的实行网络安装. ...
- 【Linux】字符转换命令paste
这个 paste 就要比join 简单多了!相对于 join 必须要比对两个文件的数据相关性, paste 就直接『将两行贴在一起,且中间以 [tab] 键隔开』而已!简单的使用方法: [root@w ...
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- libevent的问题
问题: nginx error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: N ...