【问题标题】:Unity help - rotations not working :(Unity 帮助 - 旋转不起作用:(
【发布时间】:2017-12-31 17:55:55
【问题描述】:

好的,我正在开发统一 2D 平台游戏。我为带有播放器控制器的角色制作了一些动画(拳打脚踢和格挡,效果很好)。当我移动时,我的玩家控制器会计算他的速度,并根据它的值,如果他没有跳跃或阻挡/踢/拳,他将处于“步行”或“跑步”状态(如果不是空闲)。基本上这只是意味着他的四肢以一定的速度旋转(四肢是玩家的孩子,他是父母)。

然而,这个简单的任务却变得困难重重。我最初有以下脚本来使四肢旋转:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotation : MonoBehaviour {

 private int b;

 void FixedUpdate () {
     b = PlayerController.b;
     float y = transform.localEulerAngles.z;
     transform.RotateAround (transform.position, Vector3.forward, 
b*45*Mathf.Sin(3*Time.fixedTime)-y);
 }
}

(忽略“b”)。

这一直很好,直到我将角色向左转,旋转开始变得混乱。

我决定简化并使用以下脚本进行旋转。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotation : MonoBehaviour {

float y;

void Start(){
    y = transform.localRotation.z;
    Debug.Log (y);
}

void FixedUpdate () {
    float u = y + 45 * Mathf.Sin (3 * Time.fixedTime);
    Quaternion rot = transform.localRotation;
    rot.z = u;
    Debug.Log (u);
    transform.localRotation = rot;
    }
}

这怎么会出错?这甚至根本不旋转。我已经尝试调试角度并注意到(我正在查看的肢体的)角度改变了几秒钟(即使我看不到任何旋转),然后卡在某个值(通常约为 45) .怎么了?我错过了什么吗?

tl;dr 我只想让他的四肢随着时间而摆动。

【问题讨论】:

  • 我认为这个简单的任务变得很困难,因为你要走复杂的路。您是否考虑过使用 Animator 组件?您可以使用更灵活、更易读的代码来触发同一动画的不同速度。您还可以设置动画速度的修饰符以精确控制速度。
  • 感谢您的回复,但我不确定您是否理解该问题。速度不是问题——我的播放器控制器的一部分会测量他的水平速度,并根据它的值将他置于“步行”或“跑步”状态(如果不是任何其他动画),它们只会播放相同的动画不同的速度。问题在于动画本身。

标签: c# unity3d rotation


【解决方案1】:

我认为最好制作一个走路的动画,你可以播放它的方式是你可以有一个像bool isWalking这样的变量,然后你说 if(isWalking){ animator.play(walkAnimation); }

如您所见,我的中有一个名为“animator”的变量。您应该搜索有关统一动画师的教程,这些非常有帮助。希望这会有所帮助,如果没有,我很抱歉

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 2016-01-31
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2014-09-15
    相关资源
    最近更新 更多