unity多个物体多种材质切换效果实现方法(方法比较笨,还有不足之处多多指导)

本文介绍了在Unity中实现多个物体多种材质切换的方法,通过获取MeshRenderer组件上的材质球并创建新材质数组来实现切换。具体步骤包括导入模型、观察材质球、编写ChangMat.cs脚本、创建按钮及事件绑定,最终实现棋盘和棋子的材质切换效果。
摘要由CSDN通过智能技术生成

多种材质切换:获取物体的MeshRenderer组件上所有的材质球,并将其存放到数组中;创建另一个数组存放需要新材质球,通过循环遍历将将需要替换的材质球存放在创建好的数组内。 比如说同时给象棋的棋盘和棋子切换不同材质,具体步骤如下: 1.分别导入棋盘、棋子模型;黑方归一类,红方归一类,如图所示:

2.观察模型的材质,比如说,黑棋的第一个元素对应的是black材质球,第二个元素对应的是qizi材质球;红棋的第一个元素对应的是qizi材质球,第二个元素对应的是red材质球;棋盘的第一个元素对应的是棋盘线的black材质球,第二个元素对应的是qipan材质球。

3.创建ChangMat.cs脚本,具体代码如下: 我使用按钮点击进行切换,所以大家一定不要忘记添加using UnityEngine.UI;

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ChangeMat : MonoBehaviour
{

    public GameObject obj;    // 获取物体
    MeshRenderer meshRender;        //获取组件
    public Button Button;    //获取需要点击的按钮

    //需要替换的材质球
    public Material outsideMat;
    public Material insideMat;

    Material[] matArray;        //存放对象身上材质球数组
    Material[] TsetArray;      //存放需要替换的材质球数组


    private void Awake()
    {
        meshRender = obj.GetComponent<MeshRenderer>();
        matArray = meshRender.materials;     //拿到对象身上的所有材质球
    }

    void Start()
    {
        TsetArray = new Material[matArray.Length];
        for (int i = 0; i < matArray.Length; i++)
        {
            TsetArray[i] = outsideMat; //将需要替换的材质球存放在创建好的数组内
            i++;
            TsetArray[i] = insideMat;
        }

        Button.onClick.AddListener(OnStartButtonClick);//监听点击事件
    }

    public void OnStartButtonClick()
    {
        meshRender.materials = TsetArray;
    }
}

4.创建三个切换按钮,根据需求创建多个空对象。每个模型创建对应的一个空对象并对其添加ChangMat.cs脚本,然后将三个模型的空对象作为一组

5.参照上一步骤,重复操作,但是要注意,将材质替换成所需材质

 

6.给三个按钮添加对应的点击事件

  

7.实现效果如图所示:

 参考:unity 对象存在多个材质球进行替换

(若有侵权,私聊删除)

要在 Unity 中动态增加物体材质,可以通过以下步骤实现: 1. 创建新材质:在 Unity 中,可以通过 Assets 菜单中的 Create -> Material 创建新的材质。也可以在项目中选择一个已有的材质,然后在 Inspector 窗口中点击右键,选择 Duplicate 创建一个新的材质。 2. 修改材质属性:在新创建的材质中,可以修改其属性,比如颜色、贴图等。 3. 将材质应用到物体:在场景中选择需要应用材质物体,然后在 Inspector 窗口中找到其 Renderer 组件,在其中的 Materials 数组中增加一个新的材质。 下面是一个简单的示例脚本,实现了动态增加物体材质的功能: ```csharp using UnityEngine; public class AddMaterial : MonoBehaviour { public Material material; // 新增加的材质 void Start() { // 在场景中找到物体的 Renderer 组件 Renderer renderer = GetComponent<Renderer>(); // 将新增加的材质应用到物体的 Renderer 组件上 Material[] materials = renderer.materials; Material[] newMaterials = new Material[materials.Length + 1]; for (int i = 0; i < materials.Length; i++) { newMaterials[i] = materials[i]; } newMaterials[newMaterials.Length - 1] = material; renderer.materials = newMaterials; } } ``` 在这个脚本中,我们先在 Inspector 窗口中将需要新增加的材质赋值给 material 变量,然后在 Start 函数中将其应用到物体的 Renderer 组件上。具体来说,我们首先获取物体的 Renderer 组件,然后将原有的材质数组复制到一个新的数组中,并在新数组的末尾添加新增加的材质,最后将新数组赋值给物体的 Renderer 组件的 materials 属性。这样,物体就会显示出新增加的材质
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值