предисловие: я очень плохо знаком с 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;
}
}