【问题标题】:If disable/enable collider the animator doesn't work anymore如果禁用/启用对撞机,动画师不再工作
【发布时间】:2019-06-21 05:35:15
【问题描述】:

我有一个带有BoxCollider2DAnimator 组件的角色。我需要动态改变物理材料的摩擦力,所以我使用下一个函数:

private void ChangeFriction(float friction)
{
    boxCollider.sharedMaterial.friction = friction;
    boxCollider.enabled = false; // The friction won't be changed if I won't reset the collider
    boxCollider.enabled = true;
}

问题是在执行此函数后,步行动画不再完全播放。如果我评论最后两行,那么一切都很完美,但摩擦不会改变,就像 To be or not to be

我该如何解决这个问题?

【问题讨论】:

  • 您使用sharedMaterial 而不是material 有什么特别的原因吗?这个对撞机是你玩家的对撞机还是玩家移动的对象?
  • @AliKanat material 没有属性。
  • 怎么回事? Unity 文档说 Collider 有 boththem
  • 哎呀,我现在意识到你有一个 2D 盒子对撞机。我认为您的代码中还有另一个问题,因为我现在尝试它,我不必启用和禁用我的对撞机来改变摩擦。你如何访问这个boxCollider
  • @AliKanat,一如既往的 GetComponent<BoxCollider2D>()Awake() 方法中。

标签: c# unity3d game-physics unity3d-2dtools


【解决方案1】:

我一直在使用这段代码来访问摩擦并更改它,它可以在不启用和禁用碰撞器的情况下工作。我也可以在编辑器中看到它的变化。

private Collider2D col;
void Start () {
    col = gameObject.GetComponent<Collider2D>();

}

void Update () {
    if(Input.GetKeyDown(KeyCode.Mouse0))
    {
        col.sharedMaterial.friction = 1;

    }

    if (Input.GetKeyDown(KeyCode.Mouse1))
    {
        col.sharedMaterial.friction = 0.5f;
    }
    Debug.Log(col.sharedMaterial.friction);
}

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2015-07-21
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多