Unity中实现UI翻转
Posted Hello Bug.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity中实现UI翻转相关的知识,希望对你有一定的参考价值。
一:效果演示
二:使用
FlipType:翻转类型(水平翻转、竖直翻转、水平竖直翻转)
三:为什么不使用将Scale设置为-1
将Scale的x、y设置为-1也可以实现翻转的效果,但是这样还会影响到子物体以及animation,所以最佳的方法是修改图片的显示,我们可以继承UGUI提供的网格效果基类BaseMeshEffect修改网格顶点去实现翻转效果
四:代码实现
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
/// <summary>
/// 翻转
/// </summary>
/// 与将Scale设置为-1效果相同
[DisallowMultipleComponent]
[RequireComponent(typeof(RectTransform))]
[AddComponentMenu("LFramework/UI/Effects/Flip")]
public class Flip : BaseMeshEffect
/// <summary>
/// 翻转类型
/// </summary>
public enum EFlipType
Horizontal,
Vertical,
HorizontalAndVertical,
//翻转类型
[SerializeField]
EFlipType m_FlipType;
public EFlipType FlipType
get
return m_FlipType;
set
m_FlipType = value;
graphic.SetVerticesDirty();
//顶点缓存
List<UIVertex> vertexCache = new List<UIVertex>();
public override void ModifyMesh(VertexHelper vh)
vh.GetUIVertexStream(vertexCache);
vh.Clear();
ApplyFlip(vertexCache, graphic.rectTransform.rect.center);
vh.AddUIVertexTriangleStream(vertexCache);
vertexCache.Clear();
void ApplyFlip(List<UIVertex> vertexCache, Vector2 pivot)
int vertexCount = vertexCache.Count;
for (int i = 0; i < vertexCount; i++)
UIVertex veretx = vertexCache[i];
if (m_FlipType == EFlipType.HorizontalAndVertical)
veretx.position.x = 2 * pivot.x - veretx.position.x;
veretx.position.y = 2 * pivot.y - veretx.position.y;
else if (m_FlipType == EFlipType.Horizontal)
veretx.position.x = 2 * pivot.x - veretx.position.x;
else if (m_FlipType == EFlipType.Vertical)
veretx.position.y = 2 * pivot.y - veretx.position.y;
vertexCache[i] = veretx;
以上是关于Unity中实现UI翻转的主要内容,如果未能解决你的问题,请参考以下文章