在分配动画后移动我的角色位置。
角色GameObject
分配有Animation
,RigidBody
,Capsule Collider
和C# Script
组件。
C#脚本(动画部分)如下:
public class MyCharacter : MonoBehaviour {
// Animations
public AnimationClip idleAnimation;
public AnimationClip slideAnimation;
public AnimationClip runAnimation;
public AnimationClip jumpPoseAnimation;
private Animation charAnimation;
enum CharacterState {
Idle = 0,
Running = 1,
Sliding = 2,
Jumping = 3,
}
private CharacterState charState;
void Start () {
charState = CharacterState.Running;
charAnimation = gameObject.GetComponent<Animation>();
if(!charAnimation) {
Debug.Log("No Animation Component.");
} else {
AnimationEvent syncRunEvent = new AnimationEvent();
syncRunEvent.time = runAnimation.length;
syncRunEvent.functionName = "SyncRunAnimation";
runAnimation.AddEvent(syncRunEvent);
}
}
void Update () {
// Animations
if(charAnimation) {
if(charState == CharacterState.Jumping) {
charAnimation.CrossFade(jumpPoseAnimation.name);
} else if(charState == CharacterState.Sliding) {
charAnimation.CrossFade(slideAnimation.name);
} else {
charAnimation.CrossFade(runAnimation.name);
}
}
}
void SyncRunAnimation() {
Debug.Log("Sync Run");
transform.position += new Vector3(0, 3, 0);
}
}
在分配动画之前,角色站在(0, 0.6, 0)
位置的地面上。分配后,角色淹没在地面,卡住;位置更改为(0, -0.75, -0.55)
,这是导入动画的位置。如何控制动画位置?
注意:我尝试使用SyncEvent
向上移动(增加Y轴),但它根本没有效果。
仅当动画设置为旧版时才会发生这种情况。如果我将动画设置为 Generic ,则没有问题,但是控制台发出错误:
动画组件“MyCharacter”使用的AnimationClip“run”必须标记为Legacy。
并且无法播放动画。如何使用Legacy动画使用Generic动画/正确位置?
答案 0 :(得分:1)
我发现FBX动画的位置关键帧会影响位置。删除动画面板中的属性后,问题就消失了。
但是,关键帧有时会重新出现。
答案 1 :(得分:0)
根据我的经验,最好将3D模型作为某个父游戏对象的子对象。父游戏对象具有控制器脚本和诸如此类的东西。我不知道这是否能解决这个问题。我猜测动画正在改变模型的位置和位置,这会影响游戏对象的变换。如果你把它变成其他游戏对象的孩子,那可能不会发生。
答案 2 :(得分:0)
有两种方法可以解决这个问题。首先在Animator面板中启用“Apply Root Motion”。在这种情况下,旋转和位置数据将是加性而非绝对的。但是重复动画后可能会发生原始旋转或位置丢失。在这种情况下,您可以创建一个空的gameObject。将它定位到你的gameObject(进入它的起源)动画的内容。在此之后将动画gameObject放入空游戏对象(在层次结构视图中)