【发布时间】:2017-06-27 12:06:02
【问题描述】:
我在访问 Player GameObject 的子项中的启用变量时遇到问题。
-Human拥有Rigidbody2D、BoxCollider、PlayerController脚本和Animator
-body 和 range_attack_body 只持有 SpriteRenderer
我想做什么:
我想在按住鼠标按钮时更改我的播放器对象的 SpriteRenderer。 body 和 range_attack_body 中有 SpriteRenderer。两个游戏对象都是动画的一部分。 body.SpriteRenderer 在正常运动期间处于活动状态,而 range_attack_body.SpriteRenderer 处于非活动状态。 在我的 PlayerController 脚本中,我编写了一个例程,该例程将在按住鼠标按钮时触发攻击动画。在这个例程中,我想更改 SpriteRenderers 的启用状态。但是什么都没有发生,这意味着变量在运行时不会改变。我已经检查了在 Awake() 期间是否正确访问了 GameObjects 和 SpriteRenderer,并且我可以使用调试消息在我的 SpriteRenderer 数组中找到这两个渲染器。 最重要的是,我检查了如果我将 SpriteRenderer 添加到我的 Human GameObject 会发生什么。它将出现在我的 SpriteRenderer 数组中,我可以完全访问启用的变量,这意味着我可以在我的例程中更改它们。所以我认为 body 和 range_attack_body 可能存在冲突,因为它们的 SpriteRenderers 是动画的一部分。我将 Human.SpriteRenderer 添加到动画中,并且仍然可以更改变量。 我不知道发生了什么,请帮忙。这是一些代码:
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);
}
}
}
【问题讨论】: