我有一些代码可用于翻转播放器,使其面向X轴上的移动方向。但是,由于我已经添加了动画,所以动画可以播放,但不会朝另一个方向翻转。
注释-
代码
[SerializeField]
private AnimationClip idle;
[SerializeField]
private AnimationClip walk;
[SerializeField]
private AnimationClip hop; // Alternative name for JUMP
[SerializeField]
private AnimationClip death;
代码
if (Mathf.Abs(player.velocity.x) > 0)
{
GetComponent<Animation>().Play("Walk");
}
else
{
GetComponent<Animation>().Play("Idle");
}
代码
if (Input.GetKeyDown(KeyCode.Space) && onFloor==true ||
Input.GetKeyDown(KeyCode.W) && onFloor==true)
{
player.velocity = new Vector2(0, jump);
onFloor = false;
// GetComponent<Animation>().Stop("Walk");
// GetComponent<Animation>().Stop("Idle");
GetComponent<Animation>().Play("Jump");
}
代码
faceRight = !faceRight;
Vector3 Pscale = transform.localScale;
Pscale.x *= -1;
transform.localScale = Pscale;
我尝试设置Animator状态机,但所有动画将同时发生。那是我放弃Animator并决定调用我的动画从代码播放的时候。就过渡线而言,我感觉好像已经正确设置了状态机。
好,所以我为每个名为“激活”的过渡线设置了一个触发器。我相应地将代码修改为:
private Animator anim;
void Start()
{
anim = gameObject.GetComponent<Animator>();
{
if (Mathf.Abs(player.velocity.x) > 0 && onFloor==true)
{
//ani.SetTrigger(walk.ToString());
anim.ResetTrigger("Idle");
anim.SetTrigger("Walk");
}
else if(Mathf.Abs(player.velocity.x) == 0 && onFloor==true)
{
//ani.SetTrigger(idle.ToString());
anim.ResetTrigger("Walk");
anim.SetTrigger("Idle");
}
但是,这仍然不能解决我的问题。首先,动画不播放。其次,我无法测试播放器播放后是否会在轴上翻转。
在运行时,控制台中出现一个轻微的错误,提示动画不存在。我确保所有动画都在动画师内部的状态下。我还确保所有动画均未标记为“旧版”。
答案 0 :(得分:0)
根据您的问题和评论。
我尝试设置Animator状态机,但所有动画将同时发生。
这可能意味着您在状态机中设置了错误的转换或初始值。
我对您的建议是检查有关如何使用状态机的video。 IT属于更长的教程,但是该视频可能足以解决您的问题。
如果按照本教程操作,您将看到需要创建boolean类型的参数来激活脚本中的动画。因此,例如,您将创建一个名为isWalking
的文件,该文件将链接到您的步行动画。然后,您可以使用以下代码从代码中将该参数设置为true或false:
anim.SetBool ("IsWalking", walking);
这是您可以尝试的示例。但是您将需要使其适应实际需求:
bool walking = false;
void FixedUpdate ()
{
// Animate the player.
Animating();
}
void Animating (float h, float v)
{
if (Mathf.Abs(player.velocity.x) > 0 && onFloor==true)
{
walking = true;
}
else if(Mathf.Abs(player.velocity.x) == 0 && onFloor==true)
{
walking = false;
}
// Tell the animator whether or not the player is walking.
anim.SetBool ("IsWalking", walking);
}