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# 如何通过矢量3移动而不是变换来移动实例?_C#_Unity3d_Velocity - Fatal编程技术网

C# 如何通过矢量3移动而不是变换来移动实例?

C# 如何通过矢量3移动而不是变换来移动实例?,c#,unity3d,velocity,C#,Unity3d,Velocity,我有一段代码,可以将球体实例位置从第一个网格的顶点映射到第二个网格的顶点 球体实例通过使用变换数据位置的Lerp移动。问题是,显然以这种方式移动实例与Unity的物理效果不太好,因此与球体实例碰撞的其他对象不会与它们正确碰撞 我如何更改代码以正确地使球体实例以Vector3速度移动(或使Unity physics正常工作的任何东西),而不是通过设置显式变换位置来移动 这是代码。我有以下变量: public List<TransformData> meshVertices1 = new

我有一段代码,可以将球体实例位置从第一个网格的顶点映射到第二个网格的顶点

球体实例通过使用变换数据位置的Lerp移动。问题是,显然以这种方式移动实例与Unity的物理效果不太好,因此与球体实例碰撞的其他对象不会与它们正确碰撞

我如何更改代码以正确地使球体实例以Vector3速度移动(或使Unity physics正常工作的任何东西),而不是通过设置显式变换位置来移动

这是代码。我有以下变量:

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));
}