我需要一个物体移动到特定点。在运动过程中,它必须检测碰撞(至少射线投射)。
使用addForce
,对象的移动不准确,无法在特定点停止。 MovePosition
用于运动对象(可能我错了,但它对我的动态对象不起作用)。
任何想法如何可能?
答案 0 :(得分:0)
您可以将MovePosition与非运动物体一起使用 https://docs.unity3d.com/ScriptReference/Rigidbody2D.MovePosition.html
rb2D.MovePosition(rb2D.position + velocity * Time.fixedDeltaTime);
他们将与触发器和碰撞相互作用。如果刚体是运动学的,那么任何碰撞都不会影响刚体本身,只会影响任何其他动态碰撞器。
答案 1 :(得分:0)
1 将对象从A点移动到B点 使用 MoveTowards2D : https://docs.unity3d.com/ScriptReference/Vector2.MoveTowards.html
2 检测碰撞 使用 OnTriggerEnter2D 或 OnCollisionEnter2D : https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerEnter2D.html
所以在那种情况下,你得到了:
- 从A
移动的游戏对象- 充当墙壁的游戏对象
-one gameObject,你的B点。
您需要将此脚本附加到想要从A点移动到B点的游戏对象:
public class MoveTo : MonoBehaviour
{
public Transform pointToGo;
public float speed;
public bool colliding = false;
private void Update()
{
if (!colliding)
{
//Move
float step = speed * Time.deltaTime;
transform.position = Vector2.MoveTowards(transform.position, pointToGo.position, step);
}
}
//Callback when enter the trigger
private void OnTriggerEnter2D(Collider2D collision)
{
colliding = true;
}
}
注意: 请记住,带脚本的gameObject和墙都应该连接对撞机和刚体。此外,如果您想使用触发器,请记住在墙上对撞机上选中“Is Trigger”。