查看: 1247|回复: 0
打印 上一主题 下一主题

[其他] Unity3D技术之通过脚本修改源资源浅析

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-1-31 22:58:17 |只看该作者 |倒序浏览
通过脚本修改源资源自动实例化

如果要修改任何游戏资源,通常希望在运行时修改,且修改是暂时的。例如,如果角色获得了无敌状态,可能想更改材质 (material) 的着色器 (shader),以便玩家角色形象地展示无敌的状态。该操作包含修改正在使用的材质。这种修改不是永久性的,因为我们不希望退出播放模式 (Play Mode) 时材质的着色器不同。

但是,在 Unity 中编写脚本永久修改源资源是可行的。我们从上面的材质示例开始说起。

若要临时更改材质的着色器,可更改材质 (material) 组件中的着色器 (shader) 属性。

  1. private var invincibleShader = Shader.Find ("Specular");

  2.         function StartInvincibility {
  3.                 renderer.material.shader = invincibleShader;
  4.         }
复制代码

使用这段脚本并退出播放模式 (Play Mode) 时,材质 (material) 的状态将重置到最初进入播放模式 (Play Mode) 前的状态。出现这种情况是因为无论何时访问 renderer.material,材质都将自动实例化并返回实例。该实例自动、同时应用到渲染器中。所以可

根据自己的意愿进行更改,不必担心性能问题。


直接修改重要须知

下述方法将修改 Unity 中使用的真正源资源文件。这些修改无法撤销。请谨慎使用。

现在,假设我们不想退出播放模式时材质重置。要做到这一点,可使用 renderer.sharedMaterial。sharedMaterial 属性将返回该渲染器(和其他渲染器)使用的真正资源。

以下代码将永久更改高光 (Specular) 着色器使用的材质。不会将材质的状态重置到开始播放模式 (Play Mode) 前的状态。

  1. private var invincibleShader = Shader.Find ("Specular");

  2.         function StartInvincibility {
  3.                 renderer.sharedMaterial.shader = invincibleShader;
  4.         }
复制代码

可以看出,对 sharedMaterial 做出任何的更改既有用又危险。这些更改将是永久性的,无法撤销。


适用的类成员

上述相同公式可应用至材质以外的项目。符合该要求的完整资源列表如下:

  • 材质 (Materials):renderer.material 和 renderer.sharedMaterial
  • 网格 (Meshes):meshFilter.mesh 和 meshFilter.sharedMesh
  • 物理材质 (Physic Materials):collider.material 和 collider.sharedMaterial

直接指定

如果宣布一个以上任一类的公共变量:材质 (Materials)、网格 (Meshes) 或物理材质 (Physic Materials),并使用该变量而非相关的类成员修改资源,应用修改前不会获得自动实例化这一优势。


不自动实例化的资源 Desktop
有两种不同资源在修改时永远不会自动实例化。
  • Texture2D
  • TerrainData
通过脚本对这些资源所做的任何修改始终是永久性的,无法撤销。如果想通过脚本更改地形的高度图,就需要考虑实例化并自己指定值。纹理 (Textures) 也是如此。如果更改纹理文件的像素,那么这种更改是永久性的。

iOS
Texture2D 资源在修改时永远不会自动实例化。通过脚本对这些资源所做的任何修改始终是永久性的,无法撤销。如果更改纹理文件的像素,那么这种更改是永久性的。

Android
Texture2D 资源在修改时永远不会自动实例化。通过脚本对这些资源所做的任何修改始终是永久性的,无法撤销。如果更改纹理文件的像素,那么这种更改是永久性的。




分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-13 11:58 , Processed in 0.086245 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部