|
自动实例化
通常当你想修改任何游戏资产,你希望它发生在运行时,你希望它是暂时的。例如,如果你的性格,拿起一个无敌的电,你可能想改变着色器的材料为玩家直观地展示了无敌状态。这一行动涉及修改正在使用的材质。这样的修改是不是永久性的因为我们不想要的物质有不同的着色器,我们出去的时候播放模式。
然而,写脚本,将永久地修改源资产统一是可能的。让我们用上述材料的例子为出发点。
要暂时改变材质的着色器,我们改变着色器财产的材料组件
private var invincibleShader = Shader.Find ("Specular");
function StartInvincibility {
renderer.material.shader = invincibleShader;
}
当使用这个脚本,退出播放模式的国家,材料将被重置为无论是最初进入播放模式之前。这是因为每当renderer.material访问、材料自动实例化并返回实例。这个实例是同时并自动应用到渲染器。所以你可以让你的心的欲望没有恐惧的持久性的任何变化。
直接修改
重要注意事项
下面介绍的方法修改实际的源文件内使用统一的资产。这些修改是不可撤销的。小心使用。
现在让我们说,我们不想重置材质当我们退出播放模式。为此,您可以使用renderer.sharedmaterial。的sharedmaterial属性将返回这个渲染器使用的实际资产(或者其他)。
下面的代码将永久改变材料使用镜面材质。它不会重置材质前的状态模式。
private var invincibleShader = Shader.Find ("Specular");
function StartInvincibility {
renderer.sharedMaterial.shader = invincibleShader;
}
正如你可以看到,一个sharedmaterial做出任何改变,可能是有用的和危险的。一个sharedMaterial所做的任何更改将是永久性的,不可撤销的。
适用于类成员
上述公式可以应用到的不仅仅是材料。资产按照本公约的完整列表如下:
材料:renderer.material和renderer.sharedmaterial
目:meshfilter.mesh和meshfilter.sharedmesh
物理材料:collider.material和collider.sharedmaterial
直接分配
如果你声明一个公共变量:任何级以上材料,网格,或物理材料,并使用该变量而不是使用相关的类成员的资产进行修改,你将不会修改之前应用接收自动实例化的好处。
不自动实例化的资产
有两种不同的资产,不会自动实例化时修改它们。
Texture2D
地形数据
任何修改过的这些资产通过脚本都是永久的,不可撤销的。所以如果你通过脚本改变地形的高度图,你需要考虑实例化,并在你自己的赋值。同样的纹理。如果你改变一个纹理文件的像素,变化是永恒的。
iOS和Android的笔记
Texture2D资产不会自动实例化时修改他们在iOS和Android项目。任何修改过的这些资产通过脚本都是永久的,不可撤销的。所以,如果你改变一个纹理文件的像素,变化是永恒的。
|
|