我正在使用UGUI制作新手指南,引导人们玩我的游戏。
并且需要整个UI成为掩模,但需要点亮一些矩形区域。
怎么办?
答案 0 :(得分:0)
创建一个新的游戏对象并向其添加图像组件。创建一个图像,其中包含您希望ui可见的透明区域。将该图像分配给图像组件。然后添加一个遮罩组件
答案 1 :(得分:0)
//使物体变亮
GameObject按钮= GameObject.Find(“PlayButton”);
Tansform oldParent = button.transform.parent;
button.transform.SetParent(BrightRoot,true);//再次使它变暗
button.transform.SetParent(oldParent,true);
完美的解决方案是编写一个UI着色器,使某些矩形外的任何像素变暗并使内部变亮。然后将该着色器设置为所有UI对象。
<强> Editted:强>
这只是另一种简单方法,使用UI顶点效果。只需要实现IsPointInsideClipRect,将此组件放入UI对象,并设置矩形列表:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
[AddComponentMenu("UI/Effects/Clip")]
public class Clip : BaseVertexEffect
{
// We need list of rectangles here - can be an array of RectTransform
public RectTransform[] ClipRects;
public override void ModifyVertices(List<UIVertex> vertexList)
{
if (!IsActive())
{
return;
}
bool isClipped = true;
for (int i = 0; i < count; i++)
{
UIVertex uiVertex = vertexList[i];
foreach (RectTransform rect in ClipRects)
{
if (IsPointInsideClipRect(rect, uiVertex.position))
{
isClipped = false;
break;
}
}
}
Color32 color = isClipped ? new Color32(0.5f, 0.5f, 0.5f, 0.5f) : new Color(1.0f, 1.0f, 1.0f, 1.0f);
for (int i = 0; i < count; i++)
{
UIVertex uiVertex = vertexList[i];
uiVertex.color = color;
}
}
private static bool IsPointInsideClipRect(RectTransform rect, Vector3 position)
{
// ...
}
}