收藏 分享(赏)

花西子全域拆解:国潮美妆下的成功差异化.pdf

上传人:changyecao 文档编号:3798677 上传时间:2021-04-06 格式:PDF 页数:25 大小:2.01MB
下载 相关 举报
花西子全域拆解:国潮美妆下的成功差异化.pdf_第1页
第1页 / 共25页
花西子全域拆解:国潮美妆下的成功差异化.pdf_第2页
第2页 / 共25页
花西子全域拆解:国潮美妆下的成功差异化.pdf_第3页
第3页 / 共25页
花西子全域拆解:国潮美妆下的成功差异化.pdf_第4页
第4页 / 共25页
花西子全域拆解:国潮美妆下的成功差异化.pdf_第5页
第5页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、在同一个物体上的任何组件。function OnTriggerStay other : Collider / 如果另一个碰撞器附加了 OtherScript / 调用它上面的DoSomething / 大多数时候碰 撞器不会附加脚本/ 所以我们需要首先检查以避免null 引 用异常if other.GetComponentOtherScript other.GetComponentOtherScript.DoSomething 注意通过上述 例子中的other 变量你可以访问碰撞物体中的任何组件。5. 一种类型的所有脚本使用 Object.FindObjectsOfType 找到所 有 具 有

2、 相 同 类 或 脚 本 名 称 的 物 体 或 者 使 用 Object.FindObjectOfType. 找 到 这 个 类 型 的 第 一 个 物 体 。 function Start / 找到场景中附加了OtherScript 的任意一个游 戏物体var other : OtherScript FindObjectOfTypeOtherScript other.DoSomething 概览向量Unity 使用 Vector3 类同一表示 全体 3D 向量 3D 向量的不同组件可以通过想xy 和 z 成员变 量访问。var aPosition : Vector3 aPosition.x

3、 1 aPosition.y 1 aPosition.z 1 你也能够使用Vector3 构造函数来同时初始化 所有组件。var aPosition Vector31 1 1 Vector3 也定义了一些 常用的变量值。var direction Vector3.up / 与 Vector30 1 0 相 同单 个 向 量 上 的 操 作 可 以 使 用 下 面 的 方 式 访 问 someVector.Normalize 使 用 多 个 向 量 的 操 作 可 以 使 用 Vector3类 的 数theDistance Vector3.DistanceoneVector otherVecto

4、r 注意你必须在函数名之前写Vector3来告诉 JavaScript 在哪里找到这个函数这适用于所有类函数你也可 以使用普通数学操作来操纵向量。combined vector1 vector2 查看 Vector3 类文档获取完整操纵和可用属性的列表。概览 成员变量amp 全局变量变量定义在任何函数之外的变量 是一个成员变量。在Unity 中这个变量可以通过检视面板来 访问任何保存在成员变量中的值也可以自动随工程保存。 var memberVariable 0.0 上面的变量将在检视面板中显示为 名为 quotMember Variablequot 的数值属性。如果你设置变 量的类型为一个组

5、件类型例如Transform Rigidbody Collider 任何脚本名称等等然后你可以在检视面板中通过拖动一个 游戏物体来设置它们。var enemy : Transform function Update if Vector3.Distance enemy.position transform.position lt 10 printquotI sense the enemy is nearquot 你也可以创建私有成 员变量。私有成员变量可以用来存储那些在该脚本之外不可 见的状态。私有成员变量不会被保存到磁盘并且在检视面板 中不能编辑。当它被设置为调试模式时它们在检视面板中可 见。

6、这允许你就像一个实时更新的调试器一样使用私有变 量。private var lastCollider : Collider function OnCollisionEnter collisionInfo : Collision lastCollider collisionInfo.other 全局变量你也可以使用static 关键字创建 全 局 变 量这 创 造 了 一 个 全 局 变 量 名 为someGlobal / TheScriptName.js 中的一个静态变量static var someGlobal 5 / 你 可 以 在 脚 本 内 部 像 普 通 变 量 一 样 访 问 它

7、printsomeGlobal someGlobal 1 为了从另一个脚本访问它你 需 要 使 用 这 个 脚 本 的 名 称 加 上 一 个 点 和 全 局 变 量 名 。 printTheScriptName.someGlobal TheScriptName.someGlobal 10 Part3 概览实例化实例化复制一个物体。 包含所有附加的 脚本和整个层次。它以你期望的方式保持引用。到外部物体 引用的克隆层次将保持完好在克隆层次上到物体的引用映 射到克隆物体。实例化是难以置信的快和非常有用的。因 为最大化地使用它是必要的。例如 这里是一个小的脚本当 附加到一个带有碰撞器的刚体上时将销毁

8、它自己并实例化 一个爆炸物体。var explosion : Transform / 当碰撞发生时销 毁 我 们 自 己/ 并 生 成 给 一 个 爆 炸 预 设function OnCollisionEnter Destroy gameObject var theClonedExplosion : Transform theClonedExplosion Instantiateexplosion transform.position transform.rotation 实例化通常与预设一起 使用概览 Coroutines amp Yield 在编写游戏代码的时候常 常需要处理一系列事件。这

9、可能导致像下面的代码。private var state 0 function Update if state 0 / 做步骤 0 state 1 return if state 1 / 做步骤 1 state 2 return / 更方便的是使用yield 语 句。yield 语句是一个特殊类型的返回这个确保在下次调用时 该函数继续从该yield 语句之后执行。whiletrue / 做步骤 0 yield / 等待一帧/ 做步骤 1 yield / 等待一帧/ . 你也可以 传递特定值给yield 语句来延迟Update 函数的执行直到一个 特定的事件发生。/ 做一些事情yield Wai

10、tForSeconds5.0 / 等待 5 秒 /做更多事情 可以叠加和连接coroutines。 这 个例子执行Do 在调用之后立即继续。Do print quotThis is printed immediatelyquot function Do printquotDo nowquot yield WaitForSeconds 2 printquotDo 2 seconds laterquot 这个 例子将执行Do 并等待直到它完成才继续执行自己。/链接 coroutine yield StartCoroutinequotDoquot printquotAlso after 2 seco

11、ndsquot print quotThis is after the Do coroutine has finished executionquot function Do printquotDo nowquot yield WaitForSeconds 2 printquotDo 2 seconds laterquot 任何事件 处理句柄都可以是一个coroutine 注意你不能在Update 或 FixedUpdate 内使用 yield 但是你可以使用StartCoroutine 来开 始 一 个 函 数 。参 考YieldInstruction WaitForSeconds Wait

12、ForFixedUpdate Coroutine and MonoBehaviour.StartCoroutine获取更多使用yield 的信息。 概览用 C 编写脚本除了语法使用C 或者 Boo 编写脚本还有 一些不同。最需要注意的是1.从 MonoBehaviour 继承 所有 的行为脚本必须从MonoBehaviour继承直接或间接。在 Javascript 中这自动完成但是必须在C 或 Boo 脚本中显示申 明。如果你在 Unity 内部使用 Asset -gt Create -gt C Sharp/Boo Script 菜单创建脚本创建模板已经包含了必需的定义。 public cla

13、ss NewBehaviourScript : MonoBehaviour . / C class NewBehaviourScript MonoBehaviour: . Boo 2.使用 Awake 或 Start 函数来初始化Javascript 中放置在函数之外的代码在C 或 Boo 中要放置在Awake 或 Start 中。 Awake 和 Start 的不 同是Awake 在场景被加载时候运行而Start 在第一次调用 Update 或 FixedUpdate 函数之前被调用所有Awake 函数在任 何 Start 函数调用之前被调用。3.类名必须与文件名相同 Javascript

14、中类名被隐式地设置为脚本的文件名不包含文件 扩展名。在c 和 Boo 中必须手工做。4.在 C 中 Coroutines 有不同语法。Coroutines 必有一个IEnumerator 返回类型并 且yield使 用yield return 而 不 是yield using System.Collections using UnityEngine public class NewBehaviourScript : MonoBehaviour / C coroutine IEnumerator SomeCoroutine / 等一帧yield return 0 / 等两秒 yield retu

15、rn new WaitForSeconds 2 5不要使用命名空间目前 Unity还不支持将代码放置在一个命名空间中这个需要将会 出在未来的版本中。6.只有序列化的成员变量会显示在检视 面板中私有和保护成员变量只在专家模式中显示属性不被 序列化或显示在检视面板中。7 避免使用构造函数不要在 构造函数中初始化任何变量使用Awake 或 Start 实现这个目 的。即使是在编辑模式中Unity 也自动调用构造函数这通常 发生在一个脚本被编译之后因为需要调用构造函数来取向 一个脚本的默认值。构造函数不仅会在无法预料的时刻被调 用它也会为预设或未激活的游戏物体调用。单件模式使用 构造函数可能会导致严重

16、的后果带来类似随机null 引用异 常。因此如果你想实现如一个单件模式不要使用构造函数 而 是 使 用Awake 。 其 实 上 没 有 理 由 一 定 要 在 继 续 自 MononBehaviour 类的构造函数中写任何代码。概览最重要 的类 Javascript 中可访问的全局函数或C 中的基类移动 /旋 转物体动画系统刚体FPS 或第二人称角色控制器概览性 能优化1 使用静态类型在使用 Javascript时最重要的优化是 使用静态类型而不是动态类型Unity 使用一种叫做类型推理 的技术来自自动转换Javascript 为静态类型编码而不需要你 做任何工作。var foo5 在上面的

17、例子里foo 会自动被推断为 一个整型值。因此Unity 可能使用大量的编译时间来优化。 而不使用耗时的动态名称变量查找等。这就是为什么Unity 比其他在JavaScript 的实现平均快20 倍的原因之一。唯一 的问题是有时并非一切都可以做类型推断。Unity将会为这 些变量重新使用动态类型。通过回到动态类型编写JavaScript 代码很简单。但是这也使得代码运行速度较慢。让我们看 一 些 例 子function Start var foo GetComponentMyScript foo.DoSomething 这 里foo将 是 动 态 类 型 因 此 调 用 DoSomething

18、 函数将使用较长时间因为foo 的类型是未知的 它必须找出它是否支持DoSomething 函数如果支持调用它。 function Start var foo : MyScript GetComponentMyScript foo.DoSomething 这里我们强制foo 为指定类型你将获得更 好的性能。 2 使用 pragma strict 当然现在问题是你通常没有 意识到你在使用动态类型。pragma strict 解决了这个简单的 在脚本顶部添加pragma strict。然后 unity 将在脚本中禁用动 态类型强制使用静态类型如果一个类型未知。Unity将报告 编译错误。那么在这种

19、情况下foo 将在编译时产生一个错误 pragma strict function Start var foo GetComponentMyScript foo.DoSomething 3.缓存组件查找另一个优化是组件缓存。 不幸的是该优化需要一点编码并且不一定是值得的但是如 果你的脚本是真的用了很长时间了你需要把最后一点表现 出 来 这 是 一 个 很 好 的 优 化 。当 你 访 问 一 个 组 件 通 过 GetComponent 或访问变量 Unity 会通过游戏对象找到正确的 组件。这一次可以很容易地通过缓存保存在一个私有变量里 引 用 该 组 件 。简 单 地 把 这 个funct

20、ion Update transform.Translate0 0 5 变 成private var myTransform : Transform function Awake myTransform transform function Update myTransform.Translate0 0 5 后者的代码将运行快得 多因为 Unity 没有找到变换在每一帧游戏组件中的对象。这 同样适用于脚本组件在你使用GetComponent 代替变换或者 其它的东西。4.使用内置数组内置数组的速度非常快所以 请使用它们。而整列或者数组类更容易使用因为你可以很 容易地添加元素他们几乎没有相同的速

21、度。内置数组有一个 固定的尺寸但大多数时候你事先知道了最大的大小在可以 只填写了以后。关于内置数组最好的事情是他们直接嵌入在 一个结构紧凑的缓冲区的数据类型没有任何额外的类型信 息或其他开销。因此遍历是非常容易的作为一切缓存在内存 中的线性关系。private var positions : Vector3 function Awake positions new Vector3100 for var i0ilt100i positionsi Vector3.zero 5.如果你不需要就不要调用函数最简单的和所 有优化最好的是少工作量的执行。例如当一个敌人很远最完 美的时间就是敌人入睡时可以接

22、受。直到玩家靠近时什么都 没有做。这是种缓慢的处理方式的情况function Update / 早 期进行如果玩家实在是太遥远。if Vector3.Distancetransform.position target.position gt 100 return perform real work work. 这不是一个好主意因为Unity 必须 调用更新功能而你正在执行工作的每一个帧。一个比较好的 解决办法是禁用行为直到玩家靠近。有3 种方法来做到这一 点 1.使用 OnBecameVisible 和 OnBecameInvisible 。 这些回调 都 是 绑 到 渲 染 系 统 的 。

23、只 要 任 何 相 机 可 以 看 到 物 体 OnBecameVisible将 被 调 用 当 没 有 相 机 看 到 任 何 一 个 OnBecameInvisible 将被调用。 这种方法在很多情况下非常有 用但通常在AI 中并不是特别有用因为只要你把相机离开他 们敌人将不可用。function OnBecameVisible enabled true function OnBecameInvisible enabled false 2. 使用触发器。一个 简单的球形触发器会工作的非常好。一旦你离开这个影响球 你将得到 OnTriggerEnter/Exit 调用。 function O

24、nTriggerEnter c : Collider if c.CompareTagquotPlayerquot enabled true function OnTriggerExit c : Collider if c.CompareTagquotPlayerquot enabled false 3.使用协同程序。 Update 调用的问题是它们每帧中都发生。很可能会只需要每 5 秒检检查一次到玩家的距离。这应该会节省大量的处理周 期。概览脚本编译高级Unity编译所有的脚本为.NET dll 文件 .dll 将在运行时编译执行。这允许脚本以惊人的速度执 行。这比传统的javascript

25、快约 20 倍。比原始的C 代码慢大 约 50。在保存的时候Unity 将花费一点时间来编译所有脚本 如果 Unity 还在编译。你可以在Unity 主窗口的右下角看到 一个小的旋转进度图标。脚本编译在4 个步骤中执行1.所 有在 quotStandard Assetsquot quotPro Standard Assetsquot 或 quotPluginsquot 的脚本被首先编译。在这些文件夹之内的脚 本不能直接访问这些文. . 8 图 7:智能马桶一体机零售额及同比增速 . 9 图 8:智能马桶一体机零售量及同比增速 . 9 图 9:智能马桶盖零售额及同比增速 . 9 图 10:智能马桶盖零售量及同比增速 . 9 图 11:日本及欧美品牌占据我国卫浴行业中高端地位 . 10 图 12:精装智能坐便器市场部品配套率 .11 图 13:2017-2019 年精装修坐便器 TOP5 品牌合计份额走势 .11 图 14:2016-2019 年精装修卫浴市场国内外品牌份额走势 . 12 图 15:精装智能坐便器市场开发商结构份额分析 . 13 图 16:2020 年精装智能坐便器市场 50 强开发商配套率 . 13 图 17:2020 年 TOP10 开发商精装智能坐便器配套率 .

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 市场分析

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报