using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CC : MonoBehaviour
{
private Vector3 moveDirection = Vector3.zero;
private Animator _anim;
private void Start()
{
_anim = GetComponent<Animator>();
}
void Update()
{
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
transform.Rotate(0, x, 0);
transform.Translate(0, 0, z);
if (Input.GetKeyDown("w"))
{
_anim.Play("Walk");
}
else
{
_anim.Play("Grounded");
}
}
}
当我刚刚做的时候:
_anim.Play("Walk");
角色正在不停前行。 但是现在我想让他走路,当我按住W并且不按W来闲置/接地时。
但是没有工作,角色没有走路就行动了。
脚本附加到第三人称角色。
答案 0 :(得分:2)
即使未按下“w”,您也正在翻译变换。在if案例中移动翻译,一切都将按计划运行。此外,GetKeyDown
应替换为GetKey
,并且应保存当前状态,因为第一个的定义为:
您需要从Update函数调用此函数,因为每个帧都会重置状态。在用户释放该键并再次按下该键之前,它不会返回true。 - Input.GetKeyDown
代码可能如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CC : MonoBehaviour
{
private Vector3 moveDirection = Vector3.zero;
private Animator _anim;
private bool _isWalking = false;
private void Start()
{
_anim = GetComponent<Animator>();
}
void Update()
{
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
transform.Rotate(0, x, 0);
if (Input.GetKey("w"))
{
if(!_isWalking)
{
_isWalking = true;
_anim.Play("Walk");
}
var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
transform.Translate(0, 0, z); // Only move when "w" is pressed.
}
else
{
if(_isWalking)
{
_anim.Play("Grounded");
}
_isWalking = false;
}
}
}
答案 1 :(得分:1)
update()
,但getKeyDown()
方法仅在用户按下按钮的帧期间返回true。由于你一直按下w-Key,声明返回false并且#34;接地&#34;块被执行。
尝试在Input.GetKeyDown()
上启动动画但仅使用Input.GetKeyUp();
将动画更改为空闲