Исправлена ​​ошибка, из-за которой мои объекты не привязывались к объектам в Unity. - PullRequest
0 голосов
/ 04 марта 2019

У меня есть базовая привязка объектов в моей тестовой сцене, но когда я отсоединяю объекты, привязанный объект перезапускается, если я не уберу его очень быстро.Для контекста установки сцены я хочу реализовать привязывание объектов в VR, чтобы у меня был меньший родительский объект внутри объекта, который я перемещаю, чтобы представить руку, к которой объект будет привязан в VR.Также у меня есть сценарий привязки (первый ниже), прикрепленный к объекту 'hand', и я использую триггеры на руке и квадратном объекте, к которому он присоединяется.

Любая подсказка, как я могу это исправить, поэтому яне нужно быстро тянуть, чтобы отделить объект?

Видео об ошибке

Ниже приведены сценарии, которые я использую для реализации

    public class snap : MonoBehaviour, collider_helper.collider_help_reciever
{
    public Transform snapObj;
    public Transform SnapTarget;
    bool snapped = false;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    public void OnTriggerEnter (Collider other)
    {
        Debug.Log("enter");
        if (snapped == false && other.transform.GetInstanceID() == SnapTarget.GetInstanceID())
        {
            snapObj.position = SnapTarget.position;
            snapObj.rotation = SnapTarget.rotation;
            snapObj.parent = SnapTarget;
            snapped = true;
        }
    }
    public void OnTriggerExit(Collider other)
    {

        Debug.Log("exit");
        if (snapped == true && other.transform.GetInstanceID() == SnapTarget.GetInstanceID())
        {
            snapObj.position = transform.position;
            snapObj.rotation = transform.rotation;
            snapObj.parent = transform;
            snapped = false;
            StartCoroutine(noSnap);
        }
    }
}

    public class collider_helper : MonoBehaviour {
    public GameObject recieving;
    collider_help_reciever reciever;
    // Use this for initialization
    void Start () {
        reciever = recieving.GetComponent<collider_help_reciever>();
    }

    // Update is called once per frame
    void Update () {

    }

    void OnTriggerStay (Collider other)
    {
        reciever.OnTriggerEnter(other);
    }
    public interface collider_help_reciever
    {
        void OnTriggerEnter(Collider other);
    }

}

1 Ответ

0 голосов
/ 06 марта 2019

Что ж, ответом оказалось добавление числа с плавающей запятой (lastSnapTime) для хранения последнего времени, когда объекты были разъединены, и разрешение привязки происходить только по прошествии некоторого времени с момента их последнего разделения:

    public void OnTriggerEnter(Collider other)
{
    Debug.Log("enter");
    if (other.transform.GetInstanceID() == SnapTarget.GetInstanceID())
    {
        if (lastSnapTime + 0.1f < Time.time)
        {
            snapObj.position = SnapTarget.position;
            snapObj.rotation = SnapTarget.rotation;
            snapObj.parent = SnapTarget;
        }
    }
}
public void OnTriggerExit(Collider other)
{

    Debug.Log("exit");
    if (other.transform.GetInstanceID() == SnapTarget.GetInstanceID())
    {
        lastSnapTime = Time.time;
        snapObj.position = transform.position;
        snapObj.rotation = transform.rotation;
        snapObj.parent = transform;
        //StartCoroutine(noSnap);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...