- 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