- Home /
Question by
Ronin Davis · Apr 24, 2015 at 06:01 PM ·
raycastmouseshootingraycastingshoot
Problem with raycasting in direction of mouse
Hi, i have been working on a 2d platform shooter for a while now, and i have run into a problem with a shooting script that uses raycasting. I can't get to raycast in the direction of the mouse correctly. Her is my script:
#pragma strict
public var firing : GameObject;
var range: float = 1000;
var force: float = 1000;
var clip : int = 20;
var bulletsPerClip:int = 60;
var reloadTime :float = 3.3;
var bulletsLeft: int = 0;
var shootTimer: float = 0;
var shootCooler: float = 0.1;
var shootAudio: AudioClip;
var reloadAudio: AudioClip;
var damage: int = 50;
var aimScript;
var gunEnd : Transform;
var lookFactor = 0.8;
private var mousePos : Vector2;
private var screenPos : Vector3;
var headshotDamage : float = 100;
var legshotDamage : float = 25;
function Start () {
bulletsLeft = bulletsPerClip;
}
function Update () {
mousePos = Input.mousePosition;
screenPos = GetComponent.<Camera>().main.ScreenToWorldPoint(Vector3(mousePos.x, mousePos.y, transform.position.z - GetComponent.<Camera>().main.transform.position.z));
if(shootTimer > 0) {
shootTimer -= Time.deltaTime;
}
if(shootTimer < 0) {
shootTimer = 0;
}
if(Input.GetMouseButton(0) && bulletsLeft) {
if(shootTimer == 0) {
PlayShootAudio();
RayShoot();
shootTimer = shootCooler;
}
}else{
firing.SetActive(false);
}
}
function RayShoot(){
var hit: RaycastHit;
var directionRay = gunEnd.TransformDirection(mousePos);
Debug.DrawRay(gunEnd.position, directionRay * range, Color.red);
firing.SetActive(true);
if(Physics.Raycast(gunEnd.position, directionRay, hit, range)){
if(hit.collider.gameObject.name == GameObject.FindWithTag("Body").gameObject.name){
Debug.Log("BodyShot");
}else if(hit.collider.gameObject.name == GameObject.FindWithTag("Head").gameObject.name){
damage = headshotDamage;
}else if(hit.collider.gameObject.name == GameObject.FindWithTag("Legs").gameObject.name){
damage = legshotDamage;
}
}
bulletsLeft --;
if(bulletsLeft < 0){
bulletsLeft = 0;
clip --;
}
if(bulletsLeft == 0){
Reload();
}
}
function Reload(){
PlayReloadAudio();
yield WaitForSeconds(reloadTime);
if(clip >0){
bulletsLeft = bulletsPerClip;
}
}
function PlayShootAudio(){
GetComponent.<AudioSource>().PlayOneShot(shootAudio);
}
function PlayReloadAudio(){
GetComponent.<AudioSource>().PlayOneShot(reloadAudio);
}
Can someone please tell me where i am going wrong the part way i state which direction i want it to go is here:
function RayShoot(){
var hit: RaycastHit;
var directionRay = gunEnd.TransformDirection(mousePos);
Debug.DrawRay(gunEnd.position, directionRay * range, Color.red);
firing.SetActive(true);
if(Physics.Raycast(gunEnd.position, directionRay, hit, range)){
Comment