Unity

unity 协程原理与线程的区别

说到协程,我们首先回顾以下线程与进程这两个概念。在操作系统(os)级别,有进程(process)和线程(thread)两个我们看不到但又实际存在的“东西”,这两个东西都是用来模拟“并行”的,写操作系统的程序员通过用一定的策略给不同的进程和线程分配CPU计算资源,来让用户“以为”几个不同的事情在“同时”进行“。

unity编辑器概要

如何让编辑器运行你的代码?Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码。代码里可以访问到当前选中的内容(通过Selection类),并据此来确定显示视图。

Unity优化之GC——合理优化Unity的GC

介绍:

在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。

Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影响,此时垃圾回收会成为游戏性能的一大障碍点。

本文我们主要学习垃圾回收的机制,垃圾回收如何被触发以及如何提GC收效率来提高游戏的性能。

Unity内存管理机制简介

要想了解垃圾回收如何工作以及何时被触发,我们首先需要了解unity的内存管理机制。Unity主要采用自动内存管理的机制,开发时在代码中不需要详细地告诉unity如何进行内存管理,unity内部自身会进行内存管理。这和使用C++开发需要随时管理内存相比,有一定的优势,当然带来的劣势就是需要随时关注内存的增长,不要让游戏在手机上跑“飞”了。

unity的自动内存管理可以理解为以下几个部分:

Unity中的Shader及其基本框架

shader和Material的基本关系

Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。

所以说Shader并没有什么特别神奇的,它只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。

Unity中Shader的三种基本类型

按照渲染管线的分类,可以把Sharder分成3个类别:

固定功能着色器(Fixed Function Shader)

固定功能着色器为固定功能渲染管线的具体表现。

笔记:Unity的常用API

1、Event Function:事件函数

  • Reset() :被附加脚本时、在游戏物体的组件上按Reset时会触发该事件函数
  • Start() :在游戏初始化时会执行一次
  • Update() :每一帧都会运行这个方法
  • FixedUpdate(): 会在指定帧调用该方法多少次
  • LateUpdate(): 晚于Update的运行顺序,但是FPS和Update是一样的
  • Awake() Start() : 都是在游戏物体初始化运行一次,但是Awake的运行顺序高于Start的,并且只要脚本中存在Awake方法,则无论是否挂载了该脚本都会执行该方法
  • OnEnable(): 当将物体的SetActive设置为true时就会自动调用调用该方法
  • OnDestory(): 当关闭游戏则会调用该方法

2、Time时间类函数:

Unity Integrations集成功能介绍

Unity Integrations现已正式发布,它允许你将重要的Unity服务连接到Slack、Jira和Discord等热门的生产和通讯工具。

使用Unity Integrations将是获取即时通知的最好方法,例如:当通过Cloud Diagnostics云诊断提交新的用户报告,或是团队成员将新改动推送到Collaborate多人协作时,你会马上得到通知。

如果你是Unity Plus加强版,Unity Pro专业版或Unity Teams Advanced订阅用户,可以获得无限制的集成功能。Unity Personal个人版和Unity Teams Basic用户则可以设置其中的一项集成。

功能简介

Unity项目开发过程中常见的问题,你遇到过吗?

作者: 陈嘉栋

最近看到有朋友问一个unity游戏开发团队,需要掌握哪些知识之类的问题。事实上Unity引擎是一个很灵活的引擎,根据团队开发游戏类型的不同,对人员的要求也有差异,所以不能一概而论。但是,一些在Unity项目开发过程中常常会遇到的问题还是可以总结一下的。

下面我就来聊聊实际工作中,一个项目组可能会遇到的问题吧。

0x01.项目前期规划时的问题

这里指的不是策划的需求或者游戏玩法的计划,而是作为一个Unity项目我们需要在一开始明确并制定好的规范和标准。作为一个Unity项目或软件项目,这部分是很重要的,因为项目早期的规划随着项目的开发时间越久,就越难以修改。

对支持的最低机型不明确
作为一个Unity项目,我们首先要明确我们所需要支持的最低设备标准。并且项目组要有这样的设备,以供开发和QA团队使用。
否则,对项目的优化将无从谈起。

Unity小技巧介绍(四)

前面已经为大家分享了三篇Unity小技巧相关的文章,涉及到编辑器操作及脚本等多方面的内容,掌握这些小技巧能大大提高我们的开发效率。今天为大家介绍第四篇。

技巧一

在float型的字段前添加范围属性声明如[Range(0, 10)],即可在检视面板中使用滑动条来设置该字段的值。

1

技巧二

对一组字段使用属性声明[Heaader(“XX”)],可以在检视面板中将字段进行分组。

Unity小技巧介绍(三)

技巧一

程序员们应该都知道,从项目视图点击右键创建的脚本会自动填充一些代码。其实这些自动填充的代码模板也是可以自定义的。

如果使用Mac,找到应用程序中的Unity.app,右键单击显示包内容,找到Resources>ScriptTemplates文件夹,然后选择你要创建模板的脚本类型,复制一份自己命名并编辑后保存,然后退出编辑器之后重新打开,再在项目视图中右键单击创建,就会出现刚刚添加的脚本类型。打开新建的脚本就可以看到自定义的模板代码。

如果使用Windows,则在ProgramFiles(x86)或ProgramFiles目录下的Unity/Data/Resources/ScriptTemplates文件夹下进行同样的操作即可。

1

技巧二