前言:

最近需要做装备合成树,类似于王者荣耀的那种直来直去的合成线。大概类似于下图:

然后王者荣耀这个合成树的画法是只显示相邻的合成关系,而不相邻的列之间的合成关系不显示。比如在第三列的装备A由第二列的装备B、C和第一列的装备D合成,那么只绘制A与B、C的关系,D与A之间则没有连接线。先暂且不讨论这是不是最优的解决方案,我们可以作为参考来制作自己的装备合成树。

下面开始弄装备合成树。

正文:

1、一条能自适应的折线

首先需要一条自适应的折线,他能根据起点和终点的位置自动适应。 我们分析这条线由3部分组成:左边横线、中间竖线、右边横线。我的预计效果如下:

具体步骤为:先制作一个预制,其包含三根线。

分别设置好其锚点和中心点(Pivot):

TreeLine           锚点:左上,中心点:(0,1);

LineLeft            锚点:左上,中心点:(0,1);

LineMiddle        锚点:左中,中心点:(0.5,0.5);

LineRight          锚点:右下,中心点:(1,0);

之后给TreeLine添加一个脚本:

    using UnityEngine;using UnityEngine.UI;/// <summary>/// 左侧线/// </summary>public Image LineLeft;/// <summary>/// 中间线/// </summary>public Image LineMiddle;/// <summary>/// 右侧线/// </summary>public Image LineRight;/// <summary>/// 左侧线的占比;/// </summary>[Range(0, 1)]public float LeftRatio = 0.5f;/// <summary>/// 设置线;/// </summary>public void SetLines(){float x = (transform as RectTransform).sizeDelta.x;float y = (transform as RectTransform).sizeDelta.y;//先编辑左右两端的长度;LineLeft.rectTransform.sizeDelta = new Vector2(Mathf.Abs(x * LeftRatio), 5);LineRight.rectTransform.sizeDelta = new Vector2(Mathf.Abs(x * (1 - LeftRatio)), 5);//中间线长度;LineMiddle.rectTransform.anchoredPosition = new Vector2(x * LeftRatio, 0);LineMiddle.rectTransform.sizeDelta = new Vector2(5, Mathf.Abs(y));//设定反转;LineLeft.transform.localScale = new Vector3(x > 0 ? 1 : -1, y > 0 ? 1 : -1, 1);LineRight.transform.localScale = new Vector3(x > 0 ? 1 : -1, y > 0 ? 1 : -1, 1);LineMiddle.transform.localScale = new Vector3(x > 0 ? 1 : -1, y > 0 ? 1 : -1, 1);}}

之后在编辑器下吧三条线拖进去就OK了。如果需要测试,可以在Update里面调用SetLines()方法,然后在编辑器里面更改TreeLine的宽高就能看到效果了。

我们以这个折线作为基础,来进行装备合成树的绘制。

2、装备合成树的绘制

和王者荣耀一样,相邻列显示合成树进行连接,不相邻的不显示。

具体装备合成树的代码就不再贴上来了,大家的解决方案都不太一样,没有太好的复用性。

由于我们已经有了TreeLine这个类,只要给他设定起始位置和宽高就能正确显示了。具体的显示效果如下:

(画面上各种红色的叉是因为TreeLine的宽高设定为负数的原因,起始在显示上没有影响,因为Unity支持图片的双面显示。当然你也可以在代码中手动翻转这些图片。)

后记:

起始还有一个间隔列的合成树的绘制。但是由于目前没有这个需求所以就没有做。

后面如果有需要了会补充关于间隔列之间的装备 合成树的绘制思路。

在Unity中用UGUI实现装备合成树相关推荐

  1. Unity GUI(uGUI)使用心得与性能总结

    Unity GUI(uGUI)使用心得与性能总结 作者 kingshijie 关注 2015.09.26 15:35 字数 3686 阅读 28031评论 10喜欢 49 背景和目的 小哈接触Unit ...

  2. Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息

    Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息 前言 环境准备 实现过程 注意 总结 版权声明 前言 最近在学习UGUI的打图集,之前一直在用SpritePacker ...

  3. 【Unity使用UGUI实现王者荣耀UI界面(四)】游戏开始界面

    文章目录 [Unity使用UGUI实现王者荣耀UI界面(四)]游戏开始界面 1. 把一些重复的UI添加 2. 开始游戏按钮 3. 注销按钮 4. 完成 5. 打包 6. 打包完成 内 容 简 介 章节 ...

  4. Unity 之 UGUI Dropdown下拉选单组件详解

    Unity 之 UGUI Dropdown下拉选单组件详解 1,属性面板 1), Dropdown的组成 2,代码操作 3,使用实例 1), 控制菜单展开方向 4,相关扩展 1), Lua中动态添加O ...

  5. Unity的UGUI使用Text和Image实现文字下划线

    Unity的UGUI使用Text和Image实现文字下划线 引子效果 设置 原文链接 引子效果 写需求的时候搜了一些文字加下划线的方法,UGUI的Text,大都需要写一堆代码来封装Text,比较麻烦. ...

  6. Unity中用递归删除空文件夹和文件夹下面的子文件,meta文件保留和IO的一些操作总结

    /*----------------------------------------------------------------Created by 王银文件名: FilesTools创建时间: ...

  7. 零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏

    零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏 六大推荐理由 理由一:系统 理由二:详细 理由三:专业 理由四:图解 理由五:深度 理由六:实例 一键直达:<UGUI 控件详解 ...

  8. Unity 之 UGUI 图片 和 粒子特效显示层级关系调整

    Unity 之 UGUI 图片 和 粒子特效显示层级关系调整 通常我们使用UGUI时都是通过调整UI的先后顺序或者父物体的层级关系,可是当我使用到粒子特效和Image一起的时候发现光修改层级关系是达不 ...

  9. 使用Unity的UGUI制作带时间头的相册

    Unity  UGUI相册制作并且加上时间头的效果 在介绍排版之前需要先了解一下Unity中的排版布局方式的三个组件 1.Horizontal Layout Group(水平布局) 1.Padding ...

最新文章

  1. 灰度直方图均衡化实现
  2. C#中HtmlAgilityPack判断是否包含或不包含指定的属性或值
  3. golang mysql单元测试_golang test测试使用
  4. 回归分析和卡方检验的区别_11个常见的多变量分析方法
  5. NFC能否成为“标配”?
  6. [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换(转)
  7. ConfigurableListableBeanFactory
  8. 自动配置原理---SpringBoot
  9. 基于git的工作流程
  10. BootStrap笔记-popover的使用(popover中放验证码,点击更新)
  11. php检测是否存在敏感词,如何用PHP+Ajax判断是否有敏感词汇
  12. 代码重构 —— 区分代码和数据
  13. python数据可视化安装软件_《Python数据可视化编程实战》——1.5 在Windows上安装matplotlib-阿里云开发者社区...
  14. 如何理解STM32单片机引脚的复用功能?
  15. 【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?
  16. 为什么有斯坦福计算机科学博士学位的你找不到工作?
  17. QSPI驱动带NV3030B的LCD屏
  18. 历史最全自然语言处理测评基准分享-数据集、基准(预训练)模型、语料库、排行榜
  19. 学习stm32单片机,必备工具和软件,你知道几个?
  20. 米尔电子 MYC-Y6ULX-V2核心板在机械智能控制器的应用

热门文章

  1. 基于graph的图像分割算法:Efficient Graph-Based Image Segmentation
  2. android 百度浏览器内核,百度浏览器安卓6.2版上线:新一代内核更快更稳定
  3. 新媒体如何做日常内容选题以及爆款选题?
  4. Linux环境下搭建区块链私有链+部署智能合约
  5. 170-路飞11-分布式异步框架Celery的使用
  6. 清除新微博Cookie
  7. 要不要把IT主导权还给业务人员
  8. linux 修改IP地址
  9. std::expected以及其开源实现
  10. 设计机器人 计算机教案,小学信息技术机器人教案.doc