Search Unity

GetComponent requires that the requested component...

Discussion in 'Scripting' started by Antrax1, Dec 28, 2016.

  1. Antrax1

    Antrax1

    Joined:
    Dec 28, 2016
    Posts:
    3
    Hi guys !

    I'm having a little problem with my code that I got from the Unity3D tutorials. Unity says that :
    ArgumentException: GetComponent requires that the requested component 'PlayerMovement' derives from MonoBehaviour or Component or is an interface.
    UnityEngine.Component.GetComponent[PlayerMovement] () (at C:/buildslave/unity/build/artifacts/generated/common/runtime/ComponentBindings.gen.cs:45)
    PlayerHealth.Awake () (at Assets/Scripts/PlayerHealth.cs:29)


    Here's the code :
    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;

    public class PlayerHealth : MonoBehaviour
    {
    public int startingHealth = 100; // The amount of health the player starts the game with.
    public int currentHealth; // The current health the player has.
    public Slider healthSlider; // Reference to the UI's health bar.
    public Image damageImage; // Reference to an image to flash on the screen on being hurt.
    public AudioClip deathClip; // The audio clip to play when the player dies.
    public float flashSpeed = 5f; // The speed the damageImage will fade at.
    public Color flashColour = new Color(1f, 0f, 0f, 0.1f); // The colour the damageImage is set to, to flash.


    Animator anim; // Reference to the Animator component.
    AudioSource playerAudio; // Reference to the AudioSource component.
    PlayerMovement playerMovement; // Reference to the player's movement.
    PlayerShooting playerShooting; // Reference to the PlayerShooting script.
    bool isDead; // Whether the player is dead.
    bool damaged; // True when the player gets damaged.


    void Awake()
    {
    // Setting up the references.
    anim = GetComponent<Animator>();
    playerAudio = GetComponent<AudioSource>();
    playerMovement = GetComponent<PlayerMovement>();
    playerShooting = GetComponentInChildren<PlayerShooting>();

    // Set the initial health of the player.
    currentHealth = startingHealth;
    }


    void Update()
    {
    // If the player has just been damaged...
    if (damaged)
    {
    // ... set the colour of the damageImage to the flash colour.
    damageImage.color = flashColour;
    }
    // Otherwise...
    else
    {
    // ... transition the colour back to clear.
    damageImage.color = Color.Lerp(damageImage.color, Color.clear, flashSpeed * Time.deltaTime);
    }

    // Reset the damaged flag.
    damaged = false;
    }


    public void TakeDamage(int amount)
    {
    // Set the damaged flag so the screen will flash.
    damaged = true;

    // Reduce the current health by the damage amount.
    currentHealth -= amount;

    // Set the health bar's value to the current health.
    healthSlider.value = currentHealth;

    // Play the hurt sound effect.
    playerAudio.Play();

    // If the player has lost all it's health and the death flag hasn't been set yet...
    if (currentHealth <= 0 && !isDead)
    {
    // ... it should die.
    Death();
    }
    }


    void Death()
    {
    // Set the death flag so this function won't be called again.
    isDead = true;

    // Turn off any remaining shooting effects.
    playerShooting.DisableEffects();

    // Tell the animator that the player is dead.
    anim.SetTrigger("Die");

    // Set the audiosource to play the death clip and play it (this will stop the hurt sound from playing).
    playerAudio.clip = deathClip;
    playerAudio.Play();

    // Turn off the movement and shooting scripts.
    playerMovement.enabled = false;
    playerShooting.enabled = false;
    }
    }

    Thanks for your help!
     
  2. APSchmidt

    APSchmidt

    Joined:
    Aug 8, 2016
    Posts:
    3,349
  3. gorbit99

    gorbit99

    Joined:
    Jul 14, 2015
    Posts:
    1,175
    go into your playermovement class, and after public class PlayerMovement put a ": MonoBehaviour"
     
unityunity