【发布时间】: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 组件?您可以使用更灵活、更易读的代码来触发同一动画的不同速度。您还可以设置动画速度的修饰符以精确控制速度。
-
感谢您的回复,但我不确定您是否理解该问题。速度不是问题——我的播放器控制器的一部分会测量他的水平速度,并根据它的值将他置于“步行”或“跑步”状态(如果不是任何其他动画),它们只会播放相同的动画不同的速度。问题在于动画本身。