Unity3D 创建动态的立方体图系统
这一篇主要是利用上一篇的Shader,通过脚本来完成一个动态的立方体图变化系统。
准备工作如下:
A:下面开始编写脚本:
//2个立方体图;
public Cubemap cubeMapA;
public Cubemap cubeMapB;
//2个参考位置Empty1,2;
public Transform posA;
public Transform posB;
private Material tempMat;
private Cubemap tempCubeMap;
private int times = 0;
B:为了方便观测Empty1,2的位置,我们使用OnDrawGizmos函数来绘制对象:
void OnDrawGizmos() {
Gizmos.color = Color.green;
if(posA){
Gizmos.DrawWireSphere(posA.position,5);
}
if(posB){
Gizmos.DrawWireSphere(posB.position,5);
}
}
C:创建一个新的函数来决定在不同的位置我们应该使用哪个Cubemap
private Cubemap GetUseCubeMap() {
float lengthA = Vector3.Distance(transform.position,posA.position);
float lengthB = Vector3.Distance(transform.position,posB.position);
if(lengthA>lengthB){
return cubeMapB;
}
else if (lengthA < lengthB)
{
return cubeMapA;
}
else {
return cubeMapA;
}
}
D:在Update函数中进行赋值
void Update () {
times++;
if(times%20==0){//避免每一帧都计算;
tempMat = renderer.sharedMaterial;
if (tempMat)
{
tempCubeMap = GetUseCubeMap();
tempMat.SetTexture("_CubeMap", tempCubeMap);
}
times = 0;
}
}
保存脚本,返回Unity编辑器。点击Play按钮,并前后左右移动球体。你将会看到类似下面的效果:
通过上面简单的代码,我们可以看出程序会固定帧数为一个时间段来判断球体和2个参考位置的间距来计算自身使用哪一种cubemap,再把cubemap赋值给自己。这样就完成了简单的变换。
原文:http://www.cnblogs.com/2Yous/p/4238392.html