unity

Unity中血条ui制作(二)

北慕城南 提交于 2020-02-04 13:25:21
Unity中血条ui制作(二) 代码 : using UnityEngine ; public class HealthBar : MonoBehaviour { public float healthValue = 100f ; //血量上限 /// <summary> /// 当前血量属性,外部访问器 /// </summary> public float Health { get { return health ; } set { if ( health != value ) { Refresh ( ) ; health = value ; } } } private float health ; private void Start ( ) { health = healthValue ; transform . localScale . Normalize ( ) ; } void Refresh ( ) { transform . localScale = new Vector3 ( Health / healthValue , 1 , 1 ) ; } } 思路 : 根据血量控制血条Bar物体的transform.localScale的x轴值. 脚本要挂在Bar物体上. using UnityEngine ; public class PlayerHealth :

U3D DrawCall优化手记

对着背影说爱祢 提交于 2020-02-04 00:34:28
draw call是openGL的描绘次数(directX没怎么研究,但原理应该差不多) 一个简单的openGL的绘图次序是:设置颜色→绘图方式→顶点座标→绘制→结束。 每帧都会重复以上的步骤。这就是一次draw call 如果有两个model,那么需要 设置颜色→绘图方式→顶点座标A→绘制→结束。 设置颜色→绘图方式→顶点座标B→绘制→结束。 两次draw calls; 也就是说在openGl绘制前,如果色彩通道(color filter),绘图方式(shader),顶点座标(model)不同的情况下draw calls就会增加。 对openGl来说绘制参数(状态值)的变更要比绘制大量的顶点更耗费cpu。 所谓高速绘图就是,在尽量不改变openGl状态值的情况下,用一次draw call完成所有绘制。 比如上面的例子: 设置颜色→绘图方式→顶点座标A+顶点座标B→绘制→结束。 就要更加有效率。 个人估计unity3d的dynamic batch,static batch都是通过一定的方法使不同的object的顶点座标能够结合成一个整体,达到减少draw calls的效果。 但是有一定的要求限制,比如material要相同,mesh要相同并在300个面以内等等,这些都是为了保证openGl的状态值不改变。 Unity在 Player Setting 里的两个功能选项 Static

Unity3D优化总结(一)

99封情书 提交于 2020-02-04 00:30:23
容易忽略的美术资源的优化: 优化的美术制作真是一种感觉和经验的积累,能看出制作水平的不是做的效果多么犀利,而是得看制作的效果与对机器的要求等的性价比。 关于合并: 100个三角形的MESH,在渲染时与1500个面数的物体是没太大差别的,最佳的渲染设置应该在每个模型大约1500-4000个三角面。 材质共享: 如果需要通过脚本来访问复用材质属性,改变Renderer.material将会造成一份材质的拷贝。应该使用Renderer.sharedMaterial来保证材质的共享状态。 批处理动态物体需要在每个顶点上进行一定的开销,也有一些约束: 对VB的显存大小也有一定限制,如果着色器使用顶点位置,法线和UV值三种属性,那么只能批处理300顶点以下的物体;如果着色器需要使用顶点位置,法线,UV0,UV1和切向量,那只能批处理180顶点以下的物体了。 拥有lightmap的物体含有额外(隐藏)的材质属性,比如:lightmap的偏移和缩放系数等。所以,拥有lightmap的物体将不会进行批处理(除非他们指向lightmap的同一部分)。 使用不同缩放(scale)的物体将不能批次。分别拥有缩放尺度(1,1,1)和(2,2,2)的两个物体将不会进行批处理。 另外一个值得吸收的经验是非均匀缩放动画在unity中非常的慢,均匀缩放会快很多。 骨骼数量控制:一般来说游戏中的骨骼数量为15-60个

Unity查看当前内存使用情况(针对移动端开发)

≯℡__Kan透↙ 提交于 2020-02-03 23:12:25
Unity3D为我们提供了一个强大的性能分析工具Profiler。今天我们就使用Profiler来详细分析一下官方例子AngryBots的内存使用信息数据。 首先打开Profiler选择Memory选项,在游戏运行的某一帧查看Detailed选项数据( Simple模式的数据很直观,可以知道内存大体被哪部分占用了 ),如下图所示: 选中后,unity会自动获取这一帧的内存占用数据项,主要分为:Other、Assets、BuiltinResources、Scene Memory、NotSaved这五大部分,下面我们就来一一分析。 Other 记录数据项很多,篇幅时间有限,我们就专挑占用大小排行榜靠前的几项来详细分析吧。 统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用。不同平台和不同硬件得到的值会不一样,可以通过修改Player Setting的Stripping Level来调节大小。 Ricky: 我试着修改了一下Stripping Level似乎没什么改变,感觉虽占用内存大但不会影响游戏运行。我们暂时忽略它吧(- -)! GfxClientDevice :GFX(图形加速\图形加速器\显卡 (GraphicsForce Express))客户端设备。 Ricky: 虽占用较大内存,但这也是必备项,没办法优化。继续忽略吧(- -)!! ManagedHeap

查看Unity脚本源代码

。_饼干妹妹 提交于 2020-02-02 14:06:43
在Unity脚本开发中,常常使用Debug.Log或print来打印调试信息,这俩有什么区别? 1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class Rotate : MonoBehaviour { 6 public float speed = 100.0f; 7 // Use this for initialization 8 void Start () { 9 Debug.Log("Start"); 10 print("OK"); 11 } 12 13 // Update is called once per frame 14 void Update () { 15 transform.Rotate(speed, 0, 0); 16 } 17 } 在VS2017中,光标定位到print上,按F12转到定义,只能转到MonoBehavior的声明中去: public static void print(object message); 可见,print是父类的一个静态方法,可以直接使用。 此时,需要找到Unity项目下"F:\DoWork\Unity3D\NewUnityProject\Library

自定义修改Unity脚本模板

淺唱寂寞╮ 提交于 2020-02-02 13:53:44
在Unity Editor中Create C# script后,会自动生成初始化脚本: 1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class ScriptName : MonoBehaviour { 6 7 // Use this for initialization 8 void Start () { 9 10 } 11 12 // Update is called once per frame 13 void Update () { 14 15 } 16 } 这个是Unity默认脚本模板生成的,模板位于: "C:\Program Files\Unity\Editor\Data\Resources\ScriptTemplates\81-C# Script-NewBehaviourScript.cs.txt" 可根据自己需要自定义自己想要的模板,如以下例子: 1 /* 2 * ============================================================================== 3 * 4 * Filename: $safeitemname$ 5 * Description: 6

Python requirements.txt

陌路散爱 提交于 2020-02-02 09:44:33
Python requirements.txt 1. Requirements Files Requirements Files are files containing a list of items to be installed using pip install like so: Requirements Files 是包含要使用 pip install 安装的项目列表文件,如下所示: pip install -r requirements.txt pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt pip3 install -r requirements.txt pip3 install -i https://pypi.doubanio.com/simple/ -r requirements.txt Logically, a Requirements File is just a list of pip install arguments placed in a file. Note that you should not rely on the items in the file being installed by pip in any particular order. 从逻辑上讲

Unity骨骼动画的总结

人走茶凉 提交于 2020-02-02 05:22:32
欢迎参与讨论,转载请注明出处。 前言 恰逢疫情,在家继续推进Demo,骨骼动画相关的调研算是告一段落了,遂以本文记录相关要点。   首先要明确一点,本文所说的骨骼动画皆是3D模型的骨骼动画,与2D精灵的骨骼动画无关,虽然原理大致相通。 网格、骨骼、绑定 了解过3D相关知识的都知道,模型(Model)是由一个个三角形组成的,而这种三角形的学名则是网格(Mesh)。当然在DCC软件里为了方便创作,会用2个三角形组成四边形作为网格: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-38QKdoa9-1580552699378)(https://musoucrow.github.io/images/animation_guide/0.png)]   然后便是骨骼(Skeleton)了,它是驱动模型运动的根本,如下图所示,这是一种彼此之间有父子关系连接在一起的长条状玩意: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqyVrkvM-1580552699379)(https://musoucrow.github.io/images/animation_guide/1.png)]   最后便是让模型跟着骨骼一起运动了,这个骨肉融合的过程称为 绑定 ,具体要做的事便是将某节骨骼与相关的网格建立关系: [外链图片转存失败

整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK

空扰寡人 提交于 2020-02-01 05:38:40
Unity 导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础。 win7 下配置java环境变量,下面是链接 http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html 二:配置Android的SDK环境变量 除了需要Java的环境变量,我们还需要配置Android的sdk的位置,名字是ANDROID_HOME,值就是你的android的sdk的位置,比如我的,就如下所示: 二:安装ant并设置ant环境变量 1 、在Ant官网( http://ant.apache.org/bindownload.cgi )下载最新Ant包,在 http://sourceforge.net/projects/ant-contrib/files 下载Ant扩展包ant-contrib-1.0b3.jar(这个包就是用于循环编译多个渠道包)。 2、将Ant包解压到常用开发工具目录(自行选择,我的放在D:/Dev目录下),然后将下载下来的Ant扩展包ant-contrilb拷贝到Ant安装目录下的lib文件夹中。 3、设置Ant环境变量:ANT_HOME,变量值指向ant目录。 4、在环境变量Path里增加:%ANT_HOME%/bin;%ANT_HOME%/lib

Unity - Cinemachine实现相机抖动

你离开我真会死。 提交于 2020-02-01 05:24:48
普通相机抖动脚本较易实现,但在使用cinemachine相机下,其Transform组件不可被代码修改,那么Cinemachine的相机抖动如何实现呢?本文结合实际项目,对实现相机抖动的三大步骤进行系统讲解: 项目地址: Hero - SouthBegonia 配置流程 项目背景:一款2D像素动作游戏,我们操控着Player(必须带有Collider组件),游戏相机为 Cinemachine 2DCamera (关于其配置方法此处不做赘述,推荐文章在末尾参考处) 1. 在相机上添加监听脚本 在我们使用的虚拟相机 CM vcam1 上添加组件:AddComponent-> CinemachineImpulse Listener CinemachineImpulse Listener : 监听脚本内震动信号(方法调用) ,使得 抖动在此相机上发生 Channel Mask:通道遮罩,此处最好默认为EveryThing Gain:可获得震动信号的数目,0为屏蔽,1表示某时段仅能进行一个抖动运动 Use 2D Distance:用于2D游戏,忽略相机Z轴的抖动 2. 在震动信号发生物体上添加脚本 震动信号发生物体( 调用震动函数的物体 )为Player,因此需要在Player上添加组件:AddComponent-> Cinemachine Collision Impulse Source