- Home /
Bullet Spawn Point Not "Locking" to Position When Using Animation Transform Properties
Hello,
I'm working on a side-scrolling shooting game, similar to old-school Megaman and Metroid. I have a spawn point at the tip of my sprite's gun, and am instantiating a bullet every time the player presses the fire button. The bullet has a Rigidbody2D attached to it, which is adding force to the right. I am attempting to change the spawn point's transform position and rotation via the Animation's property when loading different animations (such as aiming left, up, etc.), and the problem I'm having is that the spawn point isn't "locking" to the position and rotation I want, so the bullets are instantiating at inconsistent positions and rotations. In the hierarchy, if I look at my Gun GameObject, the rotation and position values are jumping all over the place. Am I going about this the wrong way or what? I've been pulling my hair out trying to solve this, and I simply am unable to do so. I've included both the code for the PlayerShoot script and the Bullet physics. I would very much appreciate any ideas. Thanks!
P.S. I apologize for the sloppy code, like unused variables and whatnot. I need to go back in and clean when I get the chance.
Bullet Script
public class Bullet : MonoBehaviour
{
private Enemy enemy;
private PlayerController player;
private PlayerShoot playerShoot;
private Rigidbody2D myRigidbody;
public float speed;
private CameraBoundsX cam;
// Use this for initialization
void Start()
{
myRigidbody = GetComponent<Rigidbody2D>();
playerShoot = FindObjectOfType<PlayerShoot>();
enemy = FindObjectOfType<Enemy>();
player = FindObjectOfType<PlayerController>();
cam = FindObjectOfType<CameraBoundsX>();
}
// Update is called once per frame
void Update()
{
myRigidbody.AddForce(transform.right * speed);
StartCoroutine(DestroyBullet());
}
IEnumerator DestroyBullet()
{
yield return new WaitForSeconds(0.5f);
Destroy(gameObject);
}
}
Shooting Script
public class PlayerShoot : MonoBehaviour
{
private SoundPlayer soundPlayer;
public bool canShoot;
public float fireRate = 0;
public float damage = 10;
public LayerMask notToHit;
private float timeToFire = 0;
public Transform spawnPosition;
// Use this for initialization
void Start()
{
soundPlayer = FindObjectOfType<SoundPlayer>();
}
// Update is called once per frame
void FixedUpdate()
{
if (Input.GetButtonDown("Attack") && canShoot)
{
Shoot();
}
}
void Shoot()
{
Instantiate(Resources.Load("Bullet"), spawnPosition.transform.position, spawnPosition.transform.rotation);
soundPlayer.audio.PlayOneShot(soundPlayer.shootSound);
}
}
Your answer
