(一)踩坑过程
前四次对比,都“可耻的失败了”:直接对比材质,发现行不通,于是想着对比它们的名字,在对比名字时踩坑——打印发现控制台输出的模型材质名字,带(Instance)
,加上后还不办事,再仔细观察,发现名字和(Instance)
间,有空格,如下图
(二)测试场景
立方体给它加了自建的——originMat
材质球
(三)立方体上的脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CompareMaterial : MonoBehaviour
{
public Material originMat;
// Start is called before the first frame update
void Start()
{
//测试一,直接对比
//if(gameObject.GetComponent<MeshRenderer>().material==originMat)
//{
// Debug.Log("对比成功");
//}
//else
//{
// Debug.Log("可耻的失败了");
//}
//测试二,调取材质数组,进行对比
//Material[] cubeMatArr = gameObject.GetComponent<MeshRenderer>().materials;
//for (int i = 0; i < cubeMatArr.Length; i++)
//{
// if (cubeMatArr[i]==originMat)
// {
// Debug.Log("对比成功");
// }
// else
// {
// Debug.Log("可耻的失败了");
// }
//}
//测试三,对比名字
//if (gameObject.GetComponent<MeshRenderer>().material.name == "originMat")
//{
// Debug.Log("对比成功");
//}
//else
//{
// Debug.Log("可耻的失败了");
//}
Debug.Log(gameObject.GetComponent<MeshRenderer>().material.name);
//测试四,对比控制台打印出的名字
//if (gameObject.GetComponent<MeshRenderer>().material.name == "originMat(Instance)")
//{
// Debug.Log("对比成功");
//}
//else
//{
// Debug.Log("可耻的失败了");
//}
//测试五,对比控制台打印出的名字
if (gameObject.GetComponent<MeshRenderer>().material.name == "originMat (Instance)")
{
Debug.Log("对比成功");
}
else
{
Debug.Log("可耻的失败了");
}
}
// Update is called once per frame
void Update()
{
}
}
(四)总结
遇到Bug不要慌,
(1)隔离测试——把最关键的问题,简化成一个小案例
(2)尝试能想到的方法
(3)仔细观察打印的结果