using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;
public class FadeScript : MonoBehaviour
{
public Camera camera;
public float fadeDuration = 5;
public bool alphaZero = false;
private Material material;
private float targetAlpha = 0;
private float lerpParam;
private float startAlpha = 1;
void Start()
{
Vector3 camFront = camera.transform.position + camera.transform.forward;
transform.position = camFront;
material = GetComponent<Renderer>().material;
SetMaterialAlpha(1);
}
void Update()
{
lerpParam += Time.deltaTime;
float alpha = Mathf.Lerp(startAlpha, targetAlpha, lerpParam / fadeDuration);
SetMaterialAlpha(alpha);
if (alpha == 0)
{
alphaZero = true;
}
}
public void FadeTo(float alpha, float duration)
{
startAlpha = material.color.a;
targetAlpha = alpha;
fadeDuration = duration;
lerpParam = 0;
}
private void SetMaterialAlpha(float alpha)
{
Color color = material.color;
color.a = alpha;
material.color = color;
}
}
我希望变换将在相机前面。 所以我在开始时做了:
Vector3 camFront = camera.transform.position + camera.transform.forward;
transform.position = camFront;
在这种情况下,transform是一个Plane。 该脚本附加到Plane。
但结果是Plane没有覆盖整个摄像机视图。 我想制作一个完整的黑色视图然后它会淡出。 褪色工作正常,飞机位置不好:
在游戏运行时,底部是游戏视图窗口。在褪色开始之后有一点,你可以看到飞机没有覆盖整个相机。在右边有一个空间。
也许我需要以某种方式改变平面尺寸和旋转?我们的想法是将飞机自动定位在相机前面,使其全部变黑。
答案 0 :(得分:2)
如果相机可以移动,您还需要为飞机设置相同的方向
transform.rotation = camera.transform.rotation;
然后简单地让飞机真的很大(使用比例参数)。 当然,如果需要,你也可以计算出确切的尺寸,但透镜相机并不是那么简单。
正如m.rogalski在你的帖子评论中所建议的另一个解决方案是使用填充屏幕的画布:
在场景中创建一个空对象,并将 Canvas 组件添加到其中。
在 RenderMode 中选择屏幕空间 - 叠加
在层次结构中的下方创建另一个游戏对象
在此gameObject上,添加图像组件,放置黑色图像,或者不添加图像和黑色
在同一个组件上,将变换的锚点设置为0到1,没有位置偏移,以覆盖整个屏幕