本文重点内容: 1、构建时钟 2、写C#脚本 3、旋转时钟指针来展示时间 4、指针动画
本教程是CatLikeCoding系列的一部分,原文地址见文章底部。
哪些Unity版本合适? Unity每年发布多个新版本。有两个并行的发布时间表。最稳定和安全的是LTS版本,它表示长期支持,对于Unity来说,这是两年。我的教程坚持使用LTS版本,其中最新版本为2019.4。本教程专门使用2019.4.10。版本号的第三部分表示补丁程序发行。修补程序版本包含错误修复,只有很少的新功能。另一个f1后缀表示正式的最终版本。本教程将使用任何2019.4版本。
是否可以使用其他渲染管线创建项目? 可以,唯一的区别是该项目在其默认场景中将包含更多内容,并且你的材质将有所不同。你的项目还将包含适当的程序包。
是否有理由使用伽玛色彩空间? 仅当您针对旧硬件或旧图形API时。OpenGL ES 2.0和WebGL 1.0不支持线性空间,此外,在旧的移动设备上,伽玛比线性空间快。
如何浏览场景窗口? 可以结合使用alt键或Option键和光标来旋转视图。还可以使用箭头键移动视点,并通过滚动进行缩放。同样,按F键可将视图聚焦在当前选定的对象上。还有更多可能性,但是这些足以在现场找到自己的方式。
眼睛旁边的手状图标有什么作用? 这样就无法通过场景窗口选择游戏对象,同时又保持可见。
2D对象呢? 使用2D而不是3D时,可以忽略三个尺寸之一。专门用于2D的对象(如UI元素)通常具有RectTransform,这是专门的Transform组件。
为什么我的圆柱体看起来更暗? 如果圆柱体的阴影面为纯黑色,可能是环境照明的automatic generation被关闭了。要启用它,请通过Window/ Rendering / Lighting Settings打开照明窗口,然后打开Scene页签底部的Auto Generate开关。
什么是反照率? 反照率是一个拉丁词,意为白色。当被白光照射时,它就是某种东西的颜色。
这些数字从哪里来的? 每个小时沿Z轴顺时针旋转30°。在这种情况下,我们使用负旋转,因为Unity的旋转是逆时针方向。然后通过三角函数找到小时1的位置。sin30等于1/2,而cos为√3/2。我们用小时指示器与中心的距离来衡量,也就是4,就是√3/2*4 ≈3.464。对于第2小时,旋转角度为60°,为此,我们可以简单地将正弦和余弦互换。
什么是class? 可以将类视为可用于创建驻留在计算机内存中的对象的蓝图。蓝图定义了这些对象包含哪些数据以及它们具有什么功能。
类的默认访问修饰符是什么? 没有access修饰的话符,就会被当做一个内部类。这将限制从同一程序集的代码访问,当你使用打包在单独程序集中的代码时,这将变得很重要。为确保其始终有效,默认情况下将类设为public。
mono-behavior是什么意思? 这表示我们可以对自己的组件进行编程,以向游戏对象添加自定义行为。这就是behavior部分所指的意思。但这是使用英式拼写就很奇怪。mono部分是指将对自定义代码的支持添加到Unity的方式。它使用了Mono项目,该项目是.NET框架的多平台实现。因此,MonoBehaviour。这是一个旧名称,由于向后兼容,我们一直持续使用。
什么是命名空间? 命名空间类似于网站域,但用于代码。就像域可以具有子域一样,名称空间也可以具有子命名空间。最大的不同是它是用相反的方式编写的。因此,它不是http://forum.unity.com,而是com.unity.forum。命名空间用于组织代码并防止名称冲突。 Unity自带了包含UnityEngine代码的程序集,你不需要单独在网上获取它。代码编辑器使用的项目文件应该自动设置以识别它。
using语句去了哪里? 它仍然在那里,我只是没有展示。这些代码片段将包含足够的现有代码,目的是为了突出更改的上下文。
可以将其设置为Public吗? 可以,但是公开公开访问类字段通常是不好的形式。经验法则是仅在其他类型的C#代码需要访问类内容时才公开类内容,然后优先于字段使用方法或属性。越难访问的东西越容易维护,因为可以直接依赖它的代码更少。在本教程中,我们唯一的C#代码是Clock,因此没有理由公开其内容。
//有什么用? 双斜杠表示注释。编译器将忽略它们直到行尾的所有文本。如果需要,它用于添加文本以解释代码。我还使用它来指示已删除的代码。除此之外,已删除的代码还有一行。
Awake不是必须Public吗? Awake和一些其他的方法集合被视为特殊的Unity事件方法。无论我们如何声明它们,Unity引擎都会找到它们并在适当的时候调用它们。这是从托管的.NET环境外部发生的。
什么是属性? 属性是一种伪装成字段的方法。它可能是只读或只写的。C#约定是大写属性,但是Unity的代码没有这样做。
什么是四元数? 四元数基于复数,用于表示3D旋转。尽管比单独的X,Y和Z旋转角度的组合更难理解,但它们具有一些有用的特性。例如,他们不会遭受万向节锁定(gimbal lock)的困扰。
什么是结构体? 结构(structure的缩写)是一个蓝图,就像一个类一样。区别在于它创建的任何内容均被视为简单值(例如整数或颜色),而不是对象。它没有身份感(sense of identity)。定义自己的结构与定义类的作用相同,只不过你写的是struct而不是class。
localRotation和旋转之间有什么区别? localRotation属性单独表示由Transform组件描述的旋转,因此是相对于其父级的旋转。这是你在检查器中看到的旋转。相反,rotation属性表示世界空间中的最终旋转,同时考虑了整个对象层次。如果将时钟整体旋转,则设置该属性会产生奇怪的结果,因为指针会忽略该属性,因为该属性会补偿时钟的旋转。
什么是浮点? 计算机不能存储所有数字,它们必须在二进制存储器中可表示,二进制存储器由0或1的位组成。这使得无法在有限的存储器大小(例如)内精确地存储许多数字,就像我们不能 用十进制符号精确地写那个数字。我们能做的最好的就是写0.3333333并在某个时候停止。
const值有什么特别之处? const关键字指示值永远不会改变,并且不必是字段。取而代之的是,它将在编译期间计算其值,并替换该常量的所有用法。这仅适用于基本类型(例如数字)。
什么是变量? 变量的作用类似于字段,只是它仅在执行方法时存在。它属于方法,而不是类。
什么是帧? 在播放模式下,Unity会从主摄像机的角度连续渲染场景。渲染完成后,结果将显示在显示器上。然后显示屏将显示该帧,直到获得下一帧为止。在渲染新帧之前,所有内容都会更新。因此,Unity经历了一系列的更新,渲染,更新,渲染等等。通常,将单个更新步骤随后渲染一次场景视为一个帧,尽管实际上,时间安排更为复杂。
单精度够吗? 对于大多数游戏,够了。当使用非常大的距离或比例差异时,这将成为一个问题。然后,你必须应用远距传送或相对于相机的渲染之类的技巧,以使活动区域保持在世界原点附近。尽管使用双精度可以解决此问题,但也会使所涉及数字的内存大小加倍,从而导致其他性能问题。游戏引擎通常使用单精度浮点值,GPU也是如此。
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )
GMT+8, 2025-1-16 18:50 , Processed in 0.099433 second(s), 26 queries .
Powered by Discuz! X3.5 Licensed
© 2001-2024 Discuz! Team.