这就是我尝试过的。在我正在使用的底部
Time.timeScale = 0f;
yield break;
但它永远不会暂停游戏。
我也尝试过这条线
yield return null;
使
yield return new WaitForEndOfFrame();
但它也没有暂停游戏。我只先尝试过
Time.timeScale = 0f;
然后尝试也打破;然后还添加了
StopAllCoroutines();
但到目前为止没有任何效果。
这是完整的脚本:
using System.Collections;
using Unity.VisualScripting;
using UnityEngine;
public class Scaling : MonoBehaviour
{
public GameObject objectToScale;
public float duration = 1f;
public Vector3 minSize;
public Vector3 maxSize;
public bool scaleUp = false;
public Coroutine scaleCoroutine;
public bool automatic = false;
public bool coroutineIsRunning = false;
private Quaternion endRotationScaleDown;
bool rotationAndScalingComplete = false;
private void Start()
{
}
private void Update()
{
if (automatic)
{
if (!coroutineIsRunning)
{
Scale();
}
}
else
{
if (Input.GetKeyDown(KeyCode.G))
{
Scale();
}
}
}
private void Scale()
{
scaleUp = !scaleUp;
if (scaleCoroutine != null)
{
StopCoroutine(scaleCoroutine);
}
scaleCoroutine = StartCoroutine(ScaleOverTime(objectToScale, scaleUp ? maxSize : minSize, duration, scaleUp));
}
private IEnumerator ScaleOverTime(GameObject targetObj, Vector3 toScale, float duration, bool isScalingUp)
{
float counter = 0;
Vector3 startScaleSize = targetObj.transform.localScale;
Quaternion startRotation = targetObj.transform.rotation;
Quaternion endRotationScaleUp = Quaternion.Euler(0, 0, 0); // Example end rotation when scaling up
Quaternion endRotationScaleDown = Quaternion.Euler(0, 180, 0); // Example end rotation when scaling down
// Generate a random angle (0 or 1)
int randomAngle = Random.Range(0, 2);
// Set the rotation angle based on the random value
float t = (randomAngle == 0) ? 180f : -180f;
// Choose the end rotation based on the scaling direction.
Quaternion endRotation = isScalingUp ? endRotationScaleUp : Quaternion.Euler(0, t, 0);
targetObj.transform.rotation = endRotation;
coroutineIsRunning = true;
while (counter < duration)
{
counter += Time.deltaTime;
float lerpFactor = counter / duration;
targetObj.transform.localScale = Vector3.Lerp(startScaleSize, toScale, lerpFactor);
targetObj.transform.rotation = Quaternion.Lerp(startRotation, endRotation, lerpFactor);
if (counter >= duration)
{
coroutineIsRunning = false;
// Ensuring the final state matches exactly
targetObj.transform.localScale = toScale;
targetObj.transform.rotation = endRotation;
rotationAndScalingComplete = true;
}
yield return null;
}
if (rotationAndScalingComplete)
{
Time.timeScale = 0f;
yield break;
}
}
}