700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Unity中用代码动态改变材质球贴图

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

时间:2023-04-29 22:43:40

相关推荐

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

首先先把贴图放在Resources文件夹下,或者新建一个文件夹,便于管理。

并命好名,方便遍历。

创建脚本,挂在要动态改变的物体上。

using System.Collections;using System.Collections.Generic;using UnityEngine;/** * Writer:June* * Date: .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 stringmaterialTexture= "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++;}

勤做笔记,是个好习惯!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。