Unity中用代码动态改变材质球贴图

首先先把贴图放在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++;
    }

勤做笔记,是个好习惯!

  • 23
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值