C# 启用和禁用渲染器或画布不工作
每5秒钟我需要拍一张照片,并将其展示在世界上。那部分很好用。 一旦拍照,它需要在1秒钟后消失。这就是我被困的地方。 我已经让它消失了,但是当再次调用它的函数时,我无法让新图片重新出现 有什么想法吗 我试过: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); 不走运
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属性