Bullits of player not shooting forward and dealing damage to player- how to fix?
I made a copy of the game that I'm making. In the first game the player would get damage from shooting his own bullets and the bullet does shoot forward, but now in the second one it now deals damage to player and doesn't move forward.
public class Boundary// Custom class to contain the boundary values;
{
public float xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour
{
public Rigidbody rb;
public float speed; // The speed multiplayer of the ship movement;
public Boundary boundary;// Gives the custom class a var name that can be called up within the script;
public float tilt;
public GameObject bullit;
public Transform bullitSpawn;
public float fireRate;
private float nextFire;
public GameManager GM;
public DamageScript damageScript;
public float dammageTotal;
// Start is called before the first frame update;
void Start()
{
rb = GetComponent<Rigidbody>();// Gives the rigidbody a var name that can be used in the script;
}
void Update()
{
if (Input.GetButton("Jump") && Time.time > nextFire)
{
nextFire = Time.time + fireRate;
Instantiate(bullit, bullitSpawn.position, bullitSpawn.rotation);
}
}
public void FixedUpdate()
{
// Gets direction input from unity defualt movement settings;
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
// Below is the section that controlls the movement of the ship and its movement speed;
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.velocity = movement * speed;
// Below is the movement boundaries set for the player;
rb.position = new Vector3
(
Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
6.0f,
Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
);
rb.rotation = Quaternion.Euler(0.0f, 0.0f, rb.velocity.x * -tilt);
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Bullits"))
{
dammageTotal = damageScript.damageValue;
GM.DamageReceived(dammageTotal);
}
}
}
public class BullitMove : MonoBehaviour
{
public Rigidbody rb;
public float bulletSpeed;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
rb.velocity = transform.forward * bulletSpeed;
}
}
Answer by peacemakers1980 · May 21, 2021 at 05:10 PM
Since a Bullet is not part of the player itself, I would think it would be best to not handle the bullets from the player. You should proboly look at making a PreFab for the Bullet itself, with its model, animations, move scripts and variables, and link it to the players script. When the players script determines it needs a new bullet, instansiate the new bullet prefab with the variables you want like the velocity and tilt. This way if you shoot twice each bullet can have its own varaibles such as tilt, creating them inside the main script without an array for each bullet simply replaces one for the other. So if you shoot and then shoot again before the bullet hits a target or is otherwise destroyed, its destroyed by the new bullet being created or simply replaced, in a sence the old bullet position for example becomes the new one and no new one is actually made. Making a prefab and instansiating it will allow each bullet to be seen as a seperate gameobject and handeled on its own regardless of what the others are doing.
Your answer
Follow this Question
Related Questions
(Help) I am having trouble with creating a simple 2D game in Unity. Please help. :) 0 Answers
Isometric shooter - Bullets 1 Answer
How do I count Hits ?? 2 Answers
linerender shoots in center of screen 0 Answers
My character won't move forward? -1 Answers