我正在Unity3d中开发一款手机游戏,玩家需要移动一根手指比使用transform.position手指稍高一点,然后阻挡一个用Force.Mode2D.impulse移动的球 . 问题是如果手杖移动太快,球会穿过手杖 . 任何人都可以教我如何用力(或任何其他有效的方式)编码棒运动仍然根据触摸屏上的手指位置(A.K.A Input.mousePosition)移动而不是使用按钮?
如果有人需要信息,代码就是这样;
棒:
float defencePosX = Mathf.Clamp( Input.mousePosition.x / Screen.width * 5.6f - 2.8f , -2.8f, 2.8f);
float defencePosY = Mathf.Clamp( Input.mousePosition.y / Screen.height * 10 - 4f, -3.3f, -0.5f);
this.transform.position = new Vector3 (defencePosX, defencePosY, 0);
球:
projectileSpeed = Random.Range (maxSpeed, minSpeed);
projectileSwing = Random.Range (-0.001f, 0.001f);
rb.AddForce (new Vector2 (projectileSwing * 1000, 0), ForceMode2D.Impulse);
rb.AddForce (new Vector2 (0, projectileSpeed), ForceMode2D.Impulse);
一个视频的错误:https://youtu.be/cr2LVBlP2O0基本上,如果我不移动它击中它,但如果我快速移动它球直接通过 . (如果太快,弹跳音效也不起作用)
2 回答
使用物理对象时,移动它们时只需要使用Rigidbody组件 . 否则,它被解释为传送,不应用物理,也不计算运动 .
尝试使用Rigidbody.MovePosition而不是
transform.position
.另外,确保棒和球上的Rigidbody组件都collisionDetectionMode设置为'Continuous Dynamic' . 这就是你如何让小的快速移动的物理对象在帧之间相互碰撞 .
我建议您在向力量添加力之前将球力设置为Vector3.zero,或者将阻挡运动的对手用作球的弹跳垫 .
请记住根据阻挡器检查碰撞器是否正确缩放 .
显示您的问题的视频将有助于更好地理解它 .