So, I'm trying to do a simple shooting thing. All I need it to do is send a sphere forward from the camera at left click. I have the bullet and the target both set as rigid bodies with gravity and angular drag off. Here's the script for the bullet: Code (csharp): var isActive:boolean = false; var playerT:Transform; function Update () { getInput(); if(isActive) { transform.position += transform.forward * 10; } } function getInput() { if(Input.GetButton("Fire1")) { transform.forward = playerT.forward; transform.position = playerT.position; isActive = true; } } function OnCollisionEnter(other : Collision) { print("This collider is named: " + other.contacts[0].otherCollider.name); } playerT is the transform from the MainCamera. The problem is that after the first collision if I fire the bullet again its forward vector starts to change mid-flight. It starts correct, but then it will start curving. Sometimes it's so extreme the bullet corkscrews down the range. I'm thinking there is something about rigid bodies that I don't know about, because it didn't do this before I made the bullet a rigid body. Thanks.
I think that you have to apply a forward force instead of translate. Try something like this: Code (csharp): var explosionPower: float = 2000.0; //bullet.rigidbody.AddForce(transform.forward * explosionPower); rigidbody.AddForce(transform.forward * explosionPower); instead of Code (csharp): transform.position += transform.forward * 10;
That didn't do it. But I fixed it another way. I just reset the location of the bullet to the camera's location and set isActive to false on collision. Not exactly sure what happened, it's kind of a dead rat, but whatever. Thanks anyways.
Ok, more issues I could use some help with. Script is attached to bullet object. I have a field variable called muzzleVel, it's a float with value 2820. I move the bullet via this line: transform.position -= transform.forward * (muzzleVel * Time.deltaTime); The issue I'm having is that changing the value of muzzleVel doesn't do anything. I can't imagine why this would be, there must be something I'm missing. I'll post the whole script below for reference. Thanks. Code (csharp): var timeDilation:float = 0.33; var isActive:boolean = false; var playerT:Transform; var hitMarkerObj:GameObject; var bulletCam:GameObject; var mainCam:GameObject; var muzzleVel:float = 2820; //fps var flightDistance:float = 0.0; var RPS:float = 0.0; var twist:float = 10.0; function Start() { bulletCam.active = false; } function Update () { getInput(); if(isActive) { transform.position -= transform.forward * (muzzleVel * Time.deltaTime); flightDistance += (muzzleVel * Time.deltaTime); transform.Rotate(0, 0, (360*(RPS*Time.deltaTime))); bulletCam.active = true; mainCam.active = false; bulletCam.transform.position = transform.position - Vector3(1, 0, 1); bulletCam.transform.rotation.y = 0; bulletCam.transform.Rotate(0, 45, 0); if(flightDistance > 3500) { isActive = false; transform.position = playerT.position; } } else { bulletCam.active = false; mainCam.active = true; } } function getInput() { if(Input.GetButton("Fire1")) { transform.forward = -playerT.forward; transform.position = playerT.position; isActive = true; flightDistance = 0; RPS = (12/twist)*muzzleVel; } } function OnCollisionEnter(other : Collision) { print("This collider is named: " + other.contacts[0].otherCollider.name); var hitMarkerGO:GameObject = Instantiate(hitMarkerObj, other.contacts[0].point, Quaternion.AngleAxis(180, Vector3.up)); hitMarkerGO.transform.position.z -= 20; transform.position = playerT.position; isActive = false; }