- Home /
shooting in 2-d
Im trying to shoot in the y-axis however the bullet is coming from the left side in the z axis of the screen instead from the object I want it to come from This is my code
var projectile : Rigidbody; var initialSpeed = 20.0; var reloadTime = 0.5; var ammoCount = 20; private var lastShot = -10.0;
function Fire () { // Did the time exceed the reload time? if (Time.time > reloadTime + lastShot && ammoCount > 0) { // create a new projectile, use the same position and rotation as the Launcher. var instantiatedProjectile : Rigidbody = Instantiate (projectile, transform.position, transform.rotation);
// Give it an initial forward velocity. The direction is along the z-axis of the missile launcher's transform. instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, initialSpeed));
// Ignore collisions between the missile and the character controller
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
lastShot = Time.time;
ammoCount--;
}
}
I think you're just a little confused about the axes themselves. In Unity, the global y axis represents the up vector while the x and z represent side vectors. The local x, y, and z axes represent the right, up and forward axes of the transform respectively. When you say you want to shoot in the y axis (or up axis), which one do you want local or global? Since you are creating a velocity vector3 of initialSpeed on the local Z axis of the transform, of course it will have a velocity along the local Z (not Y) axis. Please rephrase to provide a clearer idea of your use case?
Answer by heiheiun · Jun 20, 2011 at 09:12 AM
To see "initialSpeed", in "transform.TransformDirection(0,0,initialSpeed)",
change to "transform.TransformDirection(0,initialSpeed,0)"
Because "transform.TransformDirection(x,y,z)"
var projectile : Rigidbody;
var initialSpeed = 20.0;
var reloadTime = 0.5;
var ammoCount = 20;
private var lastShot = -10.0;
function Fire ()
{
// Did the time exceed the reload time?
if (Time.time > reloadTime + lastShot && ammoCount > 0)
{
// create a new projectile, use the same position and rotation as the Launcher.
var instantiatedProjectile : Rigidbody = Instantiate (projectile, transform.position, transform.rotation);
// Give it an initial forward velocity. The direction is along the z-axis of the missile launcher's transform.
instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, initialSpeed,0));
// Ignore collisions between the missile and the character controller
Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);
lastShot = Time.time;
ammoCount--;
}
}
Your answer
Follow this Question
Related Questions
Shooting a bullet with the same rotation as the gameobject that spawns it. 2D 1 Answer
Help rotating gun towards mouse position (with flipping) 1 Answer
Getting 2D projectiles that fire in the direction of the mouse position to work in unity 5? 0 Answers
Player Flipping and Shot/Tilemap bugs 0 Answers