How can I make the shoot function work from UI button?
I'm working on a very simple space shooting game that scrolls to the right. I have a PlayerController script that handles moving and shooting. When I test the shooting with keyboard and mouse there is no problem. The laser prefab instantiates and goes to the right of the screen and is destroyed when it reaches a certain value in transform.position.x. When I set up a UI button the laser instantiates not in front of the player character but in the middle of the screen. But now it doesn't even shoot. The way I set it up is on the onClick section of the UI button I assign the Player Character prefab and use the Shoot function that is included in the player controller script. Here's the script;
void Update()
{
Movement();
TouchMovement();
/*if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
{
Shoot();
}
*/
}
private void TouchMovement()
{
if(Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
Vector3 touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
touchPosition.z = 0f;
transform.position = touchPosition;
//Barrier
if (transform.position.x < -5.07f)
{
transform.position = new Vector3(-5.07f, transform.position.y, 0);
}
if (transform.position.x > 0.73f)
{
transform.position = new Vector3(0.73f, transform.position.y, 0);
}
if (transform.position.y > 4.08f)
{
transform.position = new Vector3(transform.position.x, 4.08f, 0);
}
if (transform.position.y < -4.12f)
{
transform.position = new Vector3(transform.position.x, -4.12f, 0);
}
}
}
private void Movement()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
transform.Translate(Vector3.right * speed * horizontalInput * Time.deltaTime * 3.0f);
transform.Translate(Vector3.up * speed * verticalInput * Time.deltaTime * 3.0f);
//Barrier
if(transform.position.x < -5.07f)
{
transform.position = new Vector3(-5.07f, transform.position.y, 0);
}
if (transform.position.x > 0.73f)
{
transform.position = new Vector3(0.73f, transform.position.y, 0);
}
if (transform.position.y > 4.08f)
{
transform.position = new Vector3(transform.position.x, 4.08f, 0);
}
if (transform.position.y < -4.12f)
{
transform.position = new Vector3(transform.position.x, -4.12f, 0);
}
}
public void Shoot()
{
if (Time.time > nextFire)
{
Instantiate(laserPrefab, Player.transform.position + new Vector3(1.4f, 0f, 0), Quaternion.identity);
nextFire = Time.time + fireRate;
}
}
}
Any help would be greatly appreciated as I've been trying to solve it myself using different posts and the Unity Screipting API for a few days now.
In the onClick
event of the button, you must drag & drop the player in the scene, not the prefab in your Project
folder, you know?
How do you initialize the Player
variable you use in the Shoot
function?
Do you get any error in the console at runtime?
Your answer

Follow this Question
Related Questions
How I can Open a Previous Scene with button back !? 3 Answers
How does CollisionFlags work? 0 Answers
How to change scripting runtime to 4.7.2 in Unity 2019.1.0f2? It is by default targeting 4.7.1 0 Answers
First person shooter : Leaning! 2 Answers
Implementing an animation command in a commands queue system 1 Answer