当前位置: 首页 Unity开发

【Unity-UI-Extensions】UIFlippable翻转图形组件

时间:2023年05月20日 阅读:595
以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!
淘客轩-衣食住行外卖生活好助手

【Unity-UI-Extensions】UIFlippable翻转图形组件 - MOMO教程

【Unity-UI-Extensions】UIFlippable翻转图形组件 - MOMO教程

具体实现代码

/// Credit ChoMPHi
/// Sourced from - http://forum.unity3d.com/threads/script-flippable-for-ui-graphics.291711/

namespace UnityEngine.UI.Extensions
{
  [RequireComponent(typeof(RectTransform), typeof(Graphic)), DisallowMultipleComponent]
  [AddComponentMenu("UI/Effects/Extensions/Flippable")]
  public class UIFlippable : BaseMeshEffect
  {
    [SerializeField] private bool m_Horizontal = false;
    [SerializeField] private bool m_Veritical = false;

#if UNITY_EDITOR
    protected override void Awake()
    {
      OnValidate();
    }
#endif

    /// <summary>
    /// Gets or sets a value indicating whether this <see cref="UnityEngine.UI.UIFlippable"/> should be flipped horizontally.
    /// </summary>
    /// <value><c>true</c> if horizontal; otherwise, <c>false</c>.</value>
    public bool horizontal
    {
      get { return this.m_Horizontal; }
      set { this.m_Horizontal = value; }
    }

    /// <summary>
    /// Gets or sets a value indicating whether this <see cref="UnityEngine.UI.UIFlippable"/> should be flipped vertically.
    /// </summary>
    /// <value><c>true</c> if vertical; otherwise, <c>false</c>.</value>
    public bool vertical
    {
      get { return this.m_Veritical; }
      set { this.m_Veritical = value; }
    }

    public override void ModifyMesh(VertexHelper verts)
    {
      RectTransform rt = this.transform as RectTransform;

      for (int i = 0; i < verts.currentVertCount; ++i)
      {
        UIVertex uiVertex = new UIVertex();
        //填充UV顶点
        verts.PopulateUIVertex(ref uiVertex, i);

        // Modify positions 对称操作
        uiVertex.position = new Vector3(
          (this.m_Horizontal ? (uiVertex.position.x + (rt.rect.center.x - uiVertex.position.x) * 2) : uiVertex.position.x),
          (this.m_Veritical ? (uiVertex.position.y + (rt.rect.center.y - uiVertex.position.y) * 2) : uiVertex.position.y),
          uiVertex.position.z
        );

        // Apply
        verts.SetUIVertex(uiVertex, i);
      }
    }

#if UNITY_EDITOR
    protected override void OnValidate()
    {
      var components = gameObject.GetComponents(typeof(BaseMeshEffect));
      foreach (var comp in components)
      {
        if (comp.GetType() != typeof(UIFlippable))
        {
          UnityEditorInternal.ComponentUtility.MoveComponentUp(this);
        }
        else break;
      }
      //重新绘制顶点
      this.GetComponent<Graphic>().SetVerticesDirty();
      base.OnValidate();
    }
#endif
  }
}

请赞赏

朋友,创作不易;为犒赏小编的辛勤劳动,请她喝杯咖啡吧!

给她赞赏,您将财运亨通


打赏
标签: UIFlippable Unity

本文地址:https://www.momojc.cn/unity/unity-ui-e0xp.html

相关推荐
支付宝领大额红包
支付宝领大额红包
似水流年
    今日已经过去小时
    这周已经过去
    本月已经过去
    今年已经过去个月
小姐姐视频

关于本站 | 隐私政策 | 免责声明 | 广告合作 | 我要投稿 | 后台管理

CopyRight © 2023-2024 MOMO教程 WWW.MOMOJC.CN , All Rights Reserved.

站长E-mail:378074730@qq.com 网站已运行:  运行时长:0.023 秒

京ICP备20029690号-1京ICP备20029690号-2 京公网安备11011402013892号京公网安备11011402013892号 中国互联网违法和不良信息举报中心 网络违法犯罪举报网站

本网站托管于 腾讯云 .由网站卫士提供网站加速和攻击防御服务 提供CDN加速/防御服务.由zblogcn强力驱动 又拍云提供CDN加速/云存储服务 51la网站统计