所以我把这个函数附加到一个球体上,而另一个附加到另一个球体上。它们被装配以发射轨迹,并且它们围绕轨道运行的游戏物体是锁定在0,0,0的球体。到目前为止,这是我的代码:
float t = 0;
float speed;
float width;
float height;
int cat = 0;
public GameObject orbit; //the object to orbit
// Use this for initialization
void Start()
{
speed = 2;
width = 5;
height = 2;
InvokeRepeating("test", .001f, .009f);
}
void test()
{
t += Time.deltaTime * speed;
Vector3 orbitv = orbit.transform.position;
float inc = .0000000001f;
inc += inc + t;
float angmom = .00001f;
angmom = angmom + t;
float x = orbitv.x + Mathf.Cos(t);
float z = orbitv.z + inc; //+ (Mathf.Cos(t)*Mathf.Sin(t));
float y = orbitv.y + Mathf.Sin(t);
transform.position = new Vector3(x, y, z);
}}
不是专门在z方向上移动,我希望它们继续当前的旋转,但是在0,0,0处围绕球体的圆圈,同时保持在相同的y水平。任何人都有任何想法我怎么能这样做?
答案 0 :(得分:1)
这是我为你准备的一些代码。 所有的动作都是通过基本的三角函数和一些简单的矢量数学来实现的。
要解决这些问题,请尝试将事情分解为将动作分为循环/上下&侧身。这样可以创建铃声效果。
通过改变振荡的相位并增加更多的路径,添加更多交织的波应该是微不足道的。
public class Orbit : MonoBehaviour {
float t = 0;
public float speed;
public float width;
public float height;
public float radius;
int cat = 0;
public GameObject center; //the object to orbit
public Vector3 offset;
void Update()
{
t = Time.time * speed;
OrbitAround();
AddSideways();
}
void OrbitAround()
{
float x = radius * Mathf.Cos(t);
float y = Mathf.Sin(offset.y * t);
float z = radius * Mathf.Sin(t);
transform.position = new Vector3(x, y, z);
}
void AddSideways()
{
float x = Mathf.Cos(offset.x * t);
Vector3 dir = transform.position - center.transform.position;
transform.position += dir.normalized * x;
}
}
您可以使用Vec3 offset
来改变振荡的频率,并且基本上可以让您选择响铃次数。