Please help me solve the problem with shoot a gun(HTC VIVE)
How to attach shooting gun to my eyes???(HTC vive) When I press the button on the controller, it should fire from my eyes. But it doesn't work! please help me what to do!! I really need your help! Please save my life -------------> click on the link: https://youtu.be/_TYlZTRWirA
There are two scrips(1. VRYK_ObjectAutoGrab//2.Gun) to attach the gun to front view of camera. -------------------------------------------------------------------------------------------------------------------------------------------
// 1. VRYK_ObjectAutoGrab
namespace VRTK { using UnityEngine; using System.Collections;
public class VRTK_ObjectAutoGrab : MonoBehaviour { public VRTK_InteractableObject objectToGrab; public bool cloneGrabbedObject;
private VRTK_InteractGrab controller;
private IEnumerator Start()
{
controller = GetComponent<VRTK_InteractGrab>();
if (!controller)
{
Debug.LogError("The VRTK_InteractGrab script is required to be attached to the controller along with this script.");
yield break;
}
VRTK_InteractableObject grabbableObject = objectToGrab;
if (cloneGrabbedObject)
{
grabbableObject = Instantiate(objectToGrab);
}
controller.GetComponent<VRTK_InteractTouch>().ForceStopTouching();
controller.GetComponent<VRTK_InteractTouch>().ForceTouch(grabbableObject.gameObject);
controller.AttemptGrab();
}
} }
//2. Gun
using UnityEngine; using VRTK;
public class Gun : VRTK_InteractableObject { public static Camera main; private GameObject bullet; private float bulletSpeed = 2000f; private float bulletLife = 1f; private AudioSource gunAudio;
public override void StartUsing(GameObject usingObject) { main = GetComponentInParent(); base.StartUsing(usingObject); FireBullet(); }
protected override void Start() { gunAudio = GetComponent(); base.Start(); bullet = transform.Find("Bullet").gameObject; bullet.SetActive(false); }
private void FireBullet() { GameObject bulletClone = Instantiate(bullet, bullet.transform.position, bullet.transform.rotation) as GameObject; bulletClone.SetActive(true); Rigidbody rb = bulletClone.GetComponent(); rb.AddForce(-bullet.transform.forward * bulletSpeed); Destroy(bulletClone, bulletLife); } }
1) $$anonymous$$ake the gun a child of CameraRig, so that it moves and rotates with the camera 2) Remove the $$anonymous$$us sign from "-bullet.transform.forward", because the bullets are flying in the wrong direction.
Answer by DK86 · Aug 31, 2016 at 05:50 AM
I think it has something to do with the script(1.objectautograb). In that part, I need to arrange the transform and position to attach the object (gun) to Camera eyes (not comera body) Could you let me know how to do that????please?
I don't have much experience with VR program$$anonymous$$g and i don't see the pickup logic in the code you posted. So i can only give some general hints.
Add a "public Transform camera_transform;" to the Gun script. In the editor drag the "Camera (eye)" object into the slot for that variable.
After the gun has been picked up, you need to perform these steps with the gun object:
transform.SetParent( camera_transform );
transform.position = camera_transform.position;
transform.rotation = camera_transform.rotation;
Untested of course, but maybe this helps you to get closer to what you want.