【Unity】寻路始终贴近地面,Y轴始终与所在平面的法线平行

Unity寻路始终贴近地面,Y轴始终与所在平面的法线平行

最近在做一个车辆通过鼠标点击地面实现移动的一个功能,是通过寻路组件实现的,但是发现一个问题,车辆在爬坡的时候会出现不贴近地面的情况,还是硬邦邦的硬爬,如图:

在这里插入图片描述

当然,以上效果并不是我们想要的,我们想要的效果肯定是这样的,如图:

在这里插入图片描述
在这里插入图片描述

于是乎为了省事,我就打算在网上Ctrl C+V了 😄 然而,并没有找到合适的,不知道是我的问题还是啥,其他大佬的解决方式我没测试成功,就自己写了一个,代码挺简单,发出来供大家参考一下:

using UnityEngine;
using UnityEngine.AI;

public class TTTT : MonoBehaviour
{
    public Transform pos;//寻路目标点

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.J))
        {
            NavMeshAgent nav = GetComponent<NavMeshAgent>();
            nav.SetDestination(pos.position);
        }

        RaycastHit hit;

        // 向下发射一条射线,获取所在平面的法线信息,假设平面为地面
        if (Physics.Raycast(transform.position, Vector3.down, out hit, Mathf.Infinity))
        {
            // 将法线向量转换为与世界空间Y轴垂直的坐标系
            Debug.Log(transform.rotation.eulerAngles.y);
            Quaternion rotation = Quaternion.FromToRotation(Vector3.up, hit.normal) * Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0);

            // 设置物体的旋转
            transform.rotation = rotation;
        }
    }
}

2023年12月11日更新

在使用时发现,当小车停在斜坡上时,会出现小车自动旋转到与平面法线相同的方向上,目前解决办法就是寻路跑完了就把寻路和本控制代码都关掉,再次移动时再都开启,没找到其他的解决办法。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值