【发布时间】:2019-11-15 11:59:12
【问题描述】:
我刚从 unity 开始,并关注了 2D UFO 示例项目。 为了扩展它,我想出了一个奇怪的方法来控制我的播放器。
它总是在圆形路径中移动,一旦我点击一个按钮,圆的方向就会改变,想象的圆心会被转换,如下图所示。这可以让你以 8 字形或 S 形图案移动,非常有趣。
然而,一旦我弄清楚如何做这个动作,玩家对象就不再有任何碰撞检测了。 在原始示例中,整个 movemet 处理是在 FixedUpdate() 中完成的。但是,我使用了 Update(),因为前者似乎根本不适用于我的代码(即根本没有移动)。
这是我到目前为止的运动代码:
public class ControlledRotation : MonoBehaviour
{
public float radius = 3f;
public float speed = 3f;
private float timeCounter = 0;
private float direction = 1f;
private Vector3 offset;
private Rigidbody2D rb2d;
void Start()
{
offset = transform.position;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.RightArrow))
{
//change the offset from the circle center and the rotation direction on keypress
offset += new Vector3(Mathf.Cos(timeCounter), Mathf.Sin(timeCounter), 0) * radius * direction * 2;
direction *= -1;
}
timeCounter += Time.deltaTime * direction * speed;
transform.position = new Vector3(Mathf.Cos(timeCounter), Mathf.Sin(timeCounter)) * radius * direction + offset;
}
}
Plyer 对象有一个 Rigidbody 2D 和一个 Circle Collider 2D。它应该碰撞的墙壁具有 Box Collider 2D。然而,不明飞行物可以简单地穿过墙壁。 我假设一个可能的原因是我只是更改了 transform.position 或者因为我使用了错误的 Update/FixedUpdate。
如果您对我如何保持我选择的运动控制机制并且仍然能够与物体发生碰撞有任何建议,我将不胜感激:)
编辑: 我觉得我需要使用刚体并施加一些力......但我还没有想出如何用力来重现这个运动,而且力似乎也不是超级清晰的响应
【问题讨论】:
-
你有可能触发了吗?
-
不涉及触发器
-
刚体和圆的问题是默认情况下不是它们的自然运动,除非..你把东西分成两部分,所以父部分是你当前圆的半径,你申请扭矩使其旋转,孩子也就是你的实际部分,四处移动,然后移动半径,听起来很乱,但这会奏效 - 我想认为有一个更简单的想法
-
哇,是的,我想到了一些类似的东西,但这真的很复杂。我看了看触发器,并决定我根本不需要刚体来工作,对吧?我可以简单地使用触发器和对撞机吗?还是我有其他误解?
标签: c# unity3d path 2d collision