unity3d - OnCollisionEnter 不起作用
问题描述
我正在我的统一游戏中制作一个蹲伏脚本。我遇到的一个问题是,当您松开蹲下并且处于某物之下时,您仍然会上升并且卡住了。解决方案是创建一个玩家的孩子,检查玩家头顶是否有任何东西
代码会像这样工作
void OnCollisionEnter(Collision collision)
{
isunder = true;
print("collide")
}
void OnCollisionExit(Collision collision)
{
isunder = false
}
出于某种原因,我无法让它工作。一切都有一个对撞机,一切都有一个刚体,一切都是运动学的而不是运动学的。我只是不
解决方案
所以我不太确定你是如何尝试设置你的场景的,但是使用碰撞来检查一个物体是否在你的头顶是不可能的,就像你使用一个带有刚体的空游戏对象一样,它不会检测到任何东西,如果你在上面放一个对撞机,你现在就会有一个看不见的物体撞到东西上。所以我建议你使用 Raycasting 或 Triggers
要使用触发器,请在您的游戏对象上放置一个对撞机,并将 isTrigger 设置为 true。然后在您的代码中,您可以使用这些:
void OnTriggerExit(Collider collision)
{
Debug.Log("Exit");
}
void OnTriggerEnter(Collider collision)
{
Debug.Log("Enter");
}
就像碰撞一样工作,只是它是一个不会导致任何实际碰撞的不可见场。
另一种方式,光线投射,也可以使用。
public Transform rayStart;
float length; //Set equal to how far above head you want to check
public bool underObject() {
return Physics.Raycast(rayStart.position, Vector3.up, length);
}
只需确保作为您的 rayStart 的游戏对象(可能位于角色头顶)不在您的角色内部,否则射线会击中您的角色并始终返回 true。长度可能是从蹲下到站立的距离差。
推荐阅读
- php - 我的 Jquery 文件在 laravel 中找不到控制器
- python - Use a generator within a while loop to blit text onto the screen
- javascript - Expo React Native App 不再显示图表
- java - 启动tomcat 8.5服务器时出现以下错误
- java - 活动开始时加载片段
- spring-boot - 由于 RabbitMq 生产者导致的 Junit / Mockito 错误
- c - 我们是否必须放入空参数“void”?
- python - python-docx:查找表位于 ms word 文档中的标题名称
- java - 如何将文本文件 (txt) 写入我的 ftp 服务器?
- plotly - 在 Dash 中更新图表(Plotly)