您好,所以我有这个脚本,并且在无效更新中无关紧要首先向后或者向上运行它总是让动画师向后播放动画或者运行它播放动画中途或全部方式它播放部分没有它被调用的空闲状态意味着你的手指仍然在按钮上,所以它仍然必须一遍又一遍地向后/向前播放动画。 这是代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playerController : MonoBehaviour {
public float moveSpeed = 10f;
public float turnSpeed = 50f;
Animator anim;
// Use this for initialization
void Start () {
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.S)) {
anim.SetBool ("isIdle", false);
anim.SetBool ("isWalkingBack", true);
transform.Translate (-Vector3.forward * moveSpeed * Time.deltaTime);
}
else
{
anim.SetBool ("isIdle", true);
anim.SetBool ("isWalkingBack", false);
}
if (Input.GetKey (KeyCode.W)) {
anim.SetBool ("isRunning", true);
anim.SetBool ("isIdle", false);
transform.Translate (Vector3.forward * moveSpeed * Time.deltaTime);
}
else
{
anim.SetBool ("isRunning", false);
anim.SetBool ("isIdle", true);
}
}
}
`
答案 0 :(得分:0)
使用布尔字段可能会导致一些问题,例如,您在上面描述的问题。
我建议使用:anim.SetInteger("unitState", someIntValue);
配置动画师中的连接和过渡以使用“unitState”字段。
在您的代码中,它看起来像这样:
void Update () {
// for example
anim.SetInteger("unitState", 0); // 0 is Idle
if (Input.GetKey (KeyCode.S)) {
anim.SetInteger("unitState", -1); // -1 is WalkBack
transform.Translate (-Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey (KeyCode.W)) {
anim.SetInteger("unitState", 1); // 1 is run forward
transform.Translate (Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKeyDown (KeyCode.Space)) {
anim.SetInteger("unitState", 2); // 2 is jump
//Jump code here. for example
}
....
}
答案 1 :(得分:0)
确保您在每次转换时都有未经检查的退出时间。