unity3d - Unity OnCollisionExit()不起作用
问题描述
我有一个玩家对象和一个名为 StartRamp 的坡道。我正在使用下面的代码来改变我的球员的位置和旋转到斜坡外的表面。当我的玩家离开坡道时,我想将玩家在 x 轴上的旋转更改为仅在 50,-50 之间。
但是我关于当表面为假时的 else 语句没有运行。这让我觉得我的 OnCollisionExit() 是错误的。有人能帮我吗?
带有以下代码的脚本附加到播放器对象
private void OnCollisionStay(Collision collision)
{
if(collision.gameObject.name == "StartRamp"){
surface = true;
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name != "StartRamp")
{
surface = false;
}
}
public void playerToSurface(){
if (surface == true){ // Change Position When On Ramp
Ray ray = new Ray(transform.position, -transform.up);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 1.5f) == true)
{
Debug.DrawLine(transform.position, hit.point, Color.green);
rotCur = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
posCur = new Vector3(transform.position.x, hit.point.y, transform.position.z);
grounded = true;
}
else
{
grounded = false;
}
if (grounded == true)
{
transform.rotation = Quaternion.Lerp(transform.rotation, rotCur, Time.deltaTime * 5);
}
else
{
transform.position = Vector3.Lerp(transform.position, transform.position - Vector3.up * 1f, Time.deltaTime * 5);
}
}else{ // Change Position When Off Ramp
Debug.Log("Player is off ramp.\n");
}
}
// Update player position to ground
private void Update()
{
playerToSurface();
}
解决方案
由于 OnCollisionExit 正在寻找您不再接触的对撞机,而不是您不接触的任何对撞机,因此您应该说对象名称是startramp ,而不是is not。
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name == "StartRamp")
{
surface = false;
}
}
推荐阅读
- typescript - 对象 HTMLDivElement 错误显示在页面上
- cron - 无法从模板 openshift 每分钟创建一个 cronJob
- python - heroku 模板不存在
- angular - 尝试使用 Angular 中的 CombineLatest 将两个可观察的流与键合并
- java - 尝试在 Java 中拆分文件路径时出错
- python - 使用 boto3 从 AWS Quicksight 仪表板/分析中提取字段名称
- java - 我如何让这个程序停止打印相同的数字 3 次?
- java - 谷歌云存储:storage.delete(BlobId blobId) 方法生成 NoSuchMethodError
- pdf - PageMaker 7.0 中的超链接
- algorithm - 为大学制定时间表