Я использую Unity 2019.2.13f1. У меня есть следующий код, прикрепленный к камере orthographi c. На сцене только камера, больше ничего.
Когда я бегу, я вижу только серый цвет. Должно быть что-то не так в моем коде. Материал? УФ? Преобразование? Или метод OnPostRender()
?
Вот мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ManualRendering : MonoBehaviour
{
private Mesh _quad;
private Texture2D _texture;
private Material _material;
private RenderTexture _renderTexture;
void Start() {
MakeQuadMesh();
MakeTexture();
MakeMaterial();
_renderTexture = new RenderTexture(Screen.width, Screen.height, 0, RenderTextureFormat.ARGBFloat);
}
void OnPostRender() {
Graphics.SetRenderTarget(_renderTexture);
GL.Clear(true, true, Color.gray);
Graphics.DrawMesh(_quad, Matrix4x4.TRS(Vector3.zero, Quaternion.identity, Vector3.one), _material, 0);
Graphics.Blit(_renderTexture, (RenderTexture)null);
}
private void MakeQuadMesh() {
List<Vector3> vertices = new List<Vector3> {
new Vector3(-0.5f, 0.5f, 0),
new Vector3(0.5f, 0.5f, 0),
new Vector3(0.5f, -0.5f, 0),
new Vector3(-0.5f, -0.5f, 0)
};
int[] indices = new int[4] { 0, 1, 2, 3 };
List<Vector2> uvs = new List<Vector2> {
new Vector2(0, 0),
new Vector2(1, 0),
new Vector2(1, 1),
new Vector2(0, 1)
};
_quad = new Mesh();
_quad.SetVertices(vertices);
_quad.SetIndices(indices, MeshTopology.Quads, 0);
_quad.SetUVs(0, uvs);
}
private void MakeTexture() {
int size = 32;
_texture = new Texture2D(size, size);
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
int red = (i + j) % 2;
_texture.SetPixel(i, j, new Color(red, 1, 0));
}
}
_texture.Apply();
}
private void MakeMaterial() {
_material = new Material(Shader.Find("UI/Default"));
_material.SetTexture("_MainTex", _texture);
}
}
Если у меня нет камер, у меня только черный экран. Если я его создаю, я вижу только цвет фона камеры.