您將創建一個新的monobehaviour腳本,並將其添加到您的原始。那麼隨着時間的推移,你將使用monobehaviour(或使用協程)的「更新」方法來更改對象。
Monobehaviour必須是這個樣子:
public class ShrinkBehaviour : MonoBehaviour
{
bool isNeedToShrink;
Config currentConfig;
float startTime;
float totalDistance;
public void StartShrink(Config config)
{
startTime = Time.time;
currentConfig = config;
totalDistance = Vector3.Distance(currentConfig.startSize, currentConfig.destinationSize);
isNeedToShrink = true;
transform.localScale = config.startSize;
}
private void Update()
{
if (isNeedToShrink)
{
var nextSize = GetNextSize(currentConfig);
if (Vector3.Distance(nextSize, currentConfig.destinationSize) <= 0.05f)
{
isNeedToShrink = false;
return;
}
transform.localScale = nextSize;
}
}
Vector3 GetNextSize(Config config)
{
float timeCovered = (Time.time - startTime)/config.duration;
var result = Vector3.Lerp(config.startSize, config.destinationSize, timeCovered);
return result;
}
public struct Config
{
public float duration;
public Vector3 startSize;
public Vector3 destinationSize;
}
}
對於使用這個,你必須做下一個:
public Cylinder()
{
GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
var shrink = cylinder.AddComponent<ShrinkBehaviour>();
shrink.StartShrink(new ShrinkBehaviour.Config() { startSize = Vector3.one * 10, destinationSize = Vector3.one * 1, duration = 20f });
cylinder.transform.position = new Vector3(3, 0, 0);
cylinder.GetComponent<MeshRenderer>().material.color = Random.ColorHSV();
Destroy(cylinder, 30.0f);
}
你必須記住,monobehaviour腳本必須是獨立的文件,而且必須有名稱與monobehaviour-class名稱相似。例如,ShrinkBehaviour.cs;
'的Vector3 startScaleSize = objectToScale.position;' 應該 '的Vector3 startScaleSize = objectToScale.localScale;' – TheSkimek
@TheSkimek是啊,這是正確的。這是一個快速端口。感謝您的更正。 – Programmer