Hello.

I have problems accessing the enabled variable in children of my Player GameObject.
96695-bildschirmfoto-2017-06-27-um-120022.png
-Human holds Rigidbody2D, BoxCollider, PlayerController script and Animator

-body and range_attack_body only hold SpriteRenderer

What I want to do:

I want to change the SpriteRenderer of my Player Object when mouse button is on hold. There are SpriteRenderers in body and range_attack_body. Both GameObjects are part of animations.
body.SpriteRenderer is active and range_attack_body.SpriteRenderer inactive during normal motion.
In my PlayerController script I wrote a routine that will trigger an attack animation when mouse button is on hold. In this routine I wanted to change the enabled states of the SpriteRenderers. However nothing is happening, meaning the varibales are not changing during runtime. I already checked if the GameObjects and SpriteRenderers are accessed correctly during Awake() and I can find both renderers in my SpriteRenderer array using debug messages.
On top of that I checked what happens if I add a SpriteRenderer to my Human GameObject. It will appear in my SpriteRenderer array and I have full access to enabled variable meaning I can change them in my routine. So I figured there might be a conflict with body and range_attack_body due to their SpriteRenderers being part of animations. I added Human.SpriteRenderer to an animation and can still change variables.
I have no clue what is going on, please help. Here is some code:

public class PlayerController2D : PhysicsObject {

	public float maxSpeed = 7f;
	public float jumpTakeOffSpeed = 7f;
	public float posOffset = 1;

	protected bool flipSprite = false;
	protected bool flipState = true;

	private Animator animator;
	private SpriteRenderer[] spriteRenderers;


	void Awake ()
	{
		animator = GetComponent<Animator> ();
		GameObject human = GameObject.Find("Human");
		spriteRenderers = human.GetComponentsInChildren<SpriteRenderer> ();
	}

	protected override void Attack ()
	{
		if(Input.GetMouseButton(0))
		{
			spriteRenderers[0].enabled = false;
			spriteRenderers[1].enabled = true;

			Debug.LogError("Inhalt:" + spriteRenderers[0].ToString());
			Debug.LogError("Inhalt:" + spriteRenderers[1].ToString());

			animator.SetBool("attack", true); // boolean to start hold animation
		}
		else if(!Input.GetMouseButton(0))
		{
			spriteRenderers[0].enabled = true;
			spriteRenderers[1].enabled = false;

			animator.SetBool("attack", false);
		}
	}
}

Problem solved:

I still hat the enabled property inside an Animation clip that was triggered after releasing the button.

That interfered with my script setting due to Unity’s execution order!