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

Unity中如何实现向敌人方向瞬移并设置可调偏移量?

实现Unity向敌人方向瞬移并设置可调偏移量的方案

核心思路

  • 保留原射线检测敌人的触发逻辑,确保仅对敌人执行瞬移
  • 添加可调偏移量参数,直观控制瞬移后与敌人的安全距离
  • 计算合理的瞬移位置:以敌人位置为基准,向远离敌人的方向偏移指定距离,适配终结动画需求
  • 瞬移后自动让玩家朝向敌人,保证动画衔接流畅

修改后的完整代码

public Transform Target;
public new Camera camera;
public float raycastDistance; // 射线检测的最大范围
public float teleportOffset = 1.5f; // 瞬移后与敌人的偏移距离,可在Inspector面板直接调整

private void Update()
{
    activateFinisher();
}

private void activateFinisher()
{
    RaycastHit hit;
    if (Input.GetKeyDown(KeyCode.F))
    {
        if (Physics.Raycast(camera.transform.position, camera.transform.forward, out hit, raycastDistance))
        {
            if (hit.transform.CompareTag("Enemy"))
            {
                Target = hit.transform;
                // 计算玩家指向敌人的单位方向向量
                Vector3 directionToEnemy = (Target.position - transform.position).normalized;
                // 计算瞬移位置:敌人位置 - 朝向向量 * 偏移量,保证与敌人保持安全距离
                Vector3 teleportPosition = Target.position - directionToEnemy * teleportOffset;
                
                // 执行瞬移
                transform.position = teleportPosition;
                // 让玩家面朝敌人
                transform.LookAt(Target);
                
                Debug.Log($"已瞬移到敌人前方,偏移距离:{teleportOffset}");
            }
        }
    }
}

关键细节说明

  • teleportOffset:可在Unity编辑器中实时调整的参数,数值越大,瞬移后玩家与敌人的距离越远,完全适配不同终结动画的空间需求
  • directionToEnemy:通过单位向量保证偏移方向始终是远离敌人的方向,避免瞬移到敌人模型内部
  • 将触发逻辑移至Update方法中,确保输入检测的稳定性

额外优化方向

  • 增加地面检测:对计算出的瞬移位置向下发射射线,修正Y轴坐标,避免瞬移到空中或穿墙
  • 结合敌人碰撞体:使用Target.ClosestPoint(transform.position)获取敌人碰撞体上的最近点,再做偏移,进一步提升位置合理性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:54:21