C# 如何通过矢量3移动而不是变换来移动实例?
我有一段代码,可以将球体实例位置从第一个网格的顶点映射到第二个网格的顶点 球体实例通过使用变换数据位置的Lerp移动。问题是,显然以这种方式移动实例与Unity的物理效果不太好,因此与球体实例碰撞的其他对象不会与它们正确碰撞 我如何更改代码以正确地使球体实例以Vector3速度移动(或使Unity physics正常工作的任何东西),而不是通过设置显式变换位置来移动 这是代码。我有以下变量:C# 如何通过矢量3移动而不是变换来移动实例?,c#,unity3d,velocity,C#,Unity3d,Velocity,我有一段代码,可以将球体实例位置从第一个网格的顶点映射到第二个网格的顶点 球体实例通过使用变换数据位置的Lerp移动。问题是,显然以这种方式移动实例与Unity的物理效果不太好,因此与球体实例碰撞的其他对象不会与它们正确碰撞 我如何更改代码以正确地使球体实例以Vector3速度移动(或使Unity physics正常工作的任何东西),而不是通过设置显式变换位置来移动 这是代码。我有以下变量: public List<TransformData> meshVertices1 = new
public List<TransformData> meshVertices1 = new List<TransformData>();
public List<TransformData> meshVertices2 = new List<TransformData>();
然后,我根据上述数据实例化球体实例:
spheres = new GameObject[24];
for (int i = 0; i < mesh.vertexCount; i++)
{
spheres[i] = Instantiate(spherePrefab, meshVertices1[i].position, Quaternion.identity, transform);
}
spheres=新游戏对象[24];
对于(int i=0;i
最后,在更新方法中为球体实例位置放置一个Lerp:
for (int i = 0; i < 24; i++)
{
spheres[i].transform.localPosition = Vector3.Lerp(meshVertices1[i].position, meshVertices2[i].position, t);
}
for(int i=0;i<24;i++)
{
球体[i].transform.localPosition=Vector3.Lerp(网格垂直1[i].position,网格垂直2[i].position,t);
}
谢谢。我尝试过的其中一件事就是改变更新方法
Vector3 convert=spheres[i].transform.InverseTransformPoint(transform.localPosition);
convert=Vector3.Lerp(meshVertices1[i],meshVertices2[i]。位置,t)代码>
但在点击play时,它只会使球体实例全部掉落到地板上并滚动。而我希望实例移动并保持在第二个网格顶点的形状中 一种方法是获取每个球体的刚体的引用并调用(确保在FixedUpdate
中完成此操作):
for(int i=0;i<24;i++)
{
刚体rb=spheres[i].GetComponent();
rb.MovePosition(Vector3.Lerp(meshVertices1[i].位置,meshVertices2[i].位置,t));
}
为了提高性能,您可能需要创建每个球体的刚体的列表一次,然后在该列表中循环,这样就不必每帧调用GetComponent
24次 一种方法是获取每个球体的刚体的引用并调用(确保在FixedUpdate
中完成此操作):
for(int i=0;i<24;i++)
{
刚体rb=spheres[i].GetComponent();
rb.MovePosition(Vector3.Lerp(meshVertices1[i].位置,meshVertices2[i].位置,t));
}
为了提高性能,您可能需要创建每个球体的刚体的列表一次,然后在该列表中循环,这样就不必每帧调用GetComponent
24次 多谢各位。这就是方法!非常感谢。这就是方法!
for (int i = 0; i < 24; i++)
{
spheres[i].transform.localPosition = Vector3.Lerp(meshVertices1[i].position, meshVertices2[i].position, t);
}
for (int i = 0; i < 24; i++)
{
Rigidbody rb = spheres[i].GetComponent<Rigidbody>();
rb.MovePosition(Vector3.Lerp(meshVertices1[i].position, meshVertices2[i].position, t));
}