我有一个简单的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项目。
答案 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));
}
所以基本上要逐步完成更新方法,您需要距离/(时间*速度) 这是伪代码,但是您应该可以在这里进行修改。