如何将游戏对象自动放置在镜头前?

How can I position a GameObject in front of camera automatic?

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;

在这种情况下,变换是一个平面。 脚本附在Plane上。

但结果是平面没有覆盖整个相机视图。 我想制作一个全黑的视图,然后它会淡出。 褪色工作正常但平面位置不正确:

底部是游戏视图 window,而游戏是 运行。这是褪色开始后的一点,您可以看到平面没有覆盖整个相机。右边有个space.

也许我也需要以某种方式改变平面大小和旋转?这个想法是将飞机自动定位在相机前面以使其全黑。

如果相机可以移动,您还需要设置与您的平面相同的方向

transform.rotation = camera.transform.rotation;

然后简单地让飞机变得非常大就可以了(使用比例参数)。 当然,如果需要的话,您也可以计算出确切的尺寸,但是对于透视相机来说,这并不是那么简单。

另一个解决方案,正如 m.rogalski 在对您的 post 的评论中所建议的那样,是使用 canvas 来填满屏幕:

  • 在您的场景中创建一个空对象并向其添加 Canvas 组件。

  • RenderMode中选择Screen Space - Overlay

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

  • 在此游戏对象上,添加 Image 组件,放置黑色图像,或没有图像和黑色

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