[英]How to make invisible game object with transparent/diffuse with alpha 0 to visible alpha 255 over time
大家好。
我正在 Unity3D 中制作塔防游戏,并且正在尝试创建塔建造动画。
所以基本上,出于测试目的,我有一个原始立方体,其材质带有透明/漫反射旧着色器,并且我已将其颜色的 alpha 设置为 0,因为塔在创建时应该完全不可见。 它附加了一个用于动画的 Tower 脚本。 我有另一个脚本来处理塔立方体的放置。
当塔在一定时间内创建时,如何使塔完全可见,其材料颜色的 alpha 为 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);
}
}
帮助将不胜感激,提前致谢!
[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()
传递你的网格。
感谢@Martin Mazza Dawson 的回答。 虽然一开始它不能正常工作,但我通过一个简单的修复让它工作。
IEnumerator Fade(MeshRenderer myMesh)
{
for (float t = 0f; t < FadeTime; t += Time.deltaTime)
{
float normalizedTime = t / FadeTime;
_alpha = Mathf.Lerp(_startAlpha, _endAlpha, normalizedTime);
// The fix
myMesh.material.color = new Color (myMesh.material.color.r, myMesh.material.color.g, myMesh.material.color.b, _alpha);
yield return null;
}
//_alpha = _endAlpha;
//myMesh.material.color = new Color (myMesh.material.color.r, myMesh.material.color.g, myMesh.material.color.b, _alpha);
}
爱你 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.