分类: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文件改为下面的内容并保存:

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class Demo3_1 : MonoBehaviour
  5. {
  6. public Texture texture;
  7. private GameObject obj;
  8. private Renderer render;
  9. void Start()
  10. {
  11. //获取游戏对象
  12. obj = GameObject.Find("Cube");
  13. //获取该对象的渲染器
  14. render = obj.GetComponent<Renderer>();
  15. }
  16.  
  17. void OnGUI()
  18. {
  19. if (GUILayout.Button("创建立方体", GUILayout.Height(50)))
  20. {
  21. //设置该模型默认为立方体
  22. GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
  23. //为对象添加一个刚体,赋予物理属性
  24. obj.AddComponent<Rigidbody>();
  25. //赋予对象的材质红色
  26. obj.GetComponent<Renderer>().material.color = Color.green;
  27. //设置对象的名称
  28. obj.name = "Cube";
  29. //设置此模型材质的位置坐标
  30. obj.transform.position = new Vector3(0, 5f, 0);
  31. }
  32. if (GUILayout.Button("创建球体", GUILayout.Height(50)))
  33. {
  34. //设置该模型默认为立方体
  35. GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Sphere);
  36. //为对象添加一个刚体,赋予物理属性
  37. obj.AddComponent<Rigidbody>();
  38. //赋予对象的材质红色
  39. obj.GetComponent<Renderer>().material.color = Color.red;
  40. //设置对象的名称
  41. obj.name = "Sphere";
  42. //设置此模型材质的位置坐标
  43. obj.transform.position = new Vector3(0, 5f, 0);
  44. }
  45. if (GUILayout.Button("添加颜色", GUILayout.Width(100), GUILayout.Height(50)))
  46. {
  47. //修改渲染颜色为红色
  48. render.material.color = Color.red;
  49. }
  50. if (GUILayout.Button("添加贴图", GUILayout.Width(100), GUILayout.Height(50)))
  51. {
  52. //添加组件贴图
  53. render.material.mainTexture = texture;
  54. }
  55. }
  56. }

8、切换到Unity,向6.3子文件夹下拖放一个图片(随便选一个图片就行):

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

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

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

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

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

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

哈哈,好玩吧。

【Unity】6.3 通过 C# 脚本创建和访问游戏对象的更多相关文章

  1. Unity3D基础--动态创建和设置游戏对象

    转载自原文:http://m.blog.csdn.net/blog/smbroe/43488627 1.如何动态创建对象:调用GameObject的CreatePrimitive方法可以按模型进行创建 ...

  2. 使用Unity创建塔防游戏(Part1)

    How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...

  3. 使用Unity创建塔防游戏(Part3)—— 项目总结

    之前我们完成了使用Unity创建塔防游戏这个小项目,在这篇文章里,我们对项目中学习到的知识进行一次总结. Part1的地址:http://www.cnblogs.com/lcxBlog/p/60759 ...

  4. Unity3D 中的面向对象设计 {游戏对象(创建、删除、获取),以及添加修改组件}

    一.创建游戏对象 游戏对象分三种:(1) 将物体模型等资源由Project工程面板拖拽到Hierarchy层次面板中 (2) 由GameObject菜单创建Unity自带的游戏对象,如Cube.Cam ...

  5. unity, 用脚本创建mesh

    创建一个空gameObject,添加Mesh Filter和Mesh Renderer两个component,再添加一个脚本createMeshScript: using UnityEngine;us ...

  6. Unity通过脚本创建Mesh(网格)

    ##1.创建一个带Mesh的物体 Unity中的网格作为组件不能脱离物体单独存在 新建脚本CreateMesh public class CreateMesh: MonoBehaviour { voi ...

  7. Unity学习疑问记录之脚本生命周期

    总的来说unity的脚本生命周期分几个部分:编辑→初始化→游戏逻辑→渲染→GUI→Teardown首先是Reset,顾名思义:重置.在什么情况下调用呢?1.用户第一次添加组件时.2用户点击见组件面板上 ...

  8. 使用Unity创建塔防游戏(Part2)

    How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...

  9. 使用unity创建塔防游戏(原译)(part1)

    塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了. 在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏. 你将会学到如何: 创建一波一波的敌人 使敌人随着路标移动 ...

随机推荐

  1. C语言的经典排序算法源码

    1.插入排序:插入法是一种比较直观的排序方法.它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置.把数组元素插完也就完成了排序.代码如下: #include<stdio.h> ...

  2. 【原创视频教程】SqlServer2008视频教程[共9集]

    这些视频都是13年-14年两年里面录制的,怀着一份创造之心, 可能说得不对,或者说得肤浅,望见谅....也请指正... 谢谢你的支持.. 更多资料:北盟网 www.bamn.cn ---------- ...

  3. Selenium webdriver 获取属性值 元素里的value

    1.WebElement webElemt= webElement.findElement(By.xpath("//*[@class='xxxxxx]/a")); //在ie下使用 ...

  4. mysqlsla快速入门

    小强软件测试,因为不是天生丽质,所以必须天生励志. 性能.python自动化班长期招生,咨询QQ:2083503238 官网:http://xqtesting.sxl.cn QQ群:229390571 ...

  5. Ubuntu 12.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

    Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4.4.3 交叉编译器下载 见这篇文章http://www.linuxidc.c ...

  6. 实体格式化转xml

    In the past, I've done the following to control datetime serialization: Ignore the DateTime property ...

  7. 【SQL】SQL中Case When的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 ' T ...

  8. 【Oracle】Oracle中dump函数的用法

    一.函数标准格式: DUMP(expr[,return_fmt[,start_position][,length]]) 基本参数时4个,最少可以填的参数是0个.当完全没有参数时,直接返回null.另外 ...

  9. Firefox 网络调试工具

    1.Firefox 简介 Firefox 官网下载地址 Firefox 其它下载地址 Firefox 58.0.2 for Mac,密码:346y. Firefox 36.0.4 for Mac,密码 ...

  10. golang学习笔记---函数、方法和接口

    函数:对应操作序列,是程序的基本组成元素. 函数有具名和匿名之分:具名函数一般对应于包级的函数,是匿名函数的一种特例,当匿名函数引用了外部作用域中的变量时就成了闭包函数,闭包函数是函数式编程语言的核心 ...