为什么Unity2D中的冲突检查会提供各种结果?

时间:2018-10-07 00:46:56

标签: c# unity3d collision

我正在尝试在Unity2D中重新创建AA,以了解一切工作原理,我正在使用YouTube教程来指导我进行操作,并且视频中有确切的代码,但似乎不起作用正确地,当销子碰到旋转的球时,销子不会同时停止(如下所示)。有些会进入球的一半,而有些会过早停止。

Pin heights differing

这是密码(Pin.cs):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pin : MonoBehaviour {

    private bool moving = true;

    public float speed = 20f;
    public Rigidbody2D rb;

    void Update() {
        if (moving)
            rb.MovePosition(rb.position + Vector2.up * speed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D collider) {
        if (collider.tag == "Rotator") {
            moving = false;
            transform.SetParent(collider.transform);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

只需使用FixedUpdate()代替Update()

请参阅Unity Documentation - FixedUpdate链接,在处理刚体时应使用FixedUpdate()代替Update()

因此,将您的代码更改为此:

public class Pin : MonoBehaviour
{
    ...

    void FixedUpdate() 
    {
        if (moving)
            rb.MovePosition(rb.position + Vector2.up * speed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D collider) 
    {
        ...
    }
}

希望对您有帮助。