1

我正在用 Unity3D 设计一个迷宫。迷宫有许多分岔,玩家将在每个分岔前停下来,只需选择左或右。然后一个自动动画将移动玩家通过下一个分叉,直到迷宫的尽头(或直到死胡同)。

为了让我在 Unity 项目中使用AniMate和 C# 为播放器设置动画。使用 AniMate 我只是为每个分叉创建一个点对点动画(例如下面的法师:从开始/红色箭头到点 5)在 Unity 中使用 AniMate 制作迷宫和动画

我的问题是我的动画脚本(与“第一人称控制器”相关联)无法正常工作,因为不尊重物理(玩家穿过墙壁)。如果在同一个项目中我启用了 Unity 中的标准角色控件,那么我可以在迷宫中使用墙壁等物理约束来导航......(即我有碰撞器)。

这是我在按左键从起点、谷点 1 到点 2 时使用的代码示例:

        void FixedUpdate () {
if (Input.GetKey(KeyCode.LeftArrow)) {
//To point 1
    Hashtable props = new Hashtable();
    props.Add("position", new Vector3(756f,112f,1124f));
    props.Add("physics", true);
    Ani.Mate.To(transform, 2, props);

//To point 2            
    Hashtable props2 = new Hashtable();
    props2.Add("position", new Vector3(731f,112f,1124f));
    props2.Add("physics", true);
    Ani.Mate.To(transform, 2, props2);
}
}

当我按下左箭头按钮时,实际上发生的情况是玩家使用穿过墙壁的直线直接移动到点 2。我试图将“Physics = true”传递给 AniMate,但它似乎没有帮助。

关于如何解决这个问题的任何想法?

或者......关于如何获得更优化代码的任何提示,只需使用一系列 vector3 坐标(每个点一个)来获得我想要的简单动画,而无需声明 new Hashtable(); 等等……每次?我选择 AniMate 只是因为 1. 我是 Unity 的初学者 2. 我不需要复杂的动画(例如我不需要使用 iTween),只需沿直线固定动画,我需要一些非常简单快速的东西在脚本中实现。但是,如果有人有同样简单的解决方案,它将受到欢迎。

预先感谢您的帮助

4

1 回答 1

1

使用像 AniMate 这样的补间引擎,您始终可以直接为对象的位置设置动画,而忽略可能发生的任何物理碰撞。如果你想让一个物体正确地碰撞或与关节一起工作,你必须用力来移动它,而不能直接改变它的位置。

您可以补间影响物理的对象,但补间对象不受其他物理对象的影响。您还应该使您正在补间运动的刚体。

AniMate 中的物理选项并不意味着对象通过物理受到其他对象的影响,它只是更改补间的应用方式(在 FixedUpdate 中而不是 Update 中)以确保补间对象正确影响其他物理对象。

在您的示例中,两个补间同时启动,第二个补间覆盖第一个(这就是对象直接转到第二个点的原因)。在开始第二个补间之前,您必须等待第一个补间完成。

最简单的方法是使用协程:

void FixedUpdate () {
    if (Input.GetKey(KeyCode.LeftArrow)) {
        StartCoroutine(TweenCoroutine());
    }
}

IEnumerator TweenCoroutine() {
    // To point 1
    Hashtable props = new Hashtable();
    props.Add("position", new Vector3(756f,112f,1124f));
    props.Add("physics", true);
    // Start first tween and wait for it to finish
    yield return Ani.Mate.To(transform, 2, props);  

    // To point 2
    Hashtable props2 = new Hashtable();
    props2.Add("position", new Vector3(731f,112f,1124f));
    props2.Add("physics", true);
    // Start second tween and wait for it to finish
    yield return Ani.Mate.To(transform, 2, props2);

    // etc...
}

AniMate 不支持运动路径。HOTween允许并允许您将补间对象随后通过的点列表传递给它。

还有一个新版本的 AniMate(现在是 Animate)可用,它有一个更易于在 C# 中使用的流畅界面。

于 2012-10-22T10:57:28.047 回答