Im pretty sure the whole code is wrong so here it is:
public Sprite Running;
public Sprite NoFuel;
public GameObject Player;
public SpriteRenderer SpriteRenderer;
public int Fuel;
public bool HasFuelDefault;
void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.name == Player.name && HasFuelDefault == true)
{
HasFuelDefault = false;
SpriteRenderer.Sprite = "FireEx_1";
yield return new WaitForSeconds(Fuel);
SpriteRenderer.Sprite = NoFuel;
}
Here are my errors:
Assets\Scripts\FireExting.cs(19,28): error CS1061: 'SpriteRenderer' does not contain a definition for 'Sprite' and no accessible extension method 'Sprite' accepting a first argument of type 'SpriteRenderer' could be found (are you missing a using directive or an assembly reference?)
Assets\Scripts\FireExting.cs(19,28): error CS1061: 'SpriteRenderer' does not contain a definition for 'Sprite' and no accessible extension method 'Sprite' accepting a first argument of type 'SpriteRenderer' could be found (are you missing a using directive or an assembly reference?)
Assets\Scripts\FireExting.cs(14,10): error CS1624: The body of 'FireExting.OnCollisionEnter2D(Collision2D)' cannot be an iterator block because 'void' is not an iterator interface type
Please explain them and tell me how to fix them.
Hi, see below.
Assets\Scripts\FireExting.cs(19,28): error CS1061: 'SpriteRenderer' does not contain a definition for 'Sprite' and no accessible extension method 'Sprite' accepting a first argument of type 'SpriteRenderer' could be found (are you missing a using directive or an assembly reference?)
This could be caused due the wrong import, as the SpriteRenderer definition of “sprite” is lowercased.
SpriteRenderer.sprite = someSprite.
On that note, to use SpriteRenderer.sprite
you need to provide a sprite object, not a string.
public SpriteRenderer spriteRenderer;
public Sprite someSprite;
private void YourMethodName() {
spriteRenderer.sprite = someSprite;
}
Assets\Scripts\FireExting.cs(14,10): error CS1624: The body of 'FireExting.OnCollisionEnter2D(Collision2D)' cannot be an iterator block because 'void' is not an iterator interface type
You’re trying to use a ‘void’ method as an enumerator method. Void methods have no return.
For you to use WaitForSeconds() you’d need to define an IEnumerator method.
See below on definition and use;
void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.name == Player.name && HasFuelDefault == true)
{
StartCoroutine(DoSomething(fuel));
}
}
IEnumerator DoSomething (int fuel) {
HasFuelDefault = false;
SpriteRenderer.Sprite = "FireEx_1";
yield return new WaitForSeconds(fuel);
SpriteRenderer.Sprite = NoFuel;
}
Full Working Code:
public Sprite Running;
public Sprite NoFuel;
public GameObject Player;
public SpriteRenderer SpriteRenderer;
public int Fuel;
public bool HasFuelDefault;
void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.name == Player.name && HasFuelDefault == true)
{
StartCoroutine(DoSomething());
}
}
IEnumerator DoSomething () {
HasFuelDefault = false;
SpriteRenderer.sprite = Running;
yield return new WaitForSeconds(Fuel);
SpriteRenderer.sprite = NoFuel;
}
Hope that helps!
could you try this code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FireExting : MonoBehaviour
{
public Sprite Running; // Sprite for when the fire extinguisher is in use
public Sprite NoFuel; // Sprite for when the fire extinguisher has no fuel
public GameObject Player; // Reference to the player object
public SpriteRenderer SpriteRenderer; // Reference to the SpriteRenderer component
public int Fuel; // Duration of the fire extinguisher fuel
public bool HasFuelDefault; // Flag to track if the fire extinguisher has fuel initially
void OnCollisionEnter2D(Collision2D collision)
{
// Check if the collision is with the player and there is fuel in the fire extinguisher
if (collision.gameObject.name == Player.name && HasFuelDefault == true)
{
HasFuelDefault = false; // Set the fuel flag to false
SpriteRenderer.sprite = Running; // Change the sprite to the running sprite
StartCoroutine(ExtinguishFire()); // Start the coroutine to extinguish the fire
}
}
// Coroutine to extinguish the fire after a delay
private IEnumerator ExtinguishFire()
{
yield return new WaitForSeconds(Fuel); // Wait for the specified fuel duration
SpriteRenderer.sprite = NoFuel; // Change the sprite to the no fuel sprite
}
}