我把我的“播放器”gameObject放在一个平台上。他按下组合键,我验证他是否站在正确的平台上,然后运行以下代码:
Physics2D.IgnoreLayerCollision(playerLayer, plataformLayer);
目的是让他从站台上掉下来。相反,不会立即发生任何事情。玩家仍然在平台的顶部,可以四处走动-只有当他离开平台并试图回到平台上时,才会从平台上掉下来。
所以我做了一个临时的丑陋的变通方法:
Physics2D.IgnoreLayerCollision(playerLayer, plataformLayer);
rigidbody2D.AddForce(transform.up * jump / 1.5f);
这将迫使玩家跳跃,使Unity“重新计算”碰撞,玩家将,如我所愿,通过平台。更奇怪的是:如果跳跃的高度不够高(质量为1,重力等级为0.5的100力似乎是最小的),玩家仍然会降落在平台上,即使Unity应该忽略这些碰撞。
我也试着向下推玩家,无论是用力还是直接速度,但没有运气-他仍然与平台相撞,他只是在离开平台一次后才停止碰撞。
此外,我的播放器Rigidbody2D检测模式被设置为连续,我尝试了许多不同的方式来设置平台,无论有没有Rigidbody2D。
有什么办法让玩家在碰撞开始被忽略时立即从平台上掉下来吗?提前谢谢。
发布于 2014-05-12 04:46:07
我也遇到了同样的问题。我有一个替代的解决方案,你可能会找到你喜欢的。
暂时将播放器gameObject的rigidbody2D设置为运动学,而不是禁用或移动要忽略的地形。这不会让你像你想要的那样在平台上“掉下来”--但它会让你产生一种错觉,通过简单的使用transform.Translate (或者Vector3.Lerp,如果你喜欢)来通过代码向下移动你的角色。这将禁用Rigidbody2D.AddForce,但仍允许通过rigibdody2D.velocity进行设置移动,前提是这比直接操作变换更可取。
确保向下速度只持续到你是运动学的时候,并尝试让它与你游戏的重力相匹配,它看起来非常无缝。如果你太快地打开刚体,它仍然可以(即使使用ignoreLayers :/ )跳回到平台上-但如果你让它开得太长,你可能会掉到多个预期的单向平台上,甚至:O穿过舞台的底部!如果你能小心,这是很容易避免的--就我个人而言,我使用了两个MonoBehaviour.Invoke设置了一个非常短的时间限制,玩家将保持运动学的时间(大约0.5秒),我禁用了运动学,只要他们从'hopDown‘的启动点移动了0.5个单位。如果你的重力/平台/角色比例与我的有很大不同,你可能需要尝试一些不同的数字。
这是我第一次尝试回答关于stackoverflow的问题,所以我希望它对我有所帮助!
发布于 2014-09-23 17:35:07
一种简单的方法是在调用
Physics2D.IgnoreLayerCollision(playerLayer, plataformLayer);
重置播放器的层:
player.gameObject.layer = playerLayer;
发布于 2014-03-03 17:12:37
听起来你在来这里之前已经涵盖了一大堆可能的解决方案,所以,干得好。我在下面列出了一些可供选择的想法。我希望他们能帮上忙。祝好运!
https://stackoverflow.com/questions/22148925
复制相似问题