如何在相机前自动定位GameObject?

时间:2018-01-16 09:01:09

标签: c# unity3d unity5

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没有覆盖整个摄像机视图。 我想制作一个完整的黑色视图然后它会淡出。 褪色工作正常,飞机位置不好:

fading

在游戏运行时,底部是游戏视图窗口。在褪色开始之后有一点,你可以看到飞机没有覆盖整个相机。在右边有一个空间。

也许我需要以某种方式改变平面尺寸和旋转?我们的想法是将飞机自动定位在相机前面,使其全部变黑。

1 个答案:

答案 0 :(得分:2)

如果相机可以移动,您还需要为飞机设置相同的方向

transform.rotation = camera.transform.rotation;

然后简单地让飞机真的很大(使用比例参数)。 当然,如果需要,你也可以计算出确切的尺寸,但透镜相机并不是那么简单。

正如m.rogalski在你的帖子评论中所建议的另一个解决方案是使用填充屏幕的画布:

  • 在场景中创建一个空对象,并将 Canvas 组件添加到其中。

  • RenderMode 中选择屏幕空间 - 叠加

  • 在层次结构中的下方创建另一个游戏对象

  • 在此gameObject上,添加图像组件,放置黑色图像,或者不添加图像和黑色

  • 在同一个组件上,将变换的锚点设置为0到1,没有位置偏移,以覆盖整个屏幕