You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
 | 
						|
using UnityEngine;
 | 
						|
using System.Collections;
 | 
						|
 | 
						|
namespace Valve.VR.Extras
 | 
						|
{
 | 
						|
    [RequireComponent(typeof(SteamVR_TrackedObject))]
 | 
						|
    public class SteamVR_TestThrow : MonoBehaviour
 | 
						|
    {
 | 
						|
        public GameObject prefab;
 | 
						|
        public Rigidbody attachPoint;
 | 
						|
 | 
						|
        public SteamVR_Action_Boolean spawn = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("InteractUI");
 | 
						|
 | 
						|
        SteamVR_Behaviour_Pose trackedObj;
 | 
						|
        FixedJoint joint;
 | 
						|
 | 
						|
        private void Awake()
 | 
						|
        {
 | 
						|
            trackedObj = GetComponent<SteamVR_Behaviour_Pose>();
 | 
						|
        }
 | 
						|
 | 
						|
        private void FixedUpdate()
 | 
						|
        {
 | 
						|
            if (joint == null && spawn.GetStateDown(trackedObj.inputSource))
 | 
						|
            {
 | 
						|
                GameObject go = GameObject.Instantiate(prefab);
 | 
						|
                go.transform.position = attachPoint.transform.position;
 | 
						|
 | 
						|
                joint = go.AddComponent<FixedJoint>();
 | 
						|
                joint.connectedBody = attachPoint;
 | 
						|
            }
 | 
						|
            else if (joint != null && spawn.GetStateUp(trackedObj.inputSource))
 | 
						|
            {
 | 
						|
                GameObject go = joint.gameObject;
 | 
						|
                Rigidbody rigidbody = go.GetComponent<Rigidbody>();
 | 
						|
                Object.DestroyImmediate(joint);
 | 
						|
                joint = null;
 | 
						|
                Object.Destroy(go, 15.0f);
 | 
						|
 | 
						|
                // We should probably apply the offset between trackedObj.transform.position
 | 
						|
                // and device.transform.pos to insert into the physics sim at the correct
 | 
						|
                // location, however, we would then want to predict ahead the visual representation
 | 
						|
                // by the same amount we are predicting our render poses.
 | 
						|
 | 
						|
                Transform origin = trackedObj.origin ? trackedObj.origin : trackedObj.transform.parent;
 | 
						|
                if (origin != null)
 | 
						|
                {
 | 
						|
                    rigidbody.velocity = origin.TransformVector(trackedObj.GetVelocity());
 | 
						|
                    rigidbody.angularVelocity = origin.TransformVector(trackedObj.GetAngularVelocity());
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    rigidbody.velocity = trackedObj.GetVelocity();
 | 
						|
                    rigidbody.angularVelocity = trackedObj.GetAngularVelocity();
 | 
						|
                }
 | 
						|
 | 
						|
                rigidbody.maxAngularVelocity = rigidbody.angularVelocity.magnitude;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |