0

前言:我对 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;
    }

}
4

0 回答 0