Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启用和禁用渲染器或画布不工作_C#_Unity3d_Renderer_Hololens - Fatal编程技术网

C# 启用和禁用渲染器或画布不工作

C# 启用和禁用渲染器或画布不工作,c#,unity3d,renderer,hololens,C#,Unity3d,Renderer,Hololens,每5秒钟我需要拍一张照片,并将其展示在世界上。那部分很好用。 一旦拍照,它需要在1秒钟后消失。这就是我被困的地方。 我已经让它消失了,但是当再次调用它的函数时,我无法让新图片重新出现 有什么想法吗 我试过: m_CanvasRenderer.enabled = false; m_CanvasRenderer.enabled = true; m_Canvas = null; m_Canvas.setActive(false); m_Canvas.setActive(true); 不走运

每5秒钟我需要拍一张照片,并将其展示在世界上。那部分很好用。 一旦拍照,它需要在1秒钟后消失。这就是我被困的地方。 我已经让它消失了,但是当再次调用它的函数时,我无法让新图片重新出现

有什么想法吗

我试过:

m_CanvasRenderer.enabled = false;
m_CanvasRenderer.enabled = true;
m_Canvas = null;
m_Canvas.setActive(false);
m_Canvas.setActive(true);
不走运

    public class PhotoCaptureExample : MonoBehaviour
{
    GestureRecognizer m_GestureRecognizer;
    GameObject m_Canvas = null;
    Renderer m_CanvasRenderer = null;
    PhotoCapture m_PhotoCaptureObj;
    CameraParameters m_CameraParameters;
    bool m_CapturingPhoto = false;
    Texture2D m_Texture = null;

    void Start()
    {
        Initialize();
        InvokeRepeating("TakePhoto", 5.0f, 5.0f);
        //StartCoroutine(TakePhoto());
    }

void TakePhoto()
    {
        if (m_CapturingPhoto)
        {
            return;
        }
        m_CapturingPhoto = true;
        m_PhotoCaptureObj.TakePhotoAsync(OnPhotoCaptured);
    }

    void OnPhotoCaptured(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame)
    {
       // m_CanvasRenderer.enabled = true;

        if (m_Canvas == null)
        {

            m_Canvas = GameObject.CreatePrimitive(PrimitiveType.Quad);
            m_Canvas.name = "PhotoCaptureCanvas";
            m_CanvasRenderer = m_Canvas.GetComponent<Renderer>() as Renderer;
            m_CanvasRenderer.material = new Material(Shader.Find("AR/HolographicImageBlend"));
        }

        Matrix4x4 cameraToWorldMatrix;
        photoCaptureFrame.TryGetCameraToWorldMatrix(out cameraToWorldMatrix);
        Matrix4x4 worldToCameraMatrix = cameraToWorldMatrix.inverse;

        Matrix4x4 projectionMatrix;
        photoCaptureFrame.TryGetProjectionMatrix(out projectionMatrix);

        photoCaptureFrame.UploadImageDataToTexture(m_Texture);
        m_Texture.wrapMode = TextureWrapMode.Clamp;

        m_CanvasRenderer.sharedMaterial.SetTexture("_MainTex", m_Texture);
        m_CanvasRenderer.sharedMaterial.SetMatrix("_WorldToCameraMatrix", worldToCameraMatrix);
        m_CanvasRenderer.sharedMaterial.SetMatrix("_CameraProjectionMatrix", projectionMatrix);
        m_CanvasRenderer.sharedMaterial.SetFloat("_VignetteScale", 1.0f);

        // Position the canvas object slightly in front
        // of the real world web camera.
        Vector3 position = cameraToWorldMatrix.GetColumn(3) - cameraToWorldMatrix.GetColumn(2);

        // Rotate the canvas object so that it faces the user.
        Quaternion rotation = Quaternion.LookRotation(-cameraToWorldMatrix.GetColumn(2), cameraToWorldMatrix.GetColumn(1));

        m_Canvas.transform.position = position;
        m_Canvas.transform.rotation = rotation;

        m_CapturingPhoto = false;

        float counter = 0; float target = 1;
        while (counter < target)
        {
            counter += Time.deltaTime;
        }
        // m_CanvasRenderer.enabled = false;

    }
}
公共类光捕获示例:MonoBehavior
{
手势识别器m_手势识别器;
游戏对象m_Canvas=null;
渲染器m_CanvasRenderer=null;
光电捕获m_光电捕获对象;
摄像机参数m_摄像机参数;
bool m_CapturingPhoto=false;
纹理2D m_纹理=空;
void Start()
{
初始化();
调用重复(“拍照”,5.0f,5.0f);
//开始例行程序(TakePhoto());
}
空照
{
如果(m_CapturingPhoto)
{
返回;
}
m_CapturingPhoto=真;
m_PhotoCaptureObj.TakePhotoAsync(OnPhotoCaptured);
}
void OnPhotoCaptured(PhotoCapture.photocapturesult结果,PhotoCaptureFrame PhotoCaptureFrame)
{
//m_CanvasRenderer.enabled=true;
如果(m_Canvas==null)
{
m_Canvas=GameObject.CreatePrimitive(PrimitiveType.Quad);
m_Canvas.name=“PhotoCaptureCanvas”;
m_CanvasRenderer=m_Canvas.GetComponent()作为渲染器;
m_CanvasRenderer.material=新材质(Shader.Find(“AR/HolographicImageBlend”);
}
矩阵x4x4摄像机世界矩阵;
photoCaptureFrame.TryGetCameraToWorldMatrix(外部cameraToWorldMatrix);
Matrix4x4 worldToCameraMatrix=cameraToWorldMatrix.inverse;
Matrix4x4投影矩阵;
photoCaptureFrame.TryGetProjectionMatrix(外projectionMatrix);
photoCaptureFrame.UploadImageDataToTexture(m_纹理);
m_Texture.wrapMode=TextureWrapMode.Clamp;
m_CanvasRenderer.sharedMaterial.SetTexture(“_MainTex”,m_纹理);
m_CanvasRenderer.sharedMaterial.SetMatrix(“_WorldToCameratrix”,WorldToCameratrix);
m_CanvasRenderer.sharedMaterial.SetMatrix(“_CameraProjectionMatrix”,projectionMatrix);
m_CanvasRenderer.sharedMaterial.SetFloat(“_VignetteScale”,1.0f);
//将画布对象稍微放在前面
//真实世界的网络摄像机。
Vector3位置=cameraToWorldMatrix.GetColumn(3)-cameraToWorldMatrix.GetColumn(2);
//旋转画布对象,使其面向用户。
四元数旋转=四元数.LookRotation(-cameraToWorldMatrix.GetColumn(2),cameraToWorldMatrix.GetColumn(1));
m_Canvas.transform.position=位置;
m_Canvas.transform.rotation=旋转;
m_CapturingPhoto=假;
浮动计数器=0;浮动目标=1;
while(计数器<目标)
{
计数器+=时间增量时间;
}
//m_CanvasRenderer.enabled=false;
}
}

您可以创建一个使对象慢慢消失的动画(颜色属性从当前值变为0),以及另一个使对象再次出现的动画,并在需要时播放它们。在这种情况下,我将制作什么动画?m_画布还是m_画布?图像将添加到m_CanvasRenderer。m_Canvas和m_CanvasRenderer没有alpha属性