Hi dear community,
i am still new to C# in unity. I am grateful for a solution to this little problem i have.
My objective is to change the Player’s Sprite once they have collected a game item.
Please see my script below which does nothing to the player when she collides into her helmet.
What am I missing?
Thank you so much,
Simone
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// Makes the Player Walk Left & Right, Jump using animations
///
public class GigiPlayerCtrl : MonoBehaviour
{
Rigidbody2D rb;
public int speedBoost;
public float jumpSpeed; // set this to 600
SpriteRenderer sr;
Animator anim;
bool isJumping;
public Sprite gigiHelmet;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody2D>();
sr = GetComponent<SpriteRenderer>();
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
float playerSpeed = Input.GetAxisRaw("Horizontal"); // value will be negative 1, -1 or 0.
playerSpeed *= speedBoost; // playerSpeed = playerSpeed * speedBoost
if (playerSpeed != 0)
MoveHorizontal(playerSpeed);
else
StopMoving();
if (Input.GetButtonDown("Jump"))
Jump();
}
void MoveHorizontal(float playerSpeed)
{
rb.velocity = new Vector2(playerSpeed, rb.velocity.y);
if (playerSpeed < 0)
sr.flipX = true;
else if (playerSpeed > 0)
sr.flipX = false;
if (!isJumping)
anim.SetInteger("State", 1);
}
// Update is called once per frame
void StopMoving()
{
rb.velocity = new Vector2(0, rb.velocity.y);
if (!isJumping)
anim.SetInteger("State", 0);
}
void Jump()
{
isJumping = true;
rb.AddForce(new Vector2(0, jumpSpeed)); // Make the player jump upwards ( the Y axis)
anim.SetInteger("State", 2);
AudioManager.instance.PlaySFX(1);
}
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Ground"))
{
isJumping = false;
}
else if (other.gameObject.CompareTag("Helmet"))
{
gameObject.GetComponent<SpriteRenderer>().sprite = gigiHelmet;
}
}
}