c# - 让玩家跟随一个航路点路径,但仍然能够控制玩家的移动
问题描述
我正在开发一个赛车游戏,其中我有一个带有航点的预定义路径,我想要实现的是,我希望我的玩家遵循路径的一般方向,但仍然完全控制我的玩家。如,它一直跟随路径,但我应该能够左右移动它以避免障碍物。
这是我现在使用的一段代码。
#region Following the path
if (PathGenerator.instance.wayPoints.Count > 0)
{
Transform currentNode = PathGenerator.instance.wayPoints[currentNodeCount];
transform.position = Vector3.MoveTowards(transform.position, currentNode.position, forwardSpeed * Time.deltaTime);
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(currentNode.position - transform.position), 1 * Time.deltaTime);
float distance = Vector3.Distance(transform.position, currentNode.position);
if(distance < 1f)
{
if(currentNodeCount < PathGenerator.instance.wayPoints.Count - 1)
currentNodeCount++;
}
}
#endregion
但这里的问题是玩家直接进入航路点,即使我左右移动它。它只会回到航路点的中心。观看 gif:-
正如你所看到的它是如何回到中心跟随航路点的,我无法像这样控制玩家。我想要的只是玩家跟随电路路径本身,但我想控制它的 X 轴以避免障碍物。
有人可以在这里指导我并帮助我解决我的问题吗?任何帮助或想法将不胜感激。
谢谢你。
解决方案
以下可能不是解决此问题的最佳方法,但有助于更进一步
您可以如下设置播放器
带有脚本的玩家对象和作为孩子的角色(胶囊)请检查下图
然后使用下面的代码,您将被允许移动角色侧面,保持主要对象跟随航路点。稍后您可以为最大侧向移动添加一些限制。
void Update()
{
//made a similar situation from your code
if (waypoints.Length > 0)
{
Transform currentNode = waypoints[currentNodeCount].transform;
transform.position = Vector3.MoveTowards(transform.position, currentNode.position, 10f * Time.deltaTime);
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(currentNode.position - transform.position), 1 * Time.deltaTime);
float distance = Vector3.Distance(transform.position, currentNode.position);
if (distance < 1f)
{
if (currentNodeCount < waypoints.Length - 1)
currentNodeCount++;
}
}
// side movement to child object, in m case it is Player Object's second child
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.GetChild(1).Translate(Vector3.left * 5f * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.RightArrow))
{
transform.GetChild(1).Translate(Vector3.right * 5f * Time.deltaTime);
}
}
还附上输出视频 Follow_waypoint_along_with_manual_side_movement
PS:这是我的第一个答案,如果没有以正确的格式回答,请原谅。
推荐阅读
- java - JUnit 5 with Spring boot - 如何使用不同的配置文件重复测试?
- javascript - 从数组中删除值不起作用 NEXT.JS
- python - Python 备份脚本上的 BrokenPipeError
- javascript - 如何从javascript设置数据值
- image - 我有 3 张图像,我想使用 subplot 将它们显示在 1 个图中,但是它们太小了,我怎样才能使它们更大更清晰?
- git - 为什么要更改所有父 ref 的分离头状态的新分支?
- javascript - React - TypeError:无法读取未定义的属性“smallThumbnail”
- python - 如何测试 Model.clean() 函数的唯一性?
- vue.js - 每次更新值时都会运行计算值
- java - 如果在 Java 中的套接字编程中没有机会,如何给所有客户端一个一个发送数字并阻止客户端发送数字的机会