- Home /
Raycasting not adding force to rigidbody
As the title says, I'm trying to make a raycast addforce to a rigidbody. It's colliding and giving me the message (Hit a Box!) but not adding force at all. the box itself has a box collider, a rigidbody, and uses gravity. Here's the code for the shooting part:
var force = 2000;
var direction = transform.forward;
function Update(){
var forward : Vector3 = transform.TransformDirection(Vector3.forward) * 10;
if (Input.GetButtonDown("Fire1")){
if (shootEnabled == true){
if (Bullets > 0){
if (Clip > 0){
Shoot();
Bullets -= 1;
}
}
}
}
if (Bullets == 0){
if (Clip >= 1){
Clip -= 1;
Bullets = MaxBullets;
}
if (Clip == 0){
Bullets = 0;
}
}
OnGUI();
}
function Shoot(){
//var ray = Camera.main.ScreenPointToRay (Vector3(Screen.width/2,Screen.height/2,0));
//var hit: RaycastHit; // do a raycast
var cam : Transform = Camera.main.transform;
var ray = new Ray(cam.position, cam.forward);
var hit : RaycastHit;
var trf = transform; // a little optimization
MuzzleFlashOn();
if(Physics.Raycast (ray, hit, 1000)){
var rot = Quaternion.FromToRotation(Vector3.up, hit.normal);
audio.PlayOneShot(shotSound); // play the shot sound...
if(hit.collider.gameObject.tag == "Box"){
Debug.Log ("Hit A Box!");
if (sparksPrefab) Instantiate(sparksPrefab, hit.point, rot);
hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
}
if(hit.collider.gameObject.tag == "Enemy"){
Debug.Log ("Hit A Enemy!");
if (sparksPrefab) Instantiate(sparksPrefab, hit.point, rot);
} else {
if (sparksPrefab) Instantiate(sparksPrefab, hit.point, rot);
Debug.Log ("Hit Other!");
}
shootEnabled = false;
yield WaitForSeconds(shotInterval);
shootEnabled = true;
}
}
Answer by Owen-Reynolds · Jul 16, 2012 at 02:00 AM
Try printing direction
. I think setting a var to a non-constant in globals is an error. In C# it crashes (you're required to set it in Start.) I'd guess javascript is still an error, but makes it all 0's and keeps running.
Trying using transform.forward
instead of direction
in AddForce. That will push iin your current facing. Or for a "does this even work?" test, just use Vector3.up*20
.
Thanks, that helped alot! I'm not really a coder atm so when I have problems I sometimes can't solve it ):