- Home /
Raycast shooting in the middle of the screen
I want my raycast shooting to be 100% accurate so it hits the middle of the map but I don't know how to do that. Here is my shooting script
#pragma strict
var damage:float = 38;
var range = 100.0;
var force = 10.0;
var muzzleFlash : Renderer;
var muzzleLight : Light;
var UMPMenu: GUIStyle;
var ReloadMenu: GUIStyle;
var ReloadWarning = false;
static var _UMPCanReload = false;
var clipSize: int = 25;
var bulletsInClip = 25;
var bulletsLeft = 75;
var allowfire : boolean = true;
function Start (){
muzzleFlash.enabled = false;
muzzleLight.enabled = false;
}
function Update () {
if(Input.GetMouseButton(0)){
if(bulletsInClip >= 1){
if(allowfire == true){
fire();
}
}
}
if (Input.GetKeyDown (KeyCode.R)){
if(bulletsInClip == 0){
if(bulletsLeft >= 25){
Reload();
}
}
}
if(bulletsInClip == 0){
if(bulletsLeft >= 25){
ReloadWarning = true;
}
} else {
ReloadWarning = false;
}
if(bulletsInClip == 0){
if(bulletsLeft >= 25){
_UMPCanReload = true;
}
} else {
_UMPCanReload = false;
}
}
function OnGUI() {
if(ReloadWarning == true){
GUI.Label (Rect (Screen.width / 2.2, Screen.height / 2.5, 200, 200), "Press R to reload.", ReloadMenu);
}
GUI.Label (Rect (10, 650, 350, 350), "UMP .45", UMPMenu);
GUI.Label (Rect (10, 700, 350, 350), bulletsInClip + " / " + bulletsLeft, UMPMenu);
}
function fire(){
allowfire = false;
audio.Play();
bulletsInClip--;
var direction = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
// Did we hit anything?
if (Physics.Raycast (transform.position, direction, hit, range)) {
Debug.DrawRay(transform.position, direction * range);
// Apply a force to the rigidbody we hit
if (hit.rigidbody)
hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
muzzleFlash.renderer.enabled = true;
muzzleLight.enabled = true;
yield WaitForSeconds (0.04);
muzzleFlash.renderer.enabled = false;
muzzleLight.enabled = false;
yield WaitForSeconds(0.2);
allowfire = true;
}
function OnTriggerEnter(hit:Collider){
if(hit.tag == "Enemy"){
hit.transform.SendMessage("Damage",damage);
}
}
function Reload(){
allowfire = false;
yield WaitForSeconds (1);
bulletsInClip = clipSize;
bulletsLeft = (bulletsLeft - clipSize);
yield WaitForSeconds (0.3);
allowfire = true;
}
I am not realy understanding from where you want to shot and in which direction. "hits the middle of the map" --> what map?
Answer by GBFM · Jan 25, 2014 at 05:29 PM
I am assuming you want a ray cast from your camera forward so:
if (Physics.Raycast (cameraTransform.position, cameraTransform.forward, hit)) {
}
where cameraTransform is your main camera, wouldn't do the trick?
I'm getting the error BCE0005: $$anonymous$$ identifier: 'cameraTransform'.
var cameraTransform: Transform;
and then assign the main camera to that on the editor
Just read, what GBF$$anonymous$$ wrote. "where cameraTransform is your main camera" For your main camera it would look like this:
if (Physics.Raycast (camera.main.transform.position,camera.main.transform.forward, hit)) {
}
Your answer
Follow this Question
Related Questions
Using raycast gun to take down life of enemy when shot 1 Answer
Raycast shooting 1 Answer
Trouble with Raycast shooting 1 Answer
Projectile Firing/Gun script 1 Answer
Shotlock System 1 Answer