如何防止巡逻中的Sprite被Tilemap遮挡?
巡逻敌人Sprite被Tilemap遮挡问题
- 进入Play模式后,敌人巡逻移动逻辑正常,可与对象交互,但Sprite被Tilemap遮挡
- 敌人及巡逻目标点的Z轴位置均设置为比Tilemap更靠近相机的数值
- 初始运行代码时,敌人仅在两点间来回移动,Z轴位置未发生变化
问题演示

巡逻代码截图

核心代码文本
using UnityEngine; using System.Collections; public class Patrol : MonoBehaviour { public Transform pointA; public Transform pointB; public float speed = 2f; private Vector3 target; void Start() { target = pointB.position; } void Update() { transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime); if (transform.position == target) { target = target == pointA.position ? pointB.position : pointA.position; } } }
解决方法
调整排序层/顺序
打开Sprite Renderer和Tilemap的Inspector面板,确保敌人Sprite的**排序层(Sorting Layer)优先级高于Tilemap,或同一排序层下,敌人的排序顺序(Order in Layer)**数值更大。修复移动代码的Z轴覆盖问题
当前代码中Vector3.MoveTowards会直接使用目标点的Z轴覆盖敌人Z轴,修改代码保留原Z轴:void Update() { // 生成仅保留目标点X、Y,沿用敌人当前Z的目标位置 Vector3 targetPos = new Vector3(target.x, target.y, transform.position.z); transform.position = Vector3.MoveTowards(transform.position, targetPos, speed * Time.deltaTime); if (transform.position == targetPos) { target = target == pointA.position ? pointB.position : pointA.position; } }验证Z轴实际值
Play模式下选中敌人,查看Transform组件的Z轴数值,确认是否与预设一致,排查是否有其他脚本在修改Z轴。
内容的提问来源于stack exchange,提问作者SpaghettiMaster64
相关产品推荐
相关产品推荐

