Ошибки ввода SteamVR 2.2 - PullRequest
0 голосов
/ 19 марта 2019

Здравствуйте. В настоящее время я работаю над школьным проектом по взлому предметов и их удержанию. Я работал с инструментом разрушения в Блендере и импортировал мои объекты в единство и разбивал их с помощью Steam Player с каменным топором. Obj ломается слишком легко и искал, чтобы улучшить его. Через некоторое время я нашел парня по имени VR с Эндрю , который делает учебные пособия, такие как Unity + Vive Tutorial - Melee Damage . Работал взад и вперед над рукопашной атакой, в которой будут использованы стены, дерево и т. Д.

Мне удалось исправить код в определенной степени, но я продолжаю застрять в некоторых частях. Его недавнее видео на SteamVR помогло ускорить процесс, а также документация в формате pdf от SteamVR, а вот его недавнее видео на steamvr 2.2: [Unity] Обновление входа SteamVR 2.2

Вот сценарии, над которыми я работал, заставили их работать до сих пор, однако я застрял на 10 ошибках и не могу найти способ их исправить, некоторая помощь была бы благодарна!

Скрипт ViveInput: https://pastebin.com/Smm1vhTH

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR;


namespace Valve.VR.InteractionSystem.Sample
{
    public class ViveInput : MonoBehaviour
    {
        public SteamVR_Action_Boolean mDevice;

       // private SteamVR_TrackedObject mTrackeObject = null;
       private Interaction mInteraction = null;

        public Hand hand;
        public GameObject prefabToMagic;

        private void OnEnable()
        {
            if (hand == null)
                hand = this.GetComponent<Hand>();

        }


        void Awake()
        {
           // mTrackeObject = GetComponent<SteamVR_TrackedObject>();

           // mInteraction = GetComponent<Interaction>();
            //mDevice = SteamVR_Actions._default.GrabPinch;
        }

        /*private void Update()
        {
            if (SteamVR_Input.GetState("resource", "Resource", hand.handType))
                //(SteamVR_Actions.farming.Plant[hand.handType].state)
                Resource();

        } */





         private void Update()
        {
           // mDevice = SteamVR_Input.inActions.GrabPinch.GetStateUp(hand.handType);

            #region Trigger
            // Down
            if (SteamVR_Input.GetState("resource", "Resource", hand.handType))
            {
                mInteraction.Pickup(mDevice);
            }

            // Up
            if (mDevice.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger))
            {
                mInteraction.Drop(mDevice);
            }

            // Value
            Vector2 triggerValue = mDevice.GetAxis(EVRButtonId.k_EButton_SteamVR_Trigger);
            #endregion

            #region Grip
            /*// Down
            if (mDevice.GetPressDown(SteamVR_Controller.ButtonMask.Grip))
            {
                print("Grip down");
            }

            // Up
            if (mDevice.GetPressUp(SteamVR_Controller.ButtonMask.Grip))
            {
                print("Grip up");
            }
            #endregion

            #region Touchpad
            // Down
            if (mDevice.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
            {
                print("Touchpad down");
            }

            // Up
            if (mDevice.GetPressUp(SteamVR_Controller.ButtonMask.Touchpad))
            {
                print("Touchpad up");
            }  */

            Vector2 touchValue = mDevice.GetAxis(EVRButtonId.k_EButton_SteamVR_Touchpad);
            #endregion
        }  
    }
}

Скрипт взаимодействия: https://pastebin.com/Vq72jyCh

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR;


namespace Valve.VR.InteractionSystem.Sample
{

    public class Interaction : MonoBehaviour
    {
        public GameObject controllerMeshObject;

        private FixedJoint mAttachJoint = null;

        private Rigidbody mCurrentRigidBody = null;
        private List<Rigidbody> mContactRigidBodies = new List<Rigidbody>();

        void Awake()
        {
            mAttachJoint = GetComponent<FixedJoint>();
        }

        void OnTriggerEnter(Collider collider)
        {
            if (!collider.gameObject.CompareTag("Interactable"))
                return;

            // Add the object to contact list
            mContactRigidBodies.Add(collider.gameObject.GetComponent<Rigidbody>());
        }

        void OnTriggerExit(Collider collider)
        {
            if (!collider.gameObject.CompareTag("Interactable"))
                return;

            // Remove the object to contact list
            mContactRigidBodies.Remove(collider.gameObject.GetComponent<Rigidbody>());
        }

        public void Pickup()
        {
            // Get nearest
            mCurrentRigidBody = GetNearestRigidbody();

            if (!mCurrentRigidBody)
                return;

            // Set to position of axe
            mCurrentRigidBody.transform.position = transform.position;
            mCurrentRigidBody.transform.localEulerAngles = new Vector3(0, -180, -90);

            // Pass info to axe
            mCurrentRigidBody.gameObject.GetComponentInChildren<StoneAxe>().Setup(GetComponent<ViveInput>().mDevice, this);

            // Ensure the correct physics settings
            mCurrentRigidBody.useGravity = true;
            mCurrentRigidBody.isKinematic = false;

            // Connect to controller
            mAttachJoint.connectedBody = mCurrentRigidBody;

            // Disable tomato
            controllerMeshObject.SetActive(false);
        }

        public void Drop(SteamVR_Action_Boolean mDevice)
        {
            if (!mCurrentRigidBody)
                return;

            // Apply velocity
            if (device != null)
            {
                mCurrentRigidBody.velocity = device.velocity;
                mCurrentRigidBody.angularVelocity = device.angularVelocity;
            }

            // Disable physics
            else
            {
                mCurrentRigidBody.useGravity = false;
                mCurrentRigidBody.isKinematic = true;
            }

            // Disconnect from controller
            mAttachJoint.connectedBody = null;
            mCurrentRigidBody = null;

            // Enable tomato
            controllerMeshObject.SetActive(true);
        }

        private Rigidbody GetNearestRigidbody()
        {
            Rigidbody nearestRigidBody = null;

            float minDistance = float.MaxValue;
            float distance = 0.0f;

            // For each object we are touching
            foreach (Rigidbody contactBody in mContactRigidBodies)
            {
                // The length of the vector is square root of (x*x + y*y + z*z).
                distance = (contactBody.gameObject.transform.position - transform.position).sqrMagnitude;

                if (distance < minDistance)
                {
                    minDistance = distance;
                    nearestRigidBody = contactBody;
                }
            }

            return nearestRigidBody;
        }
    }

}

ShatterObject: https://pastebin.com/m5TdCaBr

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR.InteractionSystem;
using Valve.VR;

namespace Valve.VR.InteractionSystem.Sample
{

    public class ShatterOnCollision : MonoBehaviour
    {
        public GameObject mLogOne;
        public GameObject mLogTwo;
        public ParticleSystem Splinter;
        private Collider mCollider = null;

        void Awake()
        {
            mCollider = GetComponent<Collider>();
        }

        void OnTriggerEnter(Collider collider)
        {
            // Is it a blade
            if (!collider.gameObject.CompareTag("StoneAxe"))
                return;

            StoneAxe stoneaxe = collider.gameObject.GetComponent<StoneAxe>();

            // Is the blade in use?
            if (device.mDevice == null)
                return;

            // Check for log split
            Split(stoneaxe);
        }
        private void Split(StoneAxe stoneaxe)
        {
            Splinter.Play();

            // Split log
            if (stoneaxe.mDevice.velocity.magnitude > 3.0f)
            {
                // Disable collision, so we only split once
                mCollider.enabled = false;


                // Enable physics for both sides
                EnablePhysics(mLogOne);
                EnablePhysics(mLogTwo);
            }

            // Stick Axe
            else if (stoneaxe.mDevice.velocity.magnitude > 1.0f)
            {
                stoneaxe.mInteraction.Drop(null);
            }
        }
        private void EnablePhysics(GameObject log)
        {
            mLogOne.transform.parent = null;

            Rigidbody rigidBody = log.GetComponent<Rigidbody>();

            rigidBody.useGravity = true;
            rigidBody.isKinematic = false;
        }
    }



    /* void OnCollisionEnter()
     {
         GameObject.Instantiate(replacement, transform.position, transform.rotation);

             Destroy(gameObject);



     } */

}

Вот мой фрагмент об ошибках, которые показывают мои Unity Errors . Надеемся, что код и изображения немного помогли, и если у вас есть какие-либо советы или рекомендации по улучшению компоновки кода, производительности и т. Д., Не стесняйтесь говорить, я хотел бы получить как можно больше критики, это очень поможет моему классу, изучая с двух сторон и больше !!

Спасибо и хорошего дня!

...