如图从长方体上方移动到圆形中心位置。给定一个初速度,和投掷点的forward值,长方型、原型的vec3坐标。
代码如何写?
?
? ? ? ? Vector3 sourcePos = new Vector3(transform.position.x, 0, transform.position.z);
? ? ? ? float length = (targePos - sourcePos).magnitude;
?
? ? ? ? // fireDir.Normalize();
? ? ? ? float speed = 12;//暂时给定12
? ? ? ? //水平/竖直方向速度分量
? ? ? ? float verticalSpeed = speed * fireDir.y;
? ? ? ? float horizontalSpeed = speed * Mathf.Sqrt(1 - fireDir.y * fireDir.y);
? ? ? ? float t = Mathf.Abs(length / horizontalSpeed);
? ? ? ? float g = (transform.position.y * 2 / t + 2 * verticalSpeed) / t;
? ? ? ? Vector3 forwardSpeed = fireDir;
? ? ? ? forwardSpeed.y = 0;
? ? ? ? forwardSpeed.Normalize();
? ? ? ? forwardSpeed *= horizontalSpeed;
? ? ? ? yield return null;
? ? ? ? Vector3 randRotate = Random.onUnitSphere;//随机旋转。
? ? ? ? Vector3 rotateDir = (sourcePos - targePos).normalized;
? ? ? ? rotateDir = new Vector3(rotateDir.x, rotateDir.y, rotateDir.z * randRotate.x);
? ? ? ? float timer = 0;
? ? ? ? Vector3 offset;
? ? ? ? while (isMoving)
? ? ? ? {
? ? ? ? ? ? timer += Time.deltaTime;
? ? ? ? ? ? offset = forwardSpeed;
? ? ? ? ? ? offset.y = (verticalSpeed - g * timer);
? ? ? ? ? ? offset *= Time.deltaTime;
? ? ? ? ? ? transform.Translate(offset, Space.World);
? ? ? ? ? ? if (rotateSpeed > 0)
? ? ? ? ? ? ? ? rotateNode.Rotate(rotateDir * rotateSpeed, Space.Self);
? ? ? ? ? ? if (transform.position.y < 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Revert();//销毁回收
? ? ? ? ? ? ? ? yield break;
? ? ? ? ? ? }
? ? ? ? ? ? yield return null;
? ? ? ? }
? ? ? ?Revert();
|