控制开始和终点对象在2分之间



im试图以2分之间的统一移动对象,而目前它有点奇怪,我读了文档,它说对象开始点是(0,0,0,0,0)所以我的对象将我的对象置于我那里的另一个网格下,而我实际上可以控制的终点是10,我希望对象在1.5和10之间移动(不是0到10)我有这个

void Update () {
    transform.position = new Vector3(transform.position.x,Mathf.PingPong(Time.time,10.0f), transform.position.z);
}

当我尝试在球上加速时:

void Update () {
    transform.position = new Vector3(transform.position.x,Mathf.PingPong(Time.time,10.0f) * 10, transform.position.z);
}

对象不会殖民并在终点返回它只是停止循环,再也不会回来了,我该如何纠正这两个问题?

如果您的对象具有对撞机,我建议您通过其刚性体而不是转换移动它,以避免潜在的碰撞问题。尝试以下操作:

public float MinY = 1.5f; // y position of start point
public float MaxY = 10f; // y position of end point
public float PingPongTime = 1f; // how much time to wait before reverse
public Rigidbody rb; // reference to the rigidbody
void Update()
{
     //get a value between 0 and 1
     float normalizedTime = Mathf.PingPong(Time.time, PingPongTime) / PingPongTime;
     //then multiply it by the delta between start and end point, and add start point to the result
     float yPosition = normalizedTime * (MaxY - MinY) + MinY;
     //finally update position using rigidbody 
     rb.MovePosition(new Vector3(rb.position.x, yPosition, rb.position.z));
}

在这里,您可以更好地控制旅行距离和速度。实际上,我没有得到您面临的问题。但是不要在这里和尝试中忘记,您正在直接修改对象的位置,而不是添加力或否则。

希望对您有帮助。

我认为您只是误解了Mathf.PingPong方法的工作方式:

  • 第一个参数 t 是您要在 0 和给定的 length 之间"夹紧"的值Time.time像您一样,因为此值会随着时间的推移而增加,因此会永久振荡。如果要增加/降低振荡速度,则必须乘以它。
  • 第二个参数长度是"夹具"的最大值:如果您想增加/降低距离(在您的情况下),则将其设置为 0并将整个Mathf.PingPong(...)乘以一个值或直接给它提供想要的值(这两个实现都会有不同的效果。

  • Mathf.PingPong(Time.time * speed, 1.0f) * value速度将影响振荡速度/将影响达到的最大值以及完成振荡的速度/时间(来回来回)将保持与 value 更改并减小为 speed 增加

  • Mathf.PingPong(Time.time * speed, value)速度会影响振荡速度/将影响达到的最大值,但不会增加完成振荡的速度/时间(来回)如增加并减少 speed 增加

关于您的其他问题:

如果要在 1.5 10 之间移动对象,则必须写下类似的内容: transform.position = new Vector3(transform.position.x, 1.5f + Mathf.PingPong(Time.time, 10.0f - 1.5f), transform.position.z);

同样,如果要检测碰撞,请避免手动设置位置,因为它会弄乱物理并引起怪异的行为。在保持物理工作的同时移动对象的最佳方法是@heldap所说的使用Rigidbody.MovePosition

最新更新