unity怎样获得ison属性值

unity怎样获得ison属性值,第1张

GameObjectFind("GUI_ZT")guiTexttext="";

注意GameObjectguiText是一个组件(脚本),他有一个属性叫text,所以要改的不是guiText而是guiTexttext

关于该脚本的属性这个问题,首先你要明白unity的组织结构。他是通过场景里的所有物体(GameObject)形成的树状结构,最直观的就说Hierarchy面板下的所有物体(GameObject,以下称为Go)。即,每个Go下面有除了一堆组件(Component,或者Monobaviour,也称为脚本)外,还有一个或者多个子Go。

unity的这种结构和很多主流引擎的结构是相同的,这种结构的好处就是加快搜索效率,从而提高游戏效率。在unity中,形成这个结构的组件就是Transform,通过它的Parent、Root、Child等方法就能搜索在这个Transform所在的Go上的子Go或者父Go。unity还提供了很多搜索的方法,比如用GetComponent,GetComponent<T>,GetComponentInChildren等很多查询组件的方法。为了更方便地查询,还有全局静态方法如GameObjectFind,GameObjectFindOfType等来支持开发者。

所以,你的问题的解决方案更详细地就是:

GameObject ui=GameObjectFind("GUI_ZT");

uiguiTexttext="";

推而广之,你要想改变某个组件(脚本)的某个属性,

1:找到那个脚本所在的GameObject

2:通过这个GameObject找到这个组件(脚本)

3:改变这个组件(脚本)的那个属性值

这个在Unity中实现,Unity里面内置了LightMapping,将美术做好的场景模型以及贴图放到工程中,然后在需要灯光的场景处放上静态光,接着用LightMapping烘焙就好

接下来说一下具体的用法:

首先在场景里面随意的放了一些物体,搭建了一个场景,里面有一盏直射灯,两盏不同颜色的点光源,然后有一个球,球是作为动态物体的存在。

由于打了灯光,所以球明显的受到了两盏灯光的影响而表现出两种颜色。

接下来设置一下LightMapping的选项,然后烘焙

烘焙之后的效果是这样的,由于三盏灯还开着,所以球还是受到光的颜色的影响。

接下来我们把三盏灯都关掉,这时候球就没有任何灯光效果,变成灰黑色

移动一下球,明显的不和场景里面的任何灯光产生影响

接下来我们要开始做LightProbe了。先建一个空物体

然后给这个空物体添加Light Probe Group组件

在LightProbe选项里面,有添加、选择、删除和复制探头的按钮

我们可以点击添加,放一些探头在场景里面,也可以建一个,然后复制多几个

最简单的,先在各个角落放一个,包一定范围内的场景包起来。只要你选择了LightProbe物体,那么这些探头点你就可见,然后你就可以直接用鼠标点选这些探头,然后使用位移工具来移动他们。

在烘焙之前,记得把这个LightProbe物体改成Lightmap静态物体

烘焙之前记得把三盏灯开启,烘焙完成之后,选择球,然后在网格渲染里面把Use Light Probes勾上

烘焙后就可以把三盏灯关闭了,这时候,我们看到球不再是灰黑色的了,而是受到了一定的灯光的影响

把球移动到另外一边,发现球的颜色稍微有点变化了,这就是受到了LightProbe影响了。

但上面的效果不明显,我们继续的在两盏点光源的附近加多一点探头

再次烘焙之后,我们可以看到,现在的球受到LightProbe的影响的效果就很明显了。

其实就是这么简单,LightProbe的用法就是在LightMapping的基础上加上了一些探头的点来记录光源的信息。探头越多,效果就越明显。各位如果有兴趣,可以深入的研究一下,探头怎样分布,效果才是最好的。

第一步,创建一个Panel 和 三个 cube,搭建成如下图形状

第二步,创建2个点光源,一个为绿灯,一个为红灯,各占一半位置,如下图:

为了能看清效果,可以把灯光的Intensity调大最大

第三步,创建一个空物体,给这个空物体加上 Component->Rendering->Light Probe Group 组件

第四步,点击Add probe,一个点一个点增加,或者使用Duplicate Selected 复制所选的点,让点把2个灯光照射范围包围起来,如下图:

第五步,创建一个cube放在group中间,并且勾上cube上Mesh Renderer中的Use Light Probes选项,如下图

第六步, 把地板Plane 和 加上Group组件的空物体 设置为  Lightmap static 静态

第七步,打开 window -> lightmapping ,在Bake页签中,点击 Bake  Scene,点完后,右下角会有进度条,等待完毕。

第八步,烘焙完毕,把场景中两个点光源禁用掉。

第九步,禁用后,平移中间的cube物体,当cube靠近红色区域时,会有红灯照射的反应,当靠近绿色,就会变成绿色,

在Unity中,可以使用InputGetMouseButtonDown()函数来获取当前鼠标拖拽的物体。该函数会返回一个bool值,如果鼠标按下,则返回true,否则返回false。可以在if语句中使用这个函数,来判断鼠标是否按下,如果按下,就可以获取当前鼠标拖拽的物体。除了使用InputGetMouseButtonDown()函数外,还可以使用raycast来检测鼠标拖拽的物体,从而获取当前鼠标拖拽的物体。

简化模型

最小化模型网格中的顶点和面的数量,避免复杂的网格。

使用纹理贴图代替复杂的网格

考虑用法线贴图对比高度贴图。法线贴图适用于伪造模型表面凸起和凹陷光照的简单纹理贴图。

高度贴图使用一张纹理来制作一种非常传统的3D表面几何图形。高度贴图比法线贴图优越是因为它们不仅定义了表面凸起和凹陷,而且提供了平行视差。作为一个着色器,它们的计算开销很大,只是没有网格的开销那么大。

限制需要绘制的对象

遮挡剔除(occlusion culling),在摄像机看不见对象时禁用对它们的渲染,因为它们被其他对象遮挡了。

Global Fog(迷雾限制),减少场景中细节渲染,其基于距离,比迷雾限制更远的对象将不会被绘制。

对细节分级或LOD分组,近处的物体用细节模型渲染,远处的模型则用简化的模型渲染,是一种简化几何对象的好方法。

光照和阴影的性能

节约使用实时光影,当某个对象投射阴影时会生成一个阴影贴图,它会被用于渲染其他可能接受阴影的对象。阴影有很高的渲染开销而且通常需要高端的GPU硬件。

其他技术如灯光探测器(实时或烘焙)和着色器的选择。

优化脚本

Update()回调函数每一帧都会被调用。移除不用的更新,使用一个状态变量和if语句在它们不需要时停止计算。内存管理,数学与物理。

批量处理

Unity是将不同的网格归类到一个单独的批处理中,这个批处理会被立即放进图形硬件。这比单独发送网格快很多。网格实际上先被编译进一个OpenGL顶点缓存对象或一个VBO,这是渲染流水线的低层细节。

每一个批处理调用一次绘制,在一个场景中减少调用绘制次数的比减少顶点或三角形的实际数量的效果更有意义。

共有两种类型的批处理——静态批处理和动态批处理

首先,确认在Player Settings中启用Static Batching和Dynamic Batching。

对于静态批处理,简单地通过在Unity的Inspector中为场景内的每个对象勾选Static复选框以标记对象为静态。把一个对象标记为静态是告诉它将永远不能移动,动画或缩放。Unity将自动把这些共享相同材质网格放在一起形成一个大网格。

共享相同材质的网格,所有这样的网格在一个批处理中必须有相同的材质设置——相同的纹理,着色器,着色参数及材质的指针对象。

对于动态批处理,那些没有标记为Static的对象,Unity将尝试把它们放进批处理,即使它会是一个更慢的过程,因为它需要考虑逐帧动画(CPU开销)。共享材质的需求依然存在,当然还有其他的限制,比如顶点个数(小于300个顶点)和统一的Transform Scale规则。只有Mesh Renderers和Particle Systems使用批处理,这意味着蒙皮网格,衣服,尾迹渲染以及其他一些类型的渲染组件并没有使用批处理。

多通道像素填充

多通道像素填充就是某些高级渲染器的工作方式。光照和材质效果,比如多光照,动态阴影及透明度(Trransparent和Fade Render模式)都是以这种方式实现的。

针对项目,可以选择优化并避免通道像素填充在一起,或者理解清楚什么样的场景需要高性能,什么样的场景需要高保真,需要仔细的策划这个场景。

使用Light Probes以很低的成本模拟动态对象的动态光照。

在Quality Settings中把同时发生的光照的全部数量设置为1。

其他渲染技巧

创建2048分辨率的纹理并导入到默认的1024的设置,这样可以加速渲染。

针对无阴影使用高质量的设置渲染到Android时,需要切换目标平台到PC,使用高分辨率烘焙光照并开启硬阴影和软阴影,再切换回Android。

针对低级设备的优化或将程序分为高低版本。

Unity内置的性能评估工具——Stats窗格和Profiler窗格

Game面板中可开启Stats窗格

CPU:获取到当前占用CPU进行计算的时间绝对值,或时间点,如果Unity主进程处于挂断或休眠状态时,CPU time将会保持不变。

Batches:即Batched Draw Calls,是Unity内置的Draw Call Batching技术。

什么叫做“Draw call”,CPU每次通知GPU发出一个 glDrawElements (OpenGl中的图元渲染函数)或者 DrawIndexedPrimitive (DirectX中的顶点绘制方法)的过程称为一次Draw call,一般来说,引擎每对一个物体进行一次DrawCall,就会产生一个Batch,这个Batch里包含着该物体所有的网格和顶点数据,当渲染另一个相同的物体时,引擎会直接调用Batch里的信息,将相关顶点数据直接送到GPU,从而让渲染过程更加高效,即Batching技术是将所有材质相近的物体进行合并渲染。

Tris:摄像机视野(field of view)内渲染的三角面总数量

Verts:摄像机视野(field of view)内渲染的顶点总数

Screen:当前Game屏幕的分辨率大小,58M表示总的内存使用数值

SetPass calls:描述渲染性能开销

Shadow casters:表示场景中有多少个可以投射阴影的物体,一般这些物体都作为场景中的光源。

visible skinned meshed:渲染皮肤网格的数量

Animations:正在播放动画的数量

Network:网络情况

Unity中的Profiler选项是一个性能探测工具,可以报告游戏中的哥哥区域花费的时长,包括渲染和脚本。它记录游戏中随着时间的统计数据并以时间线图表展现出来。点击可以逐帧查看细节

通过SystemDiagnosticsProcess类获取

获取GPU的使用率,可以使用NVIDIASystemManagementInterface(nvidia-smi)工具,该工具可以提供GPU的详细信息,包括当前使用率。

使用正则表达式从结果字符串中提取GPU使用率信息,并进行处理。

以上就是关于unity怎样获得ison属性值全部的内容,包括:unity怎样获得ison属性值、如何在Unity中动态载入Lightmapping、【Unity】Light Probe Group图解超详细使用方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9729069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存