You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止巡逻中的Sprite被Tilemap遮挡?

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

问题演示

敌人Sprite被Tilemap遮挡的演示效果

巡逻代码截图

巡逻逻辑代码

核心代码文本

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;
        }
    }
}

解决方法

  1. 调整排序层/顺序
    打开Sprite Renderer和Tilemap的Inspector面板,确保敌人Sprite的**排序层(Sorting Layer)优先级高于Tilemap,或同一排序层下,敌人的排序顺序(Order in Layer)**数值更大。

  2. 修复移动代码的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;
        }
    }
    
  3. 验证Z轴实际值
    Play模式下选中敌人,查看Transform组件的Z轴数值,确认是否与预设一致,排查是否有其他脚本在修改Z轴。

内容的提问来源于stack exchange,提问作者SpaghettiMaster64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:48:19