有人了解Unity中一个unity gameobjecttPool的使用么

【Unity开发】GameObject
【Unity开发】GameObject
写在前面——
如果转载请注明出处,谢谢大家支持
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
——Forward
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&我的微博——&
QQ技术交流群——forTheDream()
GameObject是Unity中一个很重要的角色。对GameObject学习能够让我们更好的进行Unity开发,今天我们就来学习一下GameObject这个概念——
在我们的Unity游戏中每一个对象都是一个GameObject,但是没有我们的指示,这些GameObject对象不会自己做任何事情。GameObject就像一个可以由我们自己定义的容器,我们让它包含什么样的属性,它就是一种什么样的GameObject——一个角色或者一个特效等等。
&&&&好的,这里就有一个问题了,既然游戏中的每个对象都是一个GameObject,我们又是如何来区分它们呢?
&前面我们已经说过,GameObject就是一个容器。在这个空箱子中放不同的东西(属性),就组成了不同的对象类型。也就是说,游戏中需要什么的元素,我们都可以通过向GameObject中添加组件(Component)的方式来实现,当然,我们还可以通过脚本(Script)来创建自定义的组件。
GameObject和组件(Componet)的关系
前面说了,一个GameObject,我们可以根据需要给他添加各种不同的Componet来实现我们预期的效果。当我们创建一个新的GameObject的时候都会自带一个Transform(这个Componet包含了位置,旋转,缩放属性),我们可以修改这些属性。
Transform Component
Component是最重要的一个Component,因为所有的GameObject的使用要涉及到Transform的属性(每个游戏对象在游戏世界中的表现,都要设置其位置,旋转,缩放的)。
这里需要说明一下,在Unity游戏场景中,我们不可能创建一个不包含任何Transform的空GameObject。如果一个GameObject而不包含任何Transform
Component,那么这个GameObject只能用来存储数据,而不能在游戏场景中显示。
Component对GameObject来说是相当重要的一个组件,但是对一个GameObject来说,他除了需要一个Transform组件之外,一般来说,我们还会给他挂上其他的一些组件(比如:button的点击响应、动画效果甚至是我们自己定义的一些组件)
组件的使用
通过上面的学习,我们已经知道了GameObject和Component的一些概念和它们之间的关系。了解只是起步,真正应该怎么去使用它们呢?接下来,我们就来学习一下他们的使用过程。
在Unity的菜单栏,我们看到有一项Component,我们可以通过这一菜单项来添加Component给某一个GameObject。
在这个菜单项的下拉列表中我们也可以看到具体的Component有哪些。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
接着Unity的第一篇博客中的例子,我们向之前创建的GameObject中添加一个Rigidbody的Component(一个物理组件Component——Physics——Rigidbody),运行这个例子,看看与添加Rigidbody之前的例子有什么区别呢?(对,当我们运行起来时,发现场景中的GameObject受到重力影响,出现了由慢向快开始下落的效果,OK,添加组件成功!)
我们可以在Inspector中看到GameObject多了一个Rigidbody的属性信息,在这里,我们可以根据自己的需要去修改新添加Component的属性。
当然不同的Component有不同的属性供我们操作,这个我们可以自己去看看。
在开发过程中,当我们需要移除一个Component时,该怎么做呢?其实很简单,鼠标右键点击Component组件
GameObject和Script的关系
这里肯定有人会问——如果现有的这个Component不能满足项目需求或者说我如何才能主动控制场景中的GameObject呢?根据Forward对Unity的现有理解,我们可以通过添加Script来达到这个目的。
&&&&&&&&&&&&&&
先我们需要创建一个自己的Script,如图6所示,(Assets——Create——JavaScript/C#Script/…)创建我们的目标Script,我们所预期的场景中的GameObject所要做的逻辑都是在这个Script中完成的,这么说,可能有人就糊涂了,新创建的Script是如何跟场景中的GameObject关联起来呢?这就涉及到Unity的操作(或许就是Unity被广泛开发人员肯定的一个重要原因吧,场景中的对象与脚本的关联,不需要过多的添加代码,而只需要使用鼠标拖拽就可以完成!)
这里,我们将新添加的Script——CubeTest用鼠标左键选中(不松开)直接拖拽至Hierarchy窗口中的Cube_Test(目标GameObject)上,然后松开鼠标就可以了,这样我们就对目标GameObject关联到了一个Script上(是不是那句广告语——“So
easy”啊?^_^)
&&&&&&&&&&&&&&&
在目标GameObject的Inspector窗口中查看添加结果,如图8所示——
&&&&&&&&&&&&&&&&&&&&&&&&&&
这样,我们就可以在新添加的CubeTest Script中控制目标GameObject了。这里我们为了做测试,在CubeTest文件中添加如下代码——
好了,运行起来之后,如我们所预期的,在Console窗口中,我们看到打印了预期log,证明关联是成功的!
好了,GameObjec的学习到这里就结束了,明天还得上班,得休息啦~~~
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。主题 : 有人了解Unity中一个GameObjectPool的使用么?
级别: 新手上路
可可豆: 24 CB
威望: 24 点
在线时间: 86(时)
发自: Web Page
来源于&&分类
有人了解Unity中一个GameObjectPool的使用么?&&&
&&&&游戏的加载遇到了问题,不停地实例化造成iphone的卡顿,网络上了解了下,有个大神写了个GameObjectPool的脚本,但本人初学,只能现学现卖,不晓得哪位大神能指点一二,感激不尽!代码如下:using UnityEusing Susing System.C/** * A general pool object for reusable game objects. *
* It supports spawning and unspawning game objects that are * instantiated from a common prefab. Can be used preallocate * objects to avoid calls to Instantiate during gameplay. Can * also create objects on demand (which it does if no objects * are available in the pool). *
* Converted JScript version to C#, original here: * /video-games/unity-resource-gameobjectpool/ *
* C# version by Bart Wttewaall, www.Mediamonkey.nl */public class GameObjectPool{&&&&&&&&private GameObject _&&&&private S&&&&private ArrayL&&&&&&&&private Action&GameObject& initA&&&&private bool setActiveR&&&&&&&&// ---- getters & setters ----&&&&#region getters & setters&&&&&&&&// returns the prefab being used by the pool.&&&&public GameObject prefab&&&&{&&&&&&&&get { return _ }&&&&}&&&&&&&&// returns the number of active objects.&&&&public int numActive&&&&{&&&&&&&&get { return all.Count - available.C }&&&&}&&&&&&&&// returns the number of available objects.&&&&public int numAvailable&&&&{&&&&&&&&get { return available.C }&&&&}&&&&&&&&#endregion&&&&// ---- constructor ----&&&&#region constructor&&&&&&&&public GameObjectPool(GameObject prefab, uint initialCapacity, Action&GameObject& initAction, bool setActiveRecursively)&&&&{&&&&&&&&this._prefab =&&&&&&&&this.initAction = initA&&&&&&&&this.setActiveRecursively = setActiveR&&&&&&&&&&&&&&&&available = (initialCapacity & 0) ? new Stack((int)initialCapacity) : new Stack();&&&&&&&&all = (initialCapacity & 0) ? new ArrayList((int)initialCapacity) : new ArrayList();&&&&}&&&&&&&&#endregion&&&&// ---- public methods ----&&&&#region public methods&&&&&&&&public GameObject Spawn(Vector3 position, Quaternion rotation)&&&&{&&&&&&&&GameO&&&&&&&&&&&&&&&&if (available.Count == 0)&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&// create an object and initialize it.&&&&&&&&&&&&result = GameObject.Instantiate(prefab, position, rotation) as GameO&&&&&&&&&&&&&&&&&&&&&&&&// run optional initialization method on the object&&&&&&&&&&&&if (initAction != null) initAction(result);&&&&&&&&&&&&&&&&&&&&&&&&all.Add(result);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&else&&&&&&&&{&&&&&&&&&&&&result = available.Pop() as GameO&&&&&&&&&&&&&&&&&&&&&&&&// get the result's transform and reuse for efficiency.&&&&&&&&&&&&// calling gameObject.transform is expensive.&&&&&&&&&&&&Transform resultTrans = result.&&&&&&&&&&&&resultTrans.position =&&&&&&&&&&&&resultTrans.rotation =&&&&&&&&&&&&&&&&&&&&&&&&result.SetActive(true);&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}&&&&&&&&public bool Destroy(GameObject target)&&&&{&&&&&&&&if (!available.Contains(target))&&&&&&&&{&&&&&&&&&&&&available.Push(target);&&&&&&&&&&&&&&&&&&&&&&&&SetActive(target, false);&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}&&&&&&&&// Unspawns all the game objects created by the pool.&&&&public void DestroyAll()&&&&{&&&&&&&&for (int i = 0; i & all.C i++)&&&&&&&&{&&&&&&&&&&&&GameObject target = all[i] as GameO&&&&&&&&&&&&&&&&&&&&&&&&if (target.activeSelf) Destroy(target);&&&&&&&&}&&&&}&&&&&&&&// Unspawns all the game objects and clears the pool.&&&&public void Clear()&&&&{&&&&&&&&DestroyAll();&&&&&&&&available.Clear();&&&&&&&&all.Clear();&&&&}&&&&&&&&// Applies the provided function to some or all of the pool's game objects.&&&&public void ForEach(Action&GameObject& action, bool activeOnly)&&&&{&&&&&&&&for (int i = 0; i & all.C i++)&&&&&&&&{&&&&&&&&&&&&GameObject target = all[i] as GameO&&&&&&&&&&&&&&&&&&&&&&&&if (!activeOnly || target.activeSelf) action(target);&&&&&&&&}&&&&}&&&&&&&&#endregion&&&&// ---- protected methods ----&&&&#region protected methods&&&&&&&&// Activates or deactivates the provided game object using the method&&&&// specified by the setActiveRecursively flag.&&&&protected void SetActive(GameObject target, bool value)&&&&{&&&&&&&&if (setActiveRecursively) &&&&&&&&{&&&&&&&&&&&&target.SetActive(value); &&&&&&&&}&&&&&&&&else&&&&&&&&{&&&&&&&&&&&&target.SetActive(value);&&&&&&&&}&&&&}&&&&&&&&#endregion}跪求使用方法!!!
级别: 新手上路
可可豆: 1 CB
威望: 1 点
在线时间: 4(时)
发自: Web Page
看看这篇文章是否可以给你一点帮助:
关注本帖(如果有新回复会站内信通知您)
8*2-5 正确答案:11
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版江湖秘闻:要想闯荡江湖,前辈经验必不可少。各路侠客江湖秘闻均存于此。
Unity IL2CPP Bug : IL2CPP error for method 'System.Void ::.ctor()'
Unity4.7版本在 IL2CPP 打包 IOS的时候出现错误:
IL2CPP error for method System.Void &PrivateImplementationDetails&::.ctor() in assembly C:\Users\DELL\Documents\New Unity Project 4\Temp\StagingArea\Data\Managed\UnityEngine.UI.dll
Additional informati…
整体结构SimplePool 简单的对象池,主要用于管理整个对象池,不绑定在任何对象上这样方便删除
PrefabPool 这个是对象池的实体部分,主要就是管理创建、删除、添加、储存对象
IPool 这个每个对象上需要绑定的脚本需要继承的接口
PoolGameobject 这个是游戏对象对象绑定的脚本,…
苦逼的小新
在Unity中,如果指定的字体不包含某个字,Unity就会从 自带的 Arial 中读取字形来创建这个字,本意是好的,但是总是会有问题。
在我们游戏中就有这样的问题,自己制作的微软雅黑字库不包含繁体字,Unity 就会用 Arial 来补全显示。这样看起来很怪。
我一开始是猜测 我们字库不…
今天老大发现 UnityEditor 在 Android 下打出来的 Android 的 Assetbundle,加载之后 Shader 不能正确的执行!!!查看 Shader 属性,看到 提示 说 该 Shader 不支持我的显卡但是仔细看 Shader 也没什么问题,于是到官网找了一个最简单的Shader 来替换Shader &Custom/New…
解决UGUI的ScrollRect事件冲突,完美实现ScrollRect的嵌套使用最近有人问我 ugui滚动列表和列表下的子物体的滑动冲突怎么解决?一直都没来得及去解决,刚好今天神之右手也使用了ScrollRect发现点击了就不能拖动拖动了就不能点击。所以下面我们就来一步步把这个问题解决先来看看…
苦逼的小新
Unity4.6.9 Bug导致在Android 6.0设备上黑屏,更新Unity4.7解决问题。原因是Unity4.6.9 在 Android 6.0 上请求一个 permission 的时候出错。
参考Unity4.7 发行说明/cn/unity/whats-new/unity-4.7.0
Android: Marshmallow - Fixed issues when querying f…
游戏要迁移到Lua,选择了SLua这个开源库来做,SLua很干净,仅仅只提供 Unity 到 Lua 的支持,没有包含其它的库,比如 protoc-gen-lua ,既然没有,那我们就自己把 protoc-gen-lua 编译到 SLua 库中。1、protoc-gen-lua 的编译安装使用首先下载 protobuf-2.4.1 编译出 proto工具…
2015年最后一天,给大家分享一个Unity的资源管理机制。首先,游戏为何要做资源的更新?unity做资源更新有几个好处1,减少下载包大小;2,是方便资源的增/删/改,使游戏获得最佳体验。
[TOC]#功能简诉做游戏时,经常有很多需要滑动的列表,比如仓库,背包,好友邮件等等。当能滑动的物体多是。滑动会变的很卡。如何让列表滑动更加顺畅是个必须解决的问题。
每次遇到屏幕转换到世界单位的时候都很烦不知道为啥是这样转也不清楚原理,今日细细理解下到底屏幕的像素单位和UNITY的世界单位到底是怎么回事
苦逼的小新
直接上工程了。下载地址如下。一个Unity客户端。一个C# socket案例/c3YbxZpKeSik6
访问密码 3723
简单的实现了下NGUI的上下翻页。有两个接口,分别是上一页和下一页。用法如下。如上图,第一个参数为 Page的宽或高,具体由你的滑动组件设定的方向定。第二个参数为滑动系数,即,滑动了多远就翻页第三个参数为总页数。依赖组件。UIScrollView,UICenterOnChild。脚本和Scroll…
苦逼的小新
在使用protoc-gen-lua 生成的lua文件时提示错误:main function has more than 200 local variables意思就是说,这个lua 脚本中的 local 变量超过了 200个,不知是不是lua的限定还是 Protobuf 的限定。总之很奇妙。到StackOverFlow上面搜索到相关的问题,很多朋友表示把 local……
The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.Google后查证,iOS9引入了新特性App Transport Security (ATS)。详情:App Transport Security (ATS)新特…
//不能含有特殊字符;Regex reg = new Regex(@&^[\u4e00-\u9fa5a-zA-Z]+$&);Match m = reg.Match(name);if (!m.Success){UIManager.Instance.ShowTip(&请输入中文或字母!&);}其它常用匹配字符串全部是中文字符的正则表达式&^[\u4e00-\u9fa5]+…
本文只是讲述一下过程,采用很简单的打包加密方法,至于需要什么样的加密结果,请大家按照需求去修改,字节偏移、前后颠倒加算法都可以,不过一般无需这么复杂,而且太复杂的加密对于极其追求运行效率的游戏来说,也是一重负担。对于Unity,虽然Unity自身会进行压缩加密,但是…
计划在项目中使用 不压缩的Assetbundle ,所以需要对Assetbundle 进行手动压缩打包,因为之前有对 十万个冷笑话的打包分析,所以这次坚定选择 LZMA压缩算法来压缩Assetbundle。Note:因为暂时不知道LZMA如何压缩与解压文件夹,所以目前是计划对文件夹进行UPK打包成UPK文件,然…
想必在大家接触Unity之前或多或少也使用了解过许多其他的游戏开发引擎和工具,其中不得不说的一款就是由Enterbrain Incorporation公司出品的游戏制作工具:RPG Maker。
在尚未系统学习编程语言和理解编程思想之前,RPG Maker无疑是为苦恼于无法自己制作一款游戏的我们带来…
24个干货 1跳转
info@youke.proUnity3D 给对象(gameObject)添加脚本代码_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Unity3D 给对象(gameObject)添加脚本代码
来源:Linux社区&
作者:janpylx
Unity3D支持三种脚本,javascript、C# Script、Boo Script(类Python)。我这个人比较二......最初公司这边叫我学C#,我之前不会,所以现学。到了之后才发现,我会的Python是可以派上用场的,而且我也更喜欢Python一些。但这还不是最二的。我发现了一个问题,就是官方的脚本文档基本都是用javascript来给用例的。于是我心一横,就把javascript的基础给过了一遍(这个资料挺不错的)。
免费下载地址在
用户名与密码都是
具体下载目录在 /2012年资料/7月/22日/Unity3D 给对象(gameObject)添加脚本代码/
好吧,最二的来了。后来当我发现官方文档里的这个的时候,我笑了。见下图。
点击这个下拉菜单就可以切换例子的代码的类型......算了,新学一门语言也不错。虽然只懂点皮毛......PS:建议不会编程的童鞋别以JS为第一门语言,很可能会养成不好的习惯哦。特别是在代码风格上面。当然,这里并没有贬低JS的意思。毕竟我现在用它用的很舒服。
亲,如果有概念(比如gameObject之类的概念)上的不懂,请先去看Unity官方的用户手册哈。我看了文档后,我的理解是,脚本和组件没啥区别。下面就直接了当的记录下添加脚本的步骤吧。(方法有很多,我就说一种我最习惯的方法哈)首先,在Project view中点鼠标右键,选Create -& javascript(别的也行),以下由图说明。
添加之后,在Project view里出现的脚本文件,双击之后即可编辑。
把Project view中的脚本文件拖拽到你想通过脚本来控制的对象(gameObject)上,之后脚本会以类似组件的形式,出现在对象的Inspector窗口中。
嘿嘿,具体脚本的编写,就看自己的水平咯。有啥不懂就上网、自己研究、或者看看官方的脚本文档。
相关资讯 & & &
& (12/09/:24)
& (07/17/:47)
& (01月03日)
& (08/28/:08)
& (06/17/:06)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 unity 删除gameobject 的文章

 

随机推荐