美好的一天。
我在Unity3D中制作塔防游戏,我试图创建塔式制作动画。
所以基本上,出于测试目的,我有一个原始立方体,其材质带有透明/漫反射遗留着色器,我将其颜色的alpha设置为0,因为塔应该是创建时完全不可见。它附有一个Tower脚本用于动画。我有另一个脚本来处理塔立方体的位置。
如果在一定时间内创建塔的材质为255,那么如何使塔的颜色完全可见?
因此,如果塔的构建时间为5秒,则alpha应在5秒内从0变为255.
我尝试了以下(Tower.cs):
public float buildTime = 10;
private MeshRenderer mr;;
private Color currentColor;
private bool built = false;
void Start() {
mr = GetComponent<MeshRenderer>()
currentColor = mr.material.color;
StartCorroutine(BuildAnimation());
}
IEnumerator BuildAnimation() {
float a = 0;
Color newColor = new Color(currentColor.r, currentColor.g, currentColor.b, a);
while (!built) {
mr.material.color = newColor;
if (a >= 255) {
built = true;
}
a+= 255 / buildTime;
yield return new WaitForSeconds(255 / buildTime);
}
}
提前感谢帮助真的很感激!
答案 0 :(得分:1)
[Tooltip("Time to fade in seconds")]
public float FadeTime;
private float _alpha = 0.0f;
private const float _startAlpha = 0f;
private const float _endAlpha = 1.0f;
IEnumerator Fade(MeshRenderer myMesh)
{
for (float t = 0f; t < FadeTime; t += Time.deltaTime)
{
float normalizedTime = t / FadeTime;
_alpha = Mathf.Lerp(_startAlpha, _endAlpha, normalizedTime);
yield return null;
}
_alpha = _endAlpha;
myMesh.material.color = new Color(myMesh.material.color.r,myMesh.material.color.g,myMesh.material.color.b,_alpha)
}
然后通过Fade()
传递你的网格。
答案 1 :(得分:0)
感谢@Martin Mazza Dawson的回答。虽然一开始它工作不正常,但我还是通过一个简单的修复工作。
{{1}}
爱你:)。