在脚本(Unity)中实例化并应用新的PhysicsMaterial2D

时间:2014-10-10 00:40:36

标签: c# unity3d

我正在开发Unity游戏。在其中,我希望能够为不同的实体提供不同程度的摩擦,而无需在编辑器中创建多个材质。我目前正在尝试通过将PhysicsMaterial2D定义为成员变量并在Start方法中实例化它来实现此目的。然后根据公共成员变量应用材料的摩擦力。然后我设置了actor的collider2D的sharedMaterial。

public class ActorUpdateScript : MonoBehaviour {

    public float friction;

    PhysicsMaterial2D actorMaterial;

    void Start () {
        actorMaterial = new PhysicsMaterial2D();
        actorMaterial.friction = friction;
        collider2D.sharedMaterial = actorMaterial;
    }
}

我可以验证collider2D.sharedMaterial确实正在接收新材料,因为我可以打印它的摩擦力,它给了我预期的结果。但是,无论我给它的摩擦力是多少,它总是表现得像默认材料。 (我相信0.4摩擦)。他所走的碰撞盒都有一种摩擦力为1的材料。

我做错了什么?有没有人对如何团结一致关注我所用的材料有任何建议?

另外,在你告诉我之前,我知道我可以使用不同的材料(高摩擦,中等摩擦,低摩擦等),我应用于不同的实体。但我计划最终添加超级基本的modding支持,因此给定实体的摩擦力将使用JSON文件设置。

2 个答案:

答案 0 :(得分:0)

问题可能是你的角色和地板都有物理材料,而组合方法是采用两者中较小的一个,你总会得到较低的值。

要解决此问题,您要么从角色中移除物理材质,将其设置得足够高,始终会被覆盖,或者根据您所站立的内容进行更改以获得正确的行为。

答案 1 :(得分:0)

void Start () {
    actorMaterial = new PhysicsMaterial2D();
    collider2D.sharedMaterial = actorMaterial;

    collider2D.sharedMaterial.friction = friction;
}

首先将新材料分配给 collider.sharedMaterial。

并改变材料价值。

它对我有用。