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

news2024/10/6 5:57:48

文章目录

  • 前言
  • 一、排序图层
  • 二、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.coloradmin.cn/o/1148838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用第三方库

Moment GTC(Greenwish Mean Time)&#xff1a;格林威治时间&#xff0c;太阳时&#xff0c;精确到毫秒UTC(Universal Time Coodinated)&#xff1a;世界协调时间&#xff0c;原子种计时&#xff0c;精确到纳秒 GTC和UTC都是以0时区作为标准时间戳&#xff1a;以UTC的1970-1-1 …

天气数据可视化平台-计算机毕业设计vue

天气变幻无常&#xff0c;影响着我们生活的方方面面&#xff0c;应用天气预报信息可以及时了解天气的趋势&#xff0c;给人们的工作、生活等带来便利&#xff0c;也可以为我们为未来的事情做安排和打算&#xff0c;所以一个精准的、易读 通过利用 程序对气象网站大量的气象信息…

H5游戏源码分享-命悬一线

H5游戏源码分享-命悬一线 在合适的时机跳下绳子&#xff0c;能安全站到木桩上&#xff0c;就通过。 游戏源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name&…

Mybatis延迟加载(缓存)

延迟加载 分步查询的优点&#xff1a;可以实现延迟加载&#xff0c;但是必须在核心配置文件中设置全局配置信息&#xff1a;lazyLoadingEnabled&#xff1a;延迟加载的全局开关。当开启时&#xff0c;所有关联对象都会延迟加载 aggressiveLazyLoading&#xff1a;当开启时&…

Openssl数据安全传输平台017:Linux客户端代码的编译与调试-Bug记录

文章目录 1 在windows上先预编译2 Centos上进入项目文件夹进行编译2.0 最终的编译指令2.1 找不到lprotobuf&#xff0c;找不到protobuf的google文件夹2.1.1 编译指令及提示2.1.2 问题分析2.1.3 解决办法 2.2 json类中方法unreference2.2.1 编译指令及提示2.2.2 问题分析 *** 最…

hadoop权威指南第四版

第一部分 HaDOOP基础知识 1.1 面临的问题 存储越来越大&#xff0c;读写跟不上。 并行读多个磁盘。 问题1 磁盘损坏 – 备份数据HDFS 问题2 读取多个磁盘用于分析&#xff0c;数据容易出错 --MR 编程模型 1.2 衍生品 1 在线访问的组件是hbase 。一种使用hdfs底层存储的模型。…

Spring中Bean的完整生命周期!(Bean实例化的流程,Spring后处理器,循环依赖解释及解决方法)附案例演示

Bean实例化的基本流程 加载xml配置文件&#xff0c;解析获取配置中的每个的信息&#xff0c;封装成一个个的BeanDefinition对象将BeanDefinition存储在一个名为beanDefinitionMap的Map<String,BeanDefinition>中ApplicationContext底层遍历beanDefinitionMap&#xff0c…

寻找倒数第K个节点

这篇文章也是凑数的 ... 寻找倒数第K个节点 描述 : 找出单向链表中倒数第 k 个节点。返回该节点的值。 题目 : LeetCode 返回倒数第K个节点 : 面试题 02.02. 返回倒数第 k 个节点 说明 : 给定的 k 保证是有效的。 分析 : 我们给出个例子 : 首先&#xff0c;我们创建两个…

Java-API简析_java.io.FilterOutputStream类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/134106510 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

ubuntu安装tinycudann

tinycudann几乎是nerf开发环境必备的条件之一。在测试sdfstudio和nerfstudio都需要安装tinycudann。按照官方的操作步骤&#xff0c;最简单的安装步骤为&#xff1a; pip install githttps://github.com/NVlabs/tiny-cuda-nn/#subdirectorybindings/torch常见会出现如下两个问…

requests之post请求实例-百度翻译

视频版教程&#xff1a;一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 打开百度翻译网址&#xff0c;我们输入需要翻译的英文&#xff0c;谷歌 F12 打开开发者工具&#xff0c;network可以看到网络请求&#xff0c;我们需要找到请求的API&#xff0c;…

Git 提交时提示 GPG 签名错误

本来应该一切都是正常的&#xff0c;但今天提交的时候提示 GPG 签名错误。 错误的信息就是 GPG 签名失败。 gpg: skipped "942395299055675C": No secret key gpg: signing failed: No secret key error: gpg failed to sign the data fatal: failed to write commi…

PicGo+雨云ROS搭建自己的图床,可配合Typora使用

本文将手把手带你使用 PicGo雨云对象存储ROS(Rain Object Storage) 搭建自己专属的免费图床&#xff0c;并且可以配合Typora使用。 雨云对象存储服务介绍和使用教程&#xff1a;https://blog.zeruns.tech/archives/733.html 目前雨云对象存储是公测阶段&#xff0c;暂时是免费…

NeurIPS 2023 | 连接多模态对比表征:无需配对数据的高效对比表征学习方法

©PaperWeekly 原创 作者 | 王泽寒 单位 | 浙江大学 研究方向 | 多模态学习 论文地址&#xff1a; https://arxiv.org/abs/2305.14381 项目主页&#xff1a; https://c-mcr.github.io/C-MCR/ 模型&代码地址&#xff1a; https://github.com/MCR-PEFT/C-MCR 多模态对比表…

IconWorkshop中文官方版下载_IconWorkshop最新版下载v6.91汉化破解版下载

IconWorkshop 6.91是由Axialis公司出品的一款专业图标创作工具。它能够为所有版本的Windows&#xff0c;MacOS&#xff0c;iOS和Linux制作您自己的专业图标。兼容Visual Studio&#xff0c;Photoshop和Illustrator等开发行业标准。软件内置了不少滤镜&#xff08;模糊、平滑、锐…

CTFHub | MySQL流量、Redis流量、MongoDB流量的WriteUp

文章目录 MySQL流量题目题解 Redis流量题目题解 MongoDB流量题目题解 数据库类流量题需要用到Wireshark截取数据包&#xff0c;然后进行分析。 WireShark是非常流行的网络封包分析工具&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程…

算法刷题记录6 - 反转链表和链表两两交换

哎&#xff0c;都两周没刷题了&#xff0c;罪过 第一题 2023.10.29 周日 上链接 206. 反转链表 难度&#xff1a;简单 代码随想录 文档 代码随想录 视频 这道题说难不难&#xff0c;但是也不知道是太久没写没感觉了还是确实细节多&#xff0c;不看视频确实感觉不出写的问题在…

GEE错误——影像加载过程中出现的图层无法展示的解决方案

问题&#xff1a; // I dont know if some standard value exists for the radius, in the same, I will assume that some software would prefer to use square shape, but circle makes more sense to me. // pixels is noice if you want to zoom in and out to visualize…

Redis实现分布式锁之----超时和失效(非原子性)问题----解决方案

Redis实现分布式锁之----超时和失效&#xff08;非原子性&#xff09;问题----解决方案 超时和失效&#xff08;非原子性&#xff09;问题 原子性问题&#xff1a;上锁时存入线程名称&#xff0c;删除时要先判断锁内的名称是不是自己的&#xff0c;是再删除&#xff0c;但是后…

软件测试---边界值分析(功能测试)

选取正好等于、刚好大于、刚好小于边界的值作为测试数据 上点: 边界上的点 (正好等于)&#xff1b;必选(不考虑区开闭) 内点: 范围内的点 (区间范围内的数据)&#xff1b;必选(建议选择中间范围) 离点: 距离上点最近的点 (刚好大于、刚好小于)&#xff1b;开内闭外(考虑开…