C# 如何使不可见的游戏对象随着时间的推移透明/漫反射alpha 0到可见alpha 255
大家好 我正在Unity3D中制作一个塔楼防御游戏,我正在尝试创建一个塔楼建造动画 因此,基本上,出于测试目的,我有一个带有透明/漫反射传统着色器的材质的基本立方体,并且我已经将其颜色的alpha设置为0,因为塔楼在创建时应该是完全不可见的。它附带了一个用于动画的塔脚本。我有另一个脚本处理塔立方体的放置 当塔在一定时间内创建时,如何使其材质颜色的alpha为255的塔完全可见 所以如果塔的建造时间是5秒,阿尔法应该在5秒内从0变为255 我尝试了以下方法(Tower.cs):C# 如何使不可见的游戏对象随着时间的推移透明/漫反射alpha 0到可见alpha 255,c#,unity3d,unity5,C#,Unity3d,Unity5,大家好 我正在Unity3D中制作一个塔楼防御游戏,我正在尝试创建一个塔楼建造动画 因此,基本上,出于测试目的,我有一个带有透明/漫反射传统着色器的材质的基本立方体,并且我已经将其颜色的alpha设置为0,因为塔楼在创建时应该是完全不可见的。它附带了一个用于动画的塔脚本。我有另一个脚本处理塔立方体的放置 当塔在一定时间内创建时,如何使其材质颜色的alpha为255的塔完全可见 所以如果塔的建造时间是5秒,阿尔法应该在5秒内从0变为255 我尝试了以下方法(Tower.cs): public fl
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);
}
}
public float buildTime=10;
私人秘书;mr;;
私人色彩;
私有布尔构建=假;
void Start(){
mr=GetComponent()
currentColor=mr.material.color;
StartCorroutine(BuildAnimation());
}
IEnumerator BuildAnimation(){
浮点数a=0;
Color newColor=新颜色(currentColor.r、currentColor.g、currentColor.b、a);
而(!构建){
mr.material.color=newColor;
如果(a>=255){
构建=真实;
}
a+=255/构建时间;
返回新的WaitForSeconds(255/构建时间);
}
}
非常感谢您的帮助,提前谢谢 [工具提示(“以秒为单位的淡入淡出时间”)]
[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)
}
公共浮动淡出时间;
私人浮动α=0.0f;
私有常量浮点值_startAlpha=0f;
私有常数浮点_endAlpha=1.0f;
IEnumerator淡入淡出(网格渲染器myMesh)
{
for(float t=0f;t
然后将网格穿过
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);
}
IEnumerator淡入淡出(网格渲染器myMesh)
{
for(float t=0f;t
爱你:)工作正常但不正常。颜色以0 alpha开始,然后在FaceTime之后突然变为255。你能检查一下你的代码,看看有什么问题吗?我希望塔慢慢变得可见,而不是突然。无论如何谢谢你@Tayab您是否在inspector中设置了
FadeTime
?可以在inspector中将其设置为5秒,也可以在Start()
中进行设置,使其与塔的建造时间相等。如果你不设置它,它会跳过for循环并将alpha设置为endalpha。是的,我尝试过将FadeTime设置为5秒和其他各种时间,但结果是一样的,FadeTime之后alpha突然从0变为255。是的,我的错,很明显,它只是在时间结束之前设置alpha。@MartinMazzaDawson这是游戏的代码外观:-再次感谢