我正在尝试弄清楚如何在点已经发生的情况下开始并合并在一起。
[System.Serializable]
public class CameraSettings
{
public GameObject CameraFollow;
public CamerasProperties[] camerasProperties;
public bool flightMode;
public float flightSpeed;
public float timer;
}
[System.Serializable]
public class CamerasProperties
{
public GameObject Camera;
public float timeToTravel;
public Ease easeType;
public float pauseBefore;
}
public CameraSettings cameraSettings;
GameObject cameraToMove;
private void Start()
{
cameraToMove = GameObject.FindGameObjectWithTag("MainCam").gameObject;
StartCoroutine(DoCameraStuff());
}
int currentNum = 0;
IEnumerator DoCameraStuff()
{
if (currentNum <= cameraSettings.camerasProperties.Length)
{
CamerasProperties cameraProp = cameraSettings.camerasProperties[currentNum];
yield return new WaitForSeconds(cameraProp.pauseBefore);
// Create a sequence for the camera movement
cameraToMove.transform.DOMove(cameraProp.Camera.transform.position, cameraProp.timeToTravel).SetEase(cameraProp.easeType);
cameraToMove.transform.DORotateQuaternion(cameraProp.Camera.transform.rotation, cameraProp.timeToTravel).SetEase(cameraProp.easeType);
currentNum++;
StartCoroutine(DoCameraStuff());
}
}
代码如上。
我尝试使用序列,但没有成功。 我如何使用 DOTween 使补间在开始时继续
我对我认为该功能应该做什么做了最好的猜测,您确实可以使用序列来解决您的问题并稍微简化代码。我在本地计算机上使用了这段代码,它按预期工作。即使它不能完全解决您的问题,但希望它是如何在代码中使用序列的一个很好的示例。
要让事情按顺序同时发生(例如示例中的“移动”和“旋转”),您必须首先
Append
某件事,然后 Join
任何其他补间,它们将同时发生。最后不要忘记实际开始序列sequence.Play();
private void Start()
{
cameraToMove = Camera.main.gameObject;
DoCameraStuff();
}
void DoCameraStuff()
{
Sequence sequence = DOTween.Sequence();
for (int i = 0; i < cameraSettings.camerasProperties.Length; i++)
{
CamerasProperties cameraProp = cameraSettings.camerasProperties[i];
sequence.AppendInterval(cameraProp.pauseBefore);
sequence.Append(cameraToMove.transform.DOMove(cameraProp.Camera.transform.position, cameraProp.timeToTravel)
.SetEase(cameraProp.easeType));
sequence.Join(cameraToMove.transform.DORotateQuaternion(cameraProp.Camera.transform.rotation, cameraProp.timeToTravel)
.SetEase(cameraProp.easeType));
}
sequence.OnComplete(() =>
{
//on complete logic
CameraStuffComplete("SEQUENCE COMPLETED");
});
sequence.Play();
}
void CameraStuffComplete(string message)
{
Debug.Log(message);
}