首先先把贴图放在Resources文件夹下,或者新建一个文件夹,便于管理。
并命好名,方便遍历。
创建脚本,挂在要动态改变的物体上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
*
* Writer:June
*
* Date: 2019.9.11
*
* Function:随时间动态改变高光贴图
*
* Remarks:
*
*/
public class ChangeLightingTexture : MonoBehaviour
{
/// <summary>
/// 计时器
/// </summary>
private float timer;
/// <summary>
/// 渲染网格
/// </summary>
private MeshRenderer meshRenderer;
/// <summary>
/// 贴图数组
/// </summary>
private Texture[] texture;
/// <summary>
/// Resource文件夹下的子文件夹名
/// </summary>
private string materialTexture = "MaterialTexture";
/// <summary>
/// 贴图数量
/// </summary>
private int textureCount = 3;
/// <summary>
/// 一开始循环的索引
/// </summary>
private int index = 0;
/// <summary>
/// 切换时间
/// </summary>
private float changeTime = 0.5f;
private void Start()
{
timer = 0;
meshRenderer = GetComponent<MeshRenderer>();
//定义获取贴图的数量
texture = new Texture[textureCount];
//动态加载贴图
for (int i = 0; i < texture.Length; i++)
{
texture[i] = Resources.Load(materialTexture + "/Texture" + (i + 1)) as Texture;
}
}
private void Update()
{
timer += Time.deltaTime;
if (timer >= changeTime)
{
timer = 0;
//将贴图赋给材质球的properties属性
meshRenderer.material.SetTexture("_Emission", texture[index]);
//循环索引
index = (index + 1) % texture.Length;
}
}
}
shader中的属性:
效果:(别在意灯的变换样式,看灯的颜色变化)
另外记一下循环索引的常用方式
/// <summary>
/// 循环数组索引方式
/// </summary>
/// <param name="index">索引</param>
/// <param name="arr">数组</param>
void LoopIndex(ref int index,int[] arr)
{
//**************** 1 ******************
//index = index < arr.Length - 1 ? ++index : 0; //注意区别index++和++index
//**************** 2 ******************
//index = (index + 1) % arr.Length;
//**************** 3 ******************
if (index >= arr.Length - 1) index = 0;
else index++;
}
勤做笔记,是个好习惯!