问:基本上,我创建了一个2d rpg单击以统一移动游戏。我的问题是,一旦播放器到达其位置,播放器就不会朝向正确的方向,例如,请观看以下视频: Unity问题2-YouTube [ ^ ]。谢谢。
这是我的代码:
私人动画师动画;
公众漂浮速度= 15f;
私有Vector3目标;
私人布尔感动;
无效的开始(){
目标= transform.position;
动画= GetComponent <Animator>();
}
无效更新(){
如果(Input.GetMouseButtonDown(0)){
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = 10; //与相机的距离
target = Camera.main.ScreenToWorldPoint(mousePosition);
target.z = transform.position.z;
var MovementDirection =(target-transform.position).normalized;
如果(movementDirection.x!= 0 || MovementDirection.y!= 0){
anim.SetBool(“ walking”,true);
anim.SetFloat(“ SpeedX”,MovementDirection.x);
anim.SetFloat(“ SpeedY”,MovementDirection.y);
如果(movementDirection.x <0){
anim.SetFloat(“ LastMoveX”,-1f);
}
否则(movementDirection.x> 0){
anim.SetFloat(“ LastMoveX”,1f);
}
其他{
anim.SetFloat(“ LastMoveX”,0f);
}
如果(movementDirection.y> 0){
anim.SetFloat(“ LastMoveY”,1f);
}
否则(movementDirection.y <0){
anim.SetFloat(“ LastMoveY”,-1f);
}
其他{
anim.SetFloat(“ LastMoveY”,0f);
}
}
}
其他{
如果(Mathf.Aboutly(transform.position.x,target.x)&& Mathf.roxlyly(transform.position.y,target.y)){
感动=假;
anim.SetBool(“ walking”,false);
}
其他{
transform.position = Vector3.MoveTowards(transform.position,target,speed * Time.deltaTime);
}
}
}
答:这段代码的问题是您的动画师无法为LastMoveX和LastMoveY获取正确的值。正如我在您的视频中看到的那样,大多数情况下,LastMoveX =(1或-1)和LastMoveY(1或-1)的值。而动画师值则以以下格式设置:
请参阅链接中的格式:动画值的格式
但是根据您的代码,值不能正确输入,从而导致播放错误的动画。请尝试运行以下代码来修复您的问题。这样,您的动画师将获得0和1格式的值。
公开课移动:MonoBehaviour {
私有Vector3目标;
浮动LastMoveX;
浮动LastMoveY;
字符串sideToMove;
//使用它进行初始化
无效的开始(){
目标= this.transform.position;
}
无效更新(){
如果(Input.GetMouseButtonDown(0))
{
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = 10; //与相机的距离
target = Camera.main.ScreenToWorldPoint(mousePosition);
target.z = transform.position.z;
var MovementDirection =(target-transform.position).normalized;
if(Mathf.Abs(movementDirection.x)<Mathf.Abs(movementDirection.y))
sideToMove =“ YAxis”;
否则if(Mathf.Abs(movementDirection.x)> Mathf.Abs(movementDirection.y))
sideToMove =“ XAxis”;
其他
sideToMove =“默认”;
开关(sideToMove)
{
案例“ XAxis”:
{
如果(movementDirection.x <0){
anim.setLastMoveX = -1f;
}
否则(movementDirection.x> 0){
LastMoveX = 1f;
}
其他{
LastMoveX = 0f;
}
LastMoveY = 0f;
}
打破;
案例“ YAxis”:
{
如果(movementDirection.y> 0){
LastMoveY = 1f;
}
否则(movementDirection.y <0){
LastMoveY = -1f;
}
其他{
LastMoveY = 0f;
}
LastMoveX = 0;
}
打破;
dafault:
{
LastMoveX = 0;
LastMoveY = 0;
}
}
anim.setFloat(“ LastMoveX”,LastMoveX);
anim.setFloat(“ LastMoveY”,LastMoveY);
}
}