Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在脚本中实例化并应用新的PhysicMaterial2D(Unity)_C#_Unity3d - Fatal编程技术网

C# 在脚本中实例化并应用新的PhysicMaterial2D(Unity)

C# 在脚本中实例化并应用新的PhysicMaterial2D(Unity),c#,unity3d,C#,Unity3d,我正在做一个团结游戏。在其中,我希望能够为不同的实体提供不同程度的摩擦,而无需在编辑器中创建多个材质。我目前正试图通过将PhysicsMaterial2D定义为成员变量并在Start方法中实例化来实现这一点。然后基于公共成员变量应用材质的摩擦力。然后我设置了演员的共享材料 public class ActorUpdateScript : MonoBehaviour { public float friction; PhysicsMaterial2D actorMaterial

我正在做一个团结游戏。在其中,我希望能够为不同的实体提供不同程度的摩擦,而无需在编辑器中创建多个材质。我目前正试图通过将PhysicsMaterial2D定义为成员变量并在Start方法中实例化来实现这一点。然后基于公共成员变量应用材质的摩擦力。然后我设置了演员的共享材料

public class ActorUpdateScript : MonoBehaviour {

    public float friction;

    PhysicsMaterial2D actorMaterial;

    void Start () {
        actorMaterial = new PhysicsMaterial2D();
        actorMaterial.friction = friction;
        collider2D.sharedMaterial = actorMaterial;
    }
}
我可以验证Collidater2D.sharedMaterial确实收到了新材料,因为我可以打印它的摩擦力,它会给我预期的结果。然而,无论我给它的摩擦力是多少,它的行为总是像默认的材质一样。(我相信是0.4摩擦力)。他正在行走的碰撞箱都有一种摩擦力为1的材料

我做错了什么?有没有人对如何让unity关注我申请的材料有什么建议


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

问题可能是你的角色和地板上都有物理材质,合并方法是取两者中的较小值,你总是会得到较低的值

要解决此问题,您可以从角色中删除物理材质,将其设置得足够高,使其始终被覆盖,或者根据您所站的对象进行更改,以始终获得正确的行为

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

    collider2D.sharedMaterial.friction = friction;
}
首先将新材质指定给collider.sharedMaterial

改变材料的价值


这对我很有效。

情况似乎并非如此。当我把地板的摩擦力设为20,玩家的摩擦力设为0.1时,它不会把玩家当作摩擦力为0.1,即使我把他的摩擦力设为0,地板的高摩擦力也会赢。摩擦力是介于0和1之间的值,其中0是无摩擦力,1是完全摩擦力。所以,如果你把它设为0.1和20,物体的摩擦力会是0.1,会滑动很多,这就是你看到的吗?如果将其中一个摩擦设置为0,将其他摩擦设置为1,是否会得到与切换摩擦相同的结果?