c# - NPC 穿墙而过
问题描述
我目前正在开发一个战术角色扮演游戏,并且我设置了墙壁以防止 NPC 移动到游戏区域之外。然而,NPC 正在穿墙而过。他有一个刚体,一个盒子对撞机附在他身上,他被触发了。此外,还标记了使用重力选项和运动学。墙壁有一个刚体和一个盒子对撞机。它们不会被触发。
我正在使用此代码来移动 NPC:
targetPosition.y = 1.4f;
targetPosition.x = this.transform.position.x + 3;
targetPosition.z = this.transform.position.z;
this.transform.position = Vector3.MoveTowards(transform.position, targetPosition, velocity);
我读过这种移动方式可能会导致问题。那正确吗?
解决方案
如果你有一个Rigidbody附加到你的 GameObject,你应该使用它来移动它,而不是Transform,因为它是 Rigidbody 与物理引擎对话并负责同步位置。在这种情况下,适当的函数应该是Rigidbody.MovePosition。
using UnityEngine;
using System.Collections;
using System.Collections.Generics;
public class NPC: MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private Rigidbody rigidbody;
void FixedUpdate()
{
rigidbody.MovePosition(rb.position + new Vector3(3f, 0f, 0f) * speed * Time.fixedDeltaTime;
}
}
由于我们使用物理来移动游戏对象,因此逻辑必须放在FixedUpdate中。
推荐阅读
- r - ggplot2中未显示字体
- azure - 如何从 Azure Site Recover 获取所有受保护项目的详细信息
- python - AWS Glue 无法读取 JSON Snappy 文件
- docker - 如何重新创建具有相同环境变量和卷但使用新名称的 Docker 服务?
- node.js - 如何允许使用 PeerJS 与在同一台服务器上运行的 apache 和节点 js 进行 websocket 连接?
- splunk-query - Kubernetes 记录垃圾邮件 Splunk
- openmdao - 使用带有 3 维阵列的 Demux Comp (OpenMDAO) 时出现问题
- javascript - 组件渲染两次(reactJS)
- tomcat - 如何更改Tomcat上的webapp文件夹
- linux - 无法读取补充组的文件