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