C#-在3D维度中将对象从一个位置移动到另一个位置

时间:2018-10-24 12:28:29

标签: c# unity3d

我有一个简单的C#控制台应用程序,用作Unity客户端的TCP服务器。我需要将x,y,z的起始位置转换为结束位置,并将Console.WriteLIne转换为到达结束位置所需的所有x,y,z坐标。

这是我编写的原型函数,用于以一定速度将对象从3d位置移动到另一个位置。

public class Position{
    public float x;
    public float y;
    public float z;
}

public static Position MoveObject(Position position1, Position position2, float speed){
    Position currentPosition = new Position();
    currentPosition.x = position1.x + (position2.x - position1.x) * speed;
    currentPosition.y = position1.y + (position2.y - position1.y) * speed;
    currentPosition.z = position1.z + (position2.z - position1.z) * speed;
    return currentPosition;
}

但是,这只是一个原型。我需要类似while的循环来遍历对象将到达的每个点,直到到达终点并显示其需要的所有坐标。

请记住,这是C#控制台应用程序,而不是Unity项目。

1 个答案:

答案 0 :(得分:0)

您将需要一个用于旧位置和所需位置的变量。和一个计时器,刻度设置为大约1500。然后在while循环中,您只需在它们之间进行插值。

将您的班级更改为:

public class Position{
    public float x;
    public float y;
    public float z;
public Position(float ix, float iy, float iz){
this.x=ix;
this.y = iy;
this.z=iz;
}
}

类似:

Position oldPosition;//you need to set this to start position somewhere(OnStart or prior method)
Position newPosition;//you need to set this to desired position somewhere(OnStart or prior method)

,您将在Update()中使用它

if(currentPosition!=newPosition){
    Position distance = new Position(oldPosition.x-newPosition.x,oldPosition.y- 
    newPosition.y,oldPosition.z-newPosition.z,);
    Position currentPosition =new Position( distance.x/ (elapsedTime * 
    velocity),distance.y/ (Time.DeltaTime * velocity),distance.z/ (elapsedTime * 
    velocity));
}

所以基本上要逐步完成更新方法,您需要距离/(时间*速度) 这是伪代码,但是您应该可以在这里进行修改。