- Home /
 
First Person Controller Target Shooting With Gun
I am developing small Game in which I have created first person controller with gun which is under the main camera of the first person. I have created prefab i want to target this prefab using gun and make explosion. But i am very new in unity so i don't know how do i code to shoot target from my gun. I have tried code but it is throwing null pointer exception.
Here is my code:
 function Update(){
   
       Shoot();
       
 } 
 
 function Shoot(){
     //if (shotSound) audio.PlayOneShot(shotSound); // play the shot sound
        var hit: RaycastHit;
     var ray : Ray = Camera.main.ViewportPointToRay (Vector3(0.5,0.5,0));
      
     if (Physics.Raycast (ray))
     {
         //var rot = Quaternion.FromToRotation(Vector3.up, hit.normal);
      
         if (hit.transform.tag == "Pickup"){ // if enemy hit...
            //pickupController.Collected(hit.gameObject);
             Debug.DrawLine (ray.origin, hit.point);
         }
     }       
 }
 
               I have also reffered script refference for raycast. pleaze help me to solve my problem.
Answer by robertbu · Feb 26, 2013 at 05:28 AM
You are getting the null pointer exception because you are not passing in hit as a parameter to Raycast() should be:
 if (Physics.Raycast(ray, hit))
 
               As for the rest, are you shooting a projectile, or is this a ray gun? An do you have any animation or script that shows an explosion?
No its not the ray gun. And I do not have animation or any script for explosion.
Solved my null pointer exception. but still how do i target my enemy?
Here is a mod to your script:
 public var goPrefab : GameObject;
 
 function Update(){
       Shoot();
 } 
  
 function Shoot(){
     //if (shotSound) audio.PlayOneShot(shotSound); // play the shot sound
     var hit: RaycastHit;
     var ray : Ray = Camera.main.ViewportPointToRay (Vector3(0.5,0.5,0));
  
     if (Physics.Raycast (ray, hit))
     {
         //var rot = Quaternion.FromToRotation(Vector3.up, hit.normal);
          Debug.Log("Name="+hit.collider.name);
        if (hit.collider.tag == "Pickup"){ // if enemy hit...
            //pickupController.Collected(hit.gameObject);
             Debug.DrawLine (ray.origin, hit.point);
             
             transform.LookAt(hit.point);
             var go : GameObject = Instantiate(goPrefab, transform.position, transform.rotation);
             go.rigidbody.AddForce(transform.forward * 2000.0);
         }
     }     
 }
 
                  Drag and drop your prefab bullet onto the goPrefab variable in the inspector (you can use a sphere with a rigidbody). It needs to be a true prefab, not a scene item. Attach the script to an empty game object just in front of the center of the camera and make it a child of the camera.
Your answer
 
             Follow this Question
Related Questions
Object Does not Destroyed While Shooting 1 Answer
AI Shooting for Aircraft 1 Answer
2D : RayCast Problem 1 Answer
Why does the wrong enemy die with this raycast? C# 2 Answers
A node in a childnode? 1 Answer