Не могу родительские объекты в единстве для сценария Oculus Quest Grab - PullRequest
0 голосов
/ 24 февраля 2020

предисловие: я очень плохо знаком с c#, и это сценарий захвата объектов, который я взял из префаба и отредактировал.

цель сценария: определить, находится ли игровой объект на расстоянии захвата. если это так, то при нажатии триггера захвата привязать объект к виртуальной руке. когда триггер отпущен, удалите родительские отношения. Кроме того, пока объект привязан к контроллеру, если удерживать кнопку B, масштабируйте объект вверх, а если удерживайте кнопку A, уменьшайте масштаб объекта и сбрасывайте масштаб при нажатии пальца.

Я могу видеть, когда мой контроллер сталкивается с игровым объектом, но когда я нажимаю назначенную кнопку для родительского объекта, кажется, ничего не происходит.

Я был бы очень признателен за любую помощь, которую я мог бы получить с этим сценарием, так как может быть значительная сумма, я делаю неправильно.

Я должен упомянуть, что мне не нужны никакие физические симуляции, все, что мне нужно, - это возможность манипулировать объектом, плавающим в пространстве, для просмотра.

Заранее спасибо!

Вот мой сценарий:

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

public class Grabber : MonoBehaviour
{

    // Update is called once per frame
    void Update()
    {
        OVRInput.Update();

        if ((OVRInput.Get(OVRInput.Axis1D.SecondaryHandTrigger)) > 0.2f && CollidingObject)
        {
            GrabObject();
        }
        if ((OVRInput.Get(OVRInput.Axis1D.SecondaryHandTrigger)) < 0.2f && ObjectInHand)
        {
            ReleaseObject();
        }
        if (OVRInput.Get(OVRInput.Button.Two) && ObjectInHand)
        {
            ScaleUp();
        }
        if (OVRInput.Get(OVRInput.Button.One) && ObjectInHand)
        {
            ScaleDown();
        }
        if (OVRInput.Get(OVRInput.Button.SecondaryThumbstick) && ObjectInHand)
        {
            ScaleReset();
        }
    }


    public GameObject CollidingObject;
    public GameObject ObjectInHand;

    public void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.GetComponent<Rigidbody>())
        {
            CollidingObject = other.gameObject;
        }
    }

    public void OnTriggerExit(Collider other)
    {
        CollidingObject = null;
    }   

    private void GrabObject()
    {
        ObjectInHand = CollidingObject;
        ObjectInHand.transform.SetParent(this.transform);
        ObjectInHand.GetComponent<Rigidbody>().isKinematic = true;
    }

    private void ReleaseObject()
    {
        ObjectInHand.GetComponent<Rigidbody>().isKinematic = false;
        ObjectInHand.transform.SetParent(null);
        ObjectInHand = null;
    }

    Vector3 scaleChangeUp = new Vector3(0.01f, 0.01f, 0.01f);
    Vector3 scaleChangeDown = new Vector3(-0.01f, -0.01f, -0.01f);
    public void ScaleUp()
    {
        ObjectInHand.transform.localScale += scaleChangeUp;
    }

    public void ScaleDown()
    {
        ObjectInHand.transform.localScale += scaleChangeDown;
    }

    private void ScaleReset()
    {
        ObjectInHand.transform.localScale = Vector3.one;
    }

}
...