1 项目基本情况介绍
在本项目中一共有3个Canvas(画布)
第一个Canvas是在Screen Space - Overlay 中的image,带有button控件(如图1.1所示)
第二个Canvas也是在Screen Space - Overlay 中的image,此image会跟着鼠标移动,可以理解为鼠标光标(如图1.2所示)
第三个Canvas是在World Space下的image,带有button控件(如图1.3所示)
图1.1 | 图1.2 | 图1.3 |
本项目将一段代码(changeMenuColor.cs),并将此代码赋予给了一个GameObject。
之后再将此GameObject赋予了图1.1与图1.3中Button组件中的OnClick()函数中,如图1.4所示。
图1.4 |
changeMenuColor.cs的代码如下所示:
//changeMenuColor.cs
//点击按钮时,输出“点击按钮”
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class changeMenuColor : MonoBehaviour
{
public void Click()
{
print("点击按钮");
}
}
2 问题简述
在进行代码测试时,我们发现图1.1中的image点击后会在Console输出“点击按钮”
而图1.3中的image在被点击后并没有输出“点击按钮”
这说明图1.1中的image被点击了,而图1.3中的image并没有被检测到点击。
3 解决方案
我对比了图1.1、图1.2、图1.3中的Canvas设置,如图3.1、图3.2、图3.3所示。
发现他们的Sort Order都为0
这意味着如果两个图片重叠时,位于后面的图片将无法检测到点击。
就如本项目中,鼠标光标(图1.2)会随着鼠标移动,当鼠标点击图1.3的图片时,图1.2与图1.3的图片会产生重叠现象,所以图1.3的image就可能无法检测到点击事件
图3.1 | 图3.2 | 图3.3 |
所以,我将鼠标光标(图1.2)所在的Canvas的Sort Order改为1(如图3.4),改变其渲染次序,即可解决问题。