当前位置: 首页 > news >正文

【unity小技巧】unity排序问题的探究

文章目录

  • 前言
  • 一、排序图层
  • 二、sorting Group的使用
  • 三、树木排序设计
    • 方法一 代码控制
    • 方法二 拆分图片
    • 方法三 透视排序
      • 1. 普通物品排序
      • 2. TileMap瓦片排序设计
  • 完结

前言

unity的排序问题其实之前分享的项目多多少少都有提到一点,但是没有单独拿出来说,所以这次特地做一次整理

本文主要解决几个问题:

  • 排序图层的作用?
  • sorting Group排序组的使用?
  • 树木排序问题,我们希望实现人物走到树前,人物遮挡树木,当人物走到树后,树又遮挡玩家

一、排序图层

排序图层应该是我们用的最多的,也是最简单的了
修改对应的排序图层或者图层顺序即可,图层顺序越大越靠前
在这里插入图片描述

二、sorting Group的使用

排序组通常用于解决一个物体由多个部分组合而成,比如多部位组成的角色,你可以简单的理解sorting Group就是把一个物品看作一个整体来排序,无论如何修改他的内部排序,都不会影响整体的sorting Group排序

比如在以下示例中,按照您希望角色的不同部分的出现顺序对这些部分进行排序。
在这里插入图片描述
配置排序组和排序图层之后,可以将角色另存为预制件,并根据需要进行多次克隆。

但是,预制件精灵全部具有相同的 Sorting Layer 和 Order in Layer 值,并且与其他预制件一起渲染到相同图层,这可能导致一个预制件角色的不同部分错误地相交和分层。
在这里插入图片描述
为了确保预制件的渲染顺序一致以便正确显示,请将 Sorting Group 组件添加到每个预制件的根游戏对象。并配置整体的Order in Layer排序
在这里插入图片描述

三、树木排序设计

我们希望实现人物走到树前,人物遮挡树木,当人物走到树后,树又遮挡玩家

如果我们直接修改图层排序方式肯定是不行的,玩家要么直接被遮挡,要么直接遮挡树木

方法一 代码控制

当然你可以通过代码的方式,动态的修改人物图层排序值

如果我们正常直接添加一些资源物体,会发现排序变得很乱
在这里插入图片描述
我们可以通过脚本来控制资源的排序,大致逻辑就是按物体的y轴来控制排序

using UnityEngine;public class SpritePositionSortingOrder : MonoBehaviour
{[SerializeField] private bool runOnce; // 是否只运行一次[SerializeField] private float positionOffsetY; // Y轴位置偏移量private SpriteRenderer spriteRenderer;private void Awake(){spriteRenderer = GetComponent<SpriteRenderer>(); // 获取当前对象的SpriteRenderer组件}private void LateUpdate(){float precisionMultiplier = 5f; // 精度乘数,可以根据需要调整// 根据当前对象的位置和Y轴偏移量计算出sortingOrder值,并将其赋给SpriteRenderer组件的sortingOrder属性spriteRenderer.sortingOrder = (int)(-(transform.position.y + positionOffsetY) * precisionMultiplier);if (runOnce){Destroy(this); // 如果设置了只运行一次,就在完成一次排序后销毁脚本组件}}
}

效果
在这里插入图片描述
显然这太麻烦了

方法二 拆分图片

最简单的方法就是将树叶和树根分开,树叶图层排序比人物高,树根图层排序比人物低,当然这样绘制会比较麻烦一些
在这里插入图片描述

效果
在这里插入图片描述

方法三 透视排序

使用透视排序。也就是“伪造”透视图。根据直觉,玩家希望角色在立方体前面时首先绘制角色,而角色在立方体后面时最后绘制角色。

如果用更技术性的语言来说,你需要做的是指示 Unity 根据游戏对象的 y 坐标来绘制游戏对象。屏幕上位置较低的游戏对象(y 坐标较小)应在屏幕上位置较高的游戏对象(y 坐标较大)之后绘制。这样将使位置较低的对象显示在上层。

要指示 Unity 根据游戏对象的 y 坐标来绘制游戏对象,请执行以下操作

选择 Edit > Project Settings。

在左侧类别菜单中,单击 Graphics

在 Camera Settings 中,找到 Transparency Sort Mode (透明度排序模式)字段。此字段决定了精灵的绘制顺序。使用下拉菜单将此设置从 Default 更改为 Custom Axis(自定义轴),修改Transparency Sort Axis(透明排序轴)为(0,1,0),告诉Unity y轴绘制精灵

在这里插入图片描述

1. 普通物品排序

找到树木的 Sprite Sort Point (Sprite 排序点)字段。目前,此字段设置为 Center,这意味着会使用精灵的中心点来决定这个游戏对象应该在另一个游戏对象的前面还是后面。将 Sprite Sort Point (Sprite 排序点)更改为 Pivot(轴心)
注意:记得树木图层排序顺序要和主角人物设置为一样

修改树木图片的轴心位置到树木根部
在这里插入图片描述

这样就实现了人物在树木轴心下面,先绘制树木,人物在轴心以上,先绘制角色
在这里插入图片描述

2. TileMap瓦片排序设计

在最右边的Tilemap Renderer:将Mode设置为Individual
在这里插入图片描述
把对应图片的轴心放在底部
在这里插入图片描述
为了使其更加准确,我们可以更改角色的轴心位置也在底部
在这里插入图片描述
并修改角色的精灵排序点为轴心
在这里插入图片描述
效果,可以看到,角色在栅栏上角色在后,角色在栅栏前角色在前
在这里插入图片描述

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。点赞越多,更新越快哦!当然,如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

http://www.lryc.cn/news/211634.html

相关文章:

  • 为什么会被【禅道】工具的公司提出QQ群的反思…………
  • 专业课改革,难度陡然提高,专业课122总分390+南京理工大学818南理工818上岸经验分享
  • Java入门与实践
  • TensorRT量化实战课YOLOv7量化:pytorch_quantization介绍
  • 【23真题】知识点覆盖全!有罕见判断题!
  • K8s外部网络访问之Ingress
  • 中文编程工具免费版下载,中文开发语言工具免费版下载
  • 昂首资本严肃且专业地探讨波浪理论第一波
  • 《论文写作》课程总结
  • 基于SSM的作业提交与查收系统设计与实现
  • Hololens2 报错Microsoft.Windows.System缺少
  • nginx: [emerg] bind() to 0.0.0.0:18888 failed (98: Unknown error)问题解决办法
  • 基于 Redis + Lua 脚本实现分布式锁,确保操作的原子性
  • vue源码分析(七)—— createComponent
  • vue实现图片分页
  • Baklib专注:企业数字内容体验与知识管理
  • C++ 标准库随机数:std::default_random_engine
  • Python requests之Cookie
  • 【嵌入式项目应用】__嵌入式中,映射表的应用例子!
  • react中的useState和useImmer的用法
  • Can‘t compile code “launch: program <program_path> does not exist “
  • Mac电脑上升级nodejs
  • 基于单片机的太阳跟踪系统的设计
  • V3Det大规模词汇视觉检测数据集与LaRS海上全景障碍物检测数据集
  • ubuntu(18.04) 安装 blast
  • 3.2每日一题(定积分求抽水做工问题)
  • c语言基础:L1-063 吃鱼还是吃肉
  • <if> 标签中使用了不正确的语法。在 XML 中,<if> 标签不需要使用 <![CDATA[ ... ]]> 将条件语句包装起来。 否则会报错
  • Ubuntu 诞生 19 年
  • JVM进阶(3)