- Home /
Raycast shooting in the middle of the screen
I need help with my raycast shooting, it isn't shooting in the middle of my cross but my script should have it shooting in the middle of my screen. Please help
Shooting script
#pragma strict
var damage:float = 100;
var range = 8000.0;
var force = 10.0;
var muzzleFlash : Renderer;
var muzzleLight : Light;
var SniperMenu: GUIStyle;
var ReloadMenu: GUIStyle;
var ReloadWarning = false;
var cameraTransform: Transform;
static var _SniperCanReload = false;
var clipSize: int = 5;
var bulletsInClip = 5;
var bulletsLeft = 15;
static var allowfire : boolean = true;
function Start (){
muzzleFlash.enabled = false;
muzzleLight.enabled = false;
}
function Update () {
if(Input.GetMouseButtonUp(0)){
if(bulletsInClip >= 1){
if(allowfire == true){
fire();
}
}
}
if (Input.GetKeyDown (KeyCode.R)){
if(bulletsInClip == 0){
if(bulletsLeft >= 5){
Reload();
}
}
}
if(bulletsInClip == 0){
if(bulletsLeft >= 5){
ReloadWarning = true;
}
} else {
ReloadWarning = false;
}
if(bulletsInClip == 0){
if(bulletsLeft >= 5){
_SniperCanReload = true;
}
} else {
_SniperCanReload = 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), "Sniper", SniperMenu);
GUI.Label (Rect (10, 700, 350, 350), bulletsInClip + " / " + bulletsLeft, SniperMenu);
}
function fire(){
allowfire = false;
audio.Play();
bulletsInClip--;
var direction = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
// Did we hit anything?
if (Physics.Raycast (cameraTransform.position, cameraTransform.forward, hit)) {
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.1);
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;
}
Crosshair Script
var crosshairTexture : Texture2D;
var position : Rect;
function Start()
{
position = Rect((Screen.width - crosshairTexture.width) / 2, (Screen.height -
crosshairTexture.height) /2, crosshairTexture.width, crosshairTexture.height);
}
function OnGUI()
{
GUI.DrawTexture(position, crosshairTexture);
}
Are you setting cameraTransform anywhere? I see it being reference but not initialized.
Hmm not too much jumping out at me from your code but I use C#.
So where is it shooting if not the middle of the screen?
I'm assu$$anonymous$$g this script is attached to the camera and the cameraTransform variable is assigned correctly?
A little confused since you are using transform for the DrawRay but cameraTransform for the Raycast? Not sure if they are both the same transform since I'm so familiar with C#. I'm guessing using just "var" is a public variable and you did assign the cameraTransform in the Unity Editor?
Hmm, if you assigned everything correctly the only thing I can think of is to check out the camera position if it's a child object. You could possibly have to use local rotation or transform.parent stuff but it's really just impossible to tell for me with just the code.
Probably not much help but that's all I got unfortunately.
In your crosshair script, I think your position is off. You are subtracting the entire width of the texture, I believe you want to div that by /2 first, then take the result and div by 2 as you are. Since you are taking the entire width, your left offset will be off a bit, same for height.
It doesn't hit the middle of my cross hair, which I changed the script for.
var crosshairTexture : Texture2D;
var position : Rect;
function Start()
{
position = Rect(Screen.width / 2, Screen.height / 2, crosshairTexture.width, crosshairTexture.height);
}
function OnGUI()
{
GUI.DrawTexture(position, crosshairTexture);
}
Your answer
Follow this Question
Related Questions
FPS shooting 1 Answer
GUI Follow RaycastHit 2 Answers
Raycast shooting 1 Answer
How to add platform motion to player controller without parenting? - Mostly working code 1 Answer
Held cube clips through wall 0 Answers