Unity3D optimization

UNITY very fuzzy multi-purpose development of mobile games, background images and UI picture display than on a PC, how to solve? ?
Select the resource unity in 
1.TextureType into Advanced
2.NonPower 2 change of non
3. generate Mip maps to remove the hook
4.Format compression formats selected rgba32bit
5. The apply stored at 

http://www.xuanyusong.com/archives/1019 playing in unity in the video used moivetexture

Remove the extra memory garbage
GC.Collect (); uninstall Generation 0 garbage
GC.Collect (1); unloading garbage generation
GC.Collect (2); uninstall generation 2 garbage
Resources.UnloadUnusedAssets (Uninstall unused resources)
Pass a true argument as seemingly able to unload all

Player setting Unity3d included an option "Submit HW Statistics". According to this option, Unity collected a very multi-unit status information, and open to everyone form Cankaoziliao.

Mobile device address, 1, iOS  http://t.cn/zRq6uXK  ; 2, Android  http://t.cn/zTqKwLr  ; you reference it.

http://stats.unity3d.com/mobile/index.html
http://stats.unity3d.com/mobile/index-ios.html

Unity of C # script GetComponentsInChildren <> () object can obtain a set of all sub-elements of the object
Vector3 variables are Float, single-precision floating-point decimal.
GameObject. AddComponent to join a newly created object scripts
when released Android application, PlayerSettings must change the Bundle Identifier
to use PlayerPrefs class provides can save the current game data to the local
want to superimpose on the basis of the current load on a new scene scene, using Application.LoadLevelAdditive ();
The assumption is to an object in the scene are not released:
DontDestroyOnLoad(GameObject.Find("UI Root"));
Application.LoadLevel("Home");
在Edit→Preference中的General选项卡下勾选Always show Project Wizard能够使Unity在一台机器上启动多个程序实例
Camera.WorldToScreenPoint能够把物体的世界坐标转换成相机的屏幕坐标
须要加入到物体上的脚本必须继承自MonoBehavior
gameObject.transform内部机制相当于是find,一直觉得非常扯蛋。不知道官方为什么要这么做,非要用户自己做一个引用变量,gameObject.transform这样不能是引用
面象对象的语言有自己主动垃圾销毁功能。但有的变量必须手动销毁,像某些情况下的数组里的元素,还有就是游戏对象。不用时也得手动销毁哦。制作游戏时敌人尽量保持一定的数量,达到动态平衡。而不是越来越多。终于导致死机。
u3d打包时 资源里面的它都打包 所以不必要的物件尽量删除  
怎么去掉pc上开启游戏时候的
File - Build Settings -Pc and Mac Standalone -Player Settings -Resolution and Presentation -Display Resolution 选项改为 Dialog Disabled      
Edit->Project setting->player 下选中有windows标志的那个图标,在resolution and presentation下display resolution 为disable  
一些Unity的使用和优化心得(大部分内容摘自网络) 
下面由一个基础的问题引出全文(题目与解答由Jare师父提供): 
有两段代码,循环运行两个比較耗时的方法。假设语言和编译器同样。哪一段会比較快? 
for (int i = 0; i < 100; i++) 

    DoSomethingA(); 
    DoSomethingB(); 

和 
for (int i = 0; i < 100; i++) 
    DoSomethingA(); 
for (int i = 0; i < 100; i++) 
    DoSomethingB(); 
  
相信有非常多人一样,第一眼看起来觉得第一段更快点。

但实际上答案是第二段快。原因例如以下: 
在这里性能的瓶颈不是循环本身。而是里面的方法。 
假设反复运行一个方法,那么CPU的寄存器、一级、二级缓存都非常easy命中。比起到内存拿数据快多了。

 
假设运行完一个运行还有一个。那么缓存非常可能就被替换掉了。仅仅能到内存拿,甚至内存不够,要到硬盘上的虚拟内存拿。 
  
缓存组件查找(下面内容摘自网络) 
这样的优化须要一些代码而且不是总有必要。

可是假设你的代码真的非常大,而且你须要尽可能的性能提升,它会是非常好的优化。

 
当你通过GetComponent获取一个组件或一个变量时,Unity必须从游戏物体里找到正确的组件。这时你便能通过一个缓存组件引用到一个私有变量。 
将: 
void Update () { 
    transform.Translate(new Vector3(0, 0, 5)); 

转换为: 
private Transform myTransform ; 
void Awake () { 
    myTransform = transform; 

void Update () { 
    myTransform.Translate(new Vector3(0, 0, 5)); 

后面的代码运行较快,由于Unity不用在每一帧寻找变换组件。同样,支持脚本组件。你能够使用GetComponent获取组件或其它快捷属性。

 
渲染 
一个Mesh 建议使用的面数在1500~4000 之间。 
一个 Mesh 建议仅仅用一个 Material。 
注意:两个Mesh结合成一个Mesh,可是却使用两个Material,并不会提高效能。 
假设要提高效能必须把这两个Mesh的Material也合并成一个。 
换句话说,一个Mesh使用多个Material 和一个Material 使用多个render。事实上耗能是几乎相同的。

 
所以。尽可能的让物件共用同样的Texture 才是提升效能的根本之道。 
  
把物体设为static能够提高渲染效率,缺点是不能使用动态uv(可能还有别的缺点,只是没试过) 
  
算法 
 1. 尽量避免每帧处理 
比方: 
function Update() { DoSomeThing(); } 
可改为每5帧处理一次: 
function Update() { if(Time.frameCount % 5 == 0) { DoSomeThing(); } } 
2. 定时反复处理用 InvokeRepeating 函数实现 
比方,启动0.5秒后每隔1秒运行一次 DoSomeThing 函数: 
function Start() { InvokeRepeating("DoSomeThing", 0.5, 1.0); } 
3. 优化 Update, FixedUpdate, LateUpdate 等每帧处理的函数 
函数里面的变量尽量在头部声明。

 
比方: 
function Update() { var pos: Vector3 = transform.position; } 
可改为 
private var pos: Vector3; function Update(){ pos = transform.position; } 
4. 主动回收垃圾 
给某个 GameObject 绑上下面的代码: 
function Update() { if(Time.frameCount % 50 == 0) { System.GC.Collect(); } }
   
5. 运行时尽量降低 Tris 和 Draw Calls 
预览的时候。可点开 Stats,查看图形渲染的开销情况。特别注意 Tris 和 Draw Calls 这两个參数。

 
一般来说,要做到: 
Tris 保持在 7.5k 下面 
Draw Calls 保持在 20 下面 
6. 压缩 Mesh 
导入 3D 模型之后。在不影响显示效果的前提下,最好打开 Mesh Compression。 
Off, Low, Medium, High 这几个选项,可酌情选取。 
7. 避免大量使用 Unity 自带的 Sphere 等内建 Mesh 
Unity 内建的 Mesh,多边形的数量比較大,假设物体不要求特别圆滑。可导入其它的简单3D模型取代。 
8. 优化数学计算 
比方。假设能够避免使用浮点型(float),尽量使用整形(int),尽量少用复杂的数学函数比方 Sin 和 Cos 等等。 
使用#pragma strict 
如今问题是,你通常不会意识到你在使用动态类型。#pragma strict能够解决问题!

简单的加入#pragma strict在脚本顶部,之后Unity将禁用脚本的动态类型,强制你使用静态类型。假设有一个类型未知,Unity将报告编译错误。下面,foo将在编译时报错: 
#pragma strict 
function Start () 

    var foo = GetComponent(MyScript); 
    foo.DoSomething(); 

  
使用内置数组 
内置数组是非常快的。ArrayList或Array类非常easy使用,你能轻易加入元件。

可是他们有全然不同的速度。

内置数组有固定长度,而且大多时候你会事先知道最大长度然后填充它。

内置数组最好的一点是他们直接嵌入结构数据类型在一个紧密的缓存里,而不须要不论什么额外类型信息或其它开销。因此,在缓存中遍历它是非常easy的,由于每一个元素都是对齐的。 
privatevar positions : Vector3[]; 
function Awake () { 
    positions = new  Vector3[100]; 
    for (var i=0;i<100;i++) 
    positions =  Vector3.zero; 
}
未选中物体变灰色:
改变物体shader中最后计算出来的rgb值就可以,将其转换成lab,然后用(l。l,l)来代表其终于的rgb就可以,对于选中的物体不须要进行处理。这样就会出现上述的视觉效果了 
代码怎样控制是否使用lightmaps
unity是通过shader来载入lightmap的。你能够设置一个全局參数来控制是否须要lightmap进行最后的光照计算,然后通过白天还是夜晚控制这个全局參数就可以。


billboard:
公告版.transform.LookAt(new Vecter3(Camera.main.transform.position.x,公告版.transform.position.y,Camera.main.transform.z))。这种方法hog在论坛里发过 

1、角色模型制作

  unity3d支持Skin动画  可是不支持Physique动画  会发现Physique动画在unity里严重变形  

  因此在模型的骨骼动画的制作上面  要用Skin  

  当然也能够做成Physique  然后用插件转换一下  3dsmax的插件PhyToSkin

  3dsmax中转换之前  为了避免出错  先隐藏骨骼   然后对绑定了骨骼的模型进行单独转换  由于批量也会出错

  转换以后在改动面板中加入可编辑网格  同一时候为了避免出错  检查一下uv是否贴反了

 

2、角色模型导出

  确保导出的模型是已经绑定了骨骼的  在导出设置中依据须要选择是否导出Animation  

  以及3dsmax和unity3d中的单位关系

     备注:max中导出戴有骨骼动画的mesh:

1 导出时需包括骨骼信息和mesh。mesh包括相应的skin影响器,physique不支持。

2 导出时在导出面板勾选导出动画,并设置要导出的动画时间长度

    max中单位:  按1unit=1m制作,之后导出设置单位为M,这样缩放因子在1则为正确。

fbx进入unity中后,模型要将缩放因子由0.01 改为1,则单位与max中 的单位以及真实世界的单位对齐了

 

3、官方CharacterCustomization中的模型

  从官方换装demo中会发现他的一个角色模型里包括了要换装的多个模型  比方有两个衣服模型、三个头发模型等

  那我们在美术制作的过程中是不是也要这样进行“模型叠加”呢   事实上不是必需

  demo这样的目的是为了使得模型公用一套骨骼  那么我们在角色模型的制作过程中  就确保模型使用的是同一套骨骼

  比方男性角色使用一套  女性角色使用还有一套  当进入创建角色场景后  依据玩家选择角色的性别  显示不同的动画就可以

 

4、角色模型打包技巧

  前面提到  官方demo里换装的实现  原因是由于公用了一套骨骼  

  那么我们在打包的时候  就将骨骼和模型分离  将模型各个部件(比方头发、手臂等)分开打包  

  比方一个男性的角色  将他的基础骨骼打进一个包   再将身体各个部分的模型分别打包  

  假设一个模型由头、脸、身体、手臂、脚五个部分组成  那么打包后将会有六个资源包  各自是基础骨骼、头、脸、身体、手臂、脚

  这样游戏的创建角色过程中  就能够单独地对模型的身体部位进行切换

  打包的过程和官方demo的打包大同小异  仅仅只是这里作者在打包时捎带生成了换装的配置表

 

6、角色模型的载入

  unity3d中使用www进行资源的载入  假设将资源放在了httpserver上的话(包括本机的IIS)  则须要一个crossdomain的xml配置  本地则不须要

  载入时应该首先去载入基础骨骼  载入完以后再去载入要显示的默认角色模型  比方新手模型

  在载入完以后  则要提取各个模型中所记录的骨骼信息  依据这些信息将模型挂到相应的骨骼上

  为了避免模型之间出现缝隙  应当进行模型网格的合并  

  完毕以上工作以后模型的载入就已经实现了

 

7、角色模型的换装

  回到角色模型打包的话题  

  设想一个男性角色有10套服装用来更换  而公用的骨骼是一套  

  因此在打包时仍然将这一套骨骼单独打包  然后再将其它全部的模型打包  

  一句话总结就是   一套骨骼相应N个模型  这N个模型都公用这一套骨骼

  换装的实现实际上就是将相应的身体部分进行更换  

  比方要换一个手臂  则将新的手臂与身体上除了手臂以外的模型再进行一次网格合并

  换句话说  要更换身体某一个部位  实际上就是更新了整个角色模型

  这里须要注意的一点是  基础的骨骼不用再去更新  

  设想一下  换装时候  一般角色都会有个“站立”或者“呼吸”的动作在播放  那么假设同一时候去更新了一遍基础骨骼  那么结果势必会让本来连贯的动作有“一闪”的现象

  这是由于  之前的动画还没播放完  然后就更新了骨骼  那么动画又重头開始播  这之间没有过渡  肯定会有点问题

 

控制抗锯齿

设置Edit---ProjectSettings---Quality



我们主要使用3dsmax2010进行制作,输出FBX的类型导入Unity3D中。
默认情况下,3dsmax8能够和U3D软件直接融合。自己主动转换为FBX物体。
注意事项例如以下:
1.面数控制
在MAX软件中制作单一GameObject物体的面数不能超过65000个三角形,即32500个多边形Poly,假设超过这个数量的物体不会显示出来,这就须要我们合理分布多边形和模型数量。
打开MAX场景。选择File/Properties/SummaryInfo能够打开文件属性记录。
当中Faces能够看到每一个物体的实际数量,个体数量不能超过65000个Faces面。
2.建模控制
Unity3D软件支持Line渲染和编辑之后所产生的模型。

大部分模型都依靠Polygon进行制作。在模型表面能够承认多出四边形的面,但不渲染交错的面。


默认情况下,U3D引擎是不承认双面材质的,除非使用植物材质球Nature类型。
所以在制作窗户、护栏等物体,假设想在两面都能看到模型,那须要制作出厚度,或者复制两个面翻转当中一个的Normal法线。
3.文件的放置
模型能够继承MAX的材质,可是文件的设置要依照下面形式进行放
在项目的Assets目录内,新创建一个Object目录。
并在当中创建Materials和Texture目录(分别自己主动存放材质球和贴图)。


模型物体并列保存在Object目录内。
这个规律模式不要打乱,否则会破坏整个系统逻辑。


4.材质数量控制
假设一个物体给与一个材质球,那么Unity3D对于材质数量和贴图数量没有不论什么的限制。
假设一个物体给与多个材质球。我们须要用Multi/SubObject来实现,可是这样的罗列的材质球的数量没有严格的控制。但尽量保持在10以内,过多的数量会导致一些错误。
假设不使用Multi/SubObject材质球,也能够选择一些面,然后给与一个材质球。

这样系统会自己主动将其转换成Multi/SubObject材质。
综合而言Unity3D软件对于材质的兼容还是非常好的。


5.物体的质感
Diffuse
Diffuse Bumped
Bumped Specular
这三种类型为经常使用类型,当中Bumped须要添加Normal法线贴图来实现凹凸。


Decal
这样的材质为贴花材质,即相当于Mask类型,能够再Decal(RGBA)贴与一个带有Alpha通道的图像。形成和原图像相叠加的效果
Diffuse Detail
这样的材质能够创造出污迹和划痕的效果。即相当于Blend混合材质。
Reflective
当中各种类型能够创造出金属反射效果,须要添加Cubmap贴图。
Transparent
当中各种类型能够创造出透明的效果。须要添加具有Alpha的通道贴图。
注意:假设要做玻璃贴图。Alpha假设全是灰色或黑色(即要求全透明),那么Alpha就会失效,假设要全透明。材质Alpha当中必须至少有1像素为白色。


Nature
当中SoftOcclusion Leaves类型主要应用于片状的树叶材质。
6.物体尺寸
默认情况下U3D系统单位1等于1米,等于软件1单位。

假设我们制作是依照实际大小比例制作。那么导入U3D引擎会自己主动变成原来的1%的大小。
由于默认情况下,U3D的FBXImporter中的Scale Factor的数值为0.01。
那个我们能够将ScaleFactor的数值恢复为1。可是这样会占用模型资源。比較消耗物理缓存。
我们也能够将这个物体从Hierarchy中选择。并使用Scale放大100倍,这样的设置能够有非常多优点。而且还能通过用脚本制作动画。
7.关于复制
场景中的灯光布局,反复的模型物体都能够使用系统Prefab进行关联复制,这样能够改变一个參数的同一时候将全部关联物体属性改变。


8.山脉控制
在创建山脉之后,选择Terrain/Set Resolution能够设置山脉的大小和属性。
须要注意的是。默认情况下TerrainWidth和Terrain Height为1000米。

假设设置这个数值太小。那么绘制草的时候会产生偏移。由于草的尺寸必须降低到0.1的单位。
也就是说,山脉在处理0.1单位的时候会产生0.01的偏差,假设模型太小,这样的偏差是显而易见的,所以建议用户不要让模型过小。


9.光晕控制
光晕又称为Lens Flare即灯光光效。


能够选择一个GameObject物体给与Component/Rendering/LensFlare。并在Flare中添加一个StandardAssets/Light Flares/50mm Zoom项目。

这样在运行之后就会产生光晕。
但有时候假设光晕太远太高却看不到。
一种办法是将光晕离近,还有一种办法是将全部摄影机Camera的Far clip plane的数值添加。
10.摄影机控制
假设场景中有多架摄影机。那么怎样确定第一打开时间所显示的摄影机,就须要设置Camera属性中的Depth数值,数值越大的摄影机越优先显示。


下面给你提供写方法以剥离减小包的大小。有些我也没试过:
降低的播放机大小主要有两个途径:一是更改Xcode内的Active Build Configuration,二是更改Unity的Stripping级别。
在公布模式下生成
你能够在 Xcode的Active Build Configuration下拉菜单中的调试和公布选项之间进行选择。

依据自身游戏的大小。选择公布模式生成的player会比选择调试模式降低2-3MB的大小。
在公布模式下,player会去掉不论什么的调试信息进行生成,所以假设你的游戏崩溃或有其它问题。将是没有可用的、可输出的堆栈跟踪信息。这适合公布已完毕的游戏,但你更应该在开发过程中使用调试模式。


iOS Stripping级别(Advanced License feature)
尺寸优化工作可通过下面几种方式被剥离机制激活:
Strip assemblies级别:通过分析脚本的字节码。来将这些脚本没有引用的类和方法从 Dll 中删除。从而使其不进入 AOT编译阶段。这样的优化降低了基本的二进制以及相应 Dll的大小。在不使用反射的条件下。这样的优化是安全的。


Strip ByteCode级别:不论什么.Net Dll(存储数据目录中)将从元数据中被剥离出来。这是可能的。由于全部的代码都已经 AOT阶段被预编译并链接到基本的二进制文件里
使用micro mscorlib级别:使用一种特殊的、较小的mscorlib版本号。某些部件将从此库中被移除。比如,安全。Reflection.Emit,远程处理,非公历日历等组件都将被删除。此外。内部组件之间的相互依赖性也会被降至最低。该种优化降低了基本的二进制以及mscorlib.dll的大小,但不能与一些系统和 System.Xml程序集类兼容。因此,小心地使用它。
这些级别是累积的,第3级优化隐式地包括级别 2和级别1,而第 2级优化则包括级别1。


Micro mscorlib是核心库的最低级版本号。仅仅有这些项目是眼下Unity中的Mono运行库所须要的。

使用micro mscorlib的最佳做法是不使用不论什么你的应用程序所不须要的.Net的类或其它功能。GUID就是一个你能够忽略的样例,她能够轻松地被自己定义的伪 Guid所替代,这样做将产生更好的性能和更小的应用程序。
怎样处理使用反射机制的Strip
Strip程度取决于静态代码的分析,但有时侯,这样的分析并非非常有效。特别是针对使用相似反射一样的动态功能的代码。在这样的情况下,有必要给出一些提示来指出哪些类是不应该被触动的。Unity支持对于每一个项目都给出一个自己定义Strip黑名单。使用黑名单是创建 link.xml 文件并将它放入Assets目录的一个简单方法。下面是一个的 link.xml文件的演示样例。当中有保留标记的类将不会被Strip:
有时侯。我们非常难确定哪些类会被进行错误的Strip。通常你能够通过在模拟器上运行已被Strip的应用程序和检查 Xcode 控制台的错误消息来获取实用的信息。


简单的清单,使你的公布版本号尽可能地小
1.最小化你的资源(assets):启用 PVRTC压缩纹理,并尽可能低降低其分辨率。

此外。尽量缩减无损压缩的音频的个数。

这里还有一些额外的缩减文件大小的提示。
2.设置iOSStrip级别为Use micro mscorlib。
3.设置脚本调用优化级别为Fast but no exceptions。


4.不要让你的不论什么代码与System.dll或 System.Xml.dll有关联。由于这些库并不兼容micro mscorlib。


5.去掉不必要的代码关联。
6.将API兼容性级别设置为.Net 2.0子集。请注意.Net 2.0子集与其它库与兼容性比較有限。
7.设置目标平台为armv6 (OpenGL ES1.1)。
8.不要使用 JS阵列。


9.避免泛型容器与结构等类型相结合。
我能用Unity创造出低于 20 mb的应用程序吗?
当然能够。

假设全部优化被都关掉,一个空项目在AppStore中大小大致为 13 MB左右。这在游戏中为你提供了大约7 MB的压缩资源预算。假设你拥有先进的许可证(并因此获得Strip选项)。那么仅仅含有主相机的空场景在AppStore中可压缩到大约 6 MB (zipped和 DRM连接),这样,你就能够有大约 14 MB可用空间用于压缩资源。


为什么我的应用程序公布到AppStore后大小添加了?
当他们公布你的应用程序时。苹果首先对二进制文件进行加密,然后将它通过 zip压缩。最常见的。苹果 DRM会使二进制文件大小添加大约 4 MB左右。作为一般规则,你应预见到的文件终于大小大致为全部文件(除了可运行文件)的 zip压缩大小。再加上未压缩的可运行文件的大小。
boxcollider或者其它不论什么collider 都是为物理碰撞或者碰撞检測做准备。

rigidbody   刚体属性组件,在不论什么物体下的Add component (加入零件、加入组件)可加入。
物体勾了tigger 那个属性,或者是地面勾了那个属性。tigger是能进入内部的。通常做推断触发范围

------------------------------------------

通常在变换场景后,上个场景中除了使用 DontDestroyOnLoad() 保留的物件,将会被释放掉,但假设在没有变换场景的情形下。想把未使用的资源卸载掉,该怎样做呢?


普通情况下。我们会利用 Unity 的编辑器来部属每一个关卡或场景中的物件。这些物件在载入场景后都是必要的,也不太会持续添加物件数。在关卡结束后即转换到下个场景,所以原本场景中的物件 将不再须要,所以 Unity 将会自己主动将前一场景的物件都销毁掉,所以我们通常不太须要去管理记忆体的使用或是否释放。但假设你的游戏全部是在单一个场景中运行的,那麼物件的產生、销 毁、释放资源等等的动作就变得格外重要。

我做了一个宝石类型的游戏。画面上除了 GUI 及背景外就仅仅有宝石。所以我事先将宝石做成 Prefabs ,在须要时利用 Instantiate() 產生,我在不同的关卡利用 renderer.material.mainTexture 变更背景图,利用 GetComponent(MeshFilter).sharedMesh 变更宝石的形状以及利用 renderer.material.color 变更宝石顏色,如此一个Prefabs 能够反复无限使用。所以在游戏场景中仅仅设置了简单几个场景物件。在这样的场景不须要变化太多的情况下,每一个关卡都换场景又一次配置一样的物件似乎有点多餘,所 以这个游戏便仅仅有一个场景,在须要时產生宝石。然后再视情况使用 Destroy() 销毁掉,这样看起来仅仅要在產生宝石时控制画面上的物件数量。那麼也就不用操心记忆体使用过量或没释放掉的问题。

可是,这个游戏在连续玩好几个关卡后。也就是连续玩一段时间后。会发生停顿或画面变慢的问题,游戏刚開始玩时是相当顺畅的,但长时间运行将使效能降低。直 觉上的推断应该是记忆体累积到一定程度造成的。每一个物件在不使用时都使用 Destroy() 销毁掉,那麼,堆积的记忆体是从哪裡来的呢?
打开 Profiler 视窗看看。会发现当中的 Memory 的 Total Object Count 数值,不断的增减变化,但随着时间的添加会慢慢的往上累积。查看官网 (http://unity3d.com/support/documentation/Manual/Profiler.html) 是这样说的 "If this number rises over time then it means your game is creating some objects that are never destroyed.",有些物件未销燬,非常奇怪吧!

都有使用 Destroy(),那為何还有未销毁的物件?事实上,主要是因為我这裡有对 renderer.material 设置改变其内容,在这个运行时期并不会真的去改变 Project 中的 material,而是產生这个物件实例(instance) 的材质实例以供该物件使用,所以假设仅仅是 Destroy(gameObject) 的话。将会残留部份物件数。每一个產生的物件都残留一点点的话。慢慢的长时间下来将会累积相当多,记忆体将会不敷使用,所以在 Destroy(gameObject) 的同一时候,应该也要 Destroy(renderer.material) 才行。


Simple hypothesis program structure, object to the use of Script files are not many words, too many add that is not difficult, but sometimes we do not determine whether there is a complete destruction of every thing at the right time, and perhaps other residues things will be the case continue to accumulate memory, then what should find a more simple and uniform way, so that we can run a Resources.UnloadUnusedAssets when each checkpoint before beginning or end (), let go its own uninstall unity off unused resources, the destruction of such items when in peacetime. We have first freed most of the resources are not used. Then we did not clean out the unloading part by the Resources.UnloadUnusedAssets (), so if viewing Total Object Count value Memory Profiler window of ups and downs can be maintained within a certain range. Rather than add over time. Of course, we will have differences on the level of difficulty settings. In some hurdle, the player may have to spend more time talent level is completed, it is assumed that we use Resources.UnloadUnusedAssets at the beginning or end of a level only () might be enough, at this time can also be defined otherwise every once in a while you run Resources .UnloadUnusedAssets (), so will be able to avoid any low system resources.

 



In the process of doing the project, a situation often encountered:
There are different types of scene objects instances, these instances can be different 3D objects. When we need to click on the object among a (GameObject), I hope he can delete your own initiative, but will also make a corresponding array of records deleted. Ensure data unification.

To achieve the above mentioned, the need to establish a self-invoked methods. http://www.easyunity3d.com/unity3d-destroy-gameobject.html

Guess you like

Origin www.cnblogs.com/ldxsuanfa/p/10931255.html