【问题标题】:Setting float for blend tree?为混合树设置浮点数?
【发布时间】:2018-03-12 00:58:13
【问题描述】:

所以我目前正在创建一个基于this tutorial 的第三人称控制器,并且我正在尝试使用推送对象等额外功能来扩展第三人称控制器。第三人称控制器没有刚体或任何东西,因为它使用的是 CharacterController 组件。我在播放器前面创建了一个光线投射,检查播放器前面的对象是否是可推的,这工作正常。当玩家面前的对象是可推动的时,动画器中的布尔 isPushing 设置为 true,动画器进入混合树。这个混合树由 2 个动画组成; idlePushAnimation 和 walkPushAnimation,它们由浮动“speedPercentPush”控制。这就是我卡住的地方。我怎样才能做到,当玩家没有在推动状态下移动时,浮动设置为“0”,而当 CharacterController 在推动状态下移动时,浮动设置为“1”?

最后我正在寻找类似的东西:

anim.SetFloat("speedPercentPush", I think this should be something like either 0 or 1, speedSmoothTime, Time.deltaTime);

【问题讨论】:

  • 你能贴一张混合树的图片吗?

标签: c# unity3d


【解决方案1】:

您可以将CharacterController水平速度 分配给blend tree 浮点值,如下所示:

public CharacterController controller;
    Vector3 horizontalVelocity = controller.velocity;
    float horizontalSpeed;

    void Update() {
      if(isPushing){
         controller.setBool("isPushing",true);
         horizontalVelocity = new Vector3(controller.velocity.x, 0, controller.velocity.z);
         horizontalSpeed = horizontalVelocity.magnitude;
         controller.setFloat("speedPercentPush",horizontalSpeed );
      }else{
         controller.setFloat("speedPercentPush",0);
         controller.setBool("isPushing",false);
      }
    }

另外,首先检查您想要从 idlePushAnimation 过渡到 walkingPushAnimation 的水平速度,并相应地设置 blend tree 参数的 threshold
您可以查看本教程以了解有关blend trees 的更多信息: https://www.youtube.com/watch?v=HeHvlEYpRbM

【讨论】:

  • 昨晚我正在使用类似的东西,但动画和播放时间仍然存在问题。昨晚我在检查 controller.velocity != Vector3.zero 并且它有点工作,我不得不说当时我没有使用 blendtree。但问题是,当玩家处于 idlePushing 状态时,如果您转身离开可推动对象,它总是会转到 walkPushing 动画,因为有运动。这时我意识到我需要一个混合树,但还要检查移动是否朝向可推动对象。
  • 我想说的是您的解决方案是正确的,但我认为它需要进行更多检查。我认为它应该检查运动是否朝向 Pushable 对象,当有速度朝向该对象时,浮动 speedPercentPushing 应该为“1”,如果没有朝向该对象的运动,则应该为“0”。我将如何添加额外的支票?而且目前你的解决方案是只检查x轴,但是游戏是3d的,不应该也检查z轴吗?
  • 抱歉完全错过了 z 检查,我现在明白了。所以应该再检查一下玩家是否朝着可推动对象的方向移动,并且当这是真的时,浮动应该设置为 1。
  • 在你所说的问题中,你已经通过raycast检查了移动方向。因此,您可以使用 bool 在更新函数中再进行一次检查。请查看编辑后的答案。
  • 很抱歉回复晚了,但我终于让它工作了。我发现的另一件重要事情是在 blendtree 中设置动画的阈值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多