我正在开发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文件设置。
答案 0 :(得分:0)
问题可能是你的角色和地板都有物理材料,而组合方法是采用两者中较小的一个,你总会得到较低的值。
要解决此问题,您要么从角色中移除物理材质,将其设置得足够高,始终会被覆盖,或者根据您所站立的内容进行更改以获得正确的行为。
答案 1 :(得分:0)
void Start () {
actorMaterial = new PhysicsMaterial2D();
collider2D.sharedMaterial = actorMaterial;
collider2D.sharedMaterial.friction = friction;
}
首先将新材料分配给 collider.sharedMaterial。
并改变材料价值。
它对我有用。