GraphicsBuffer.GetData füllt das bereitgestellte Array nicht auf

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: GraphicsBuffer.GetData füllt das bereitgestellte Array nicht auf

by Guest » 20 Dec 2024, 14:48

Kontext
Ich versuche, einen Code für Unity 2021 zu erstellen, der aus einem nicht lesbaren ein lesbares Netz generiert. Ich habe eine Funktion erstellt, die manchmal funktioniert. Es gibt bestimmte Meshes im Spiel, die nicht funktionieren. Hier ist die vollständige Funktion, die ich verwende:
public static Mesh GetReadable(this Mesh mesh)
{
if (mesh.isReadable)
return Object.Instantiate(mesh);

var nMesh = new Mesh();
nMesh.indexFormat = mesh.indexFormat;

// vertices
nMesh.SetVertexBufferParams(mesh.vertexCount, mesh.GetVertexAttributes());
var buffers = mesh.vertexBufferCount;
for (int i = 0; i < buffers; i++)
using (var vBuffer = mesh.GetVertexBuffer(i))
{
var vData = new byte[vBuffer.stride * vBuffer.count];
vBuffer.GetData(vData);
nMesh.SetVertexBufferData(vData, 0, 0, vData.Length, i);
}

// triangles
nMesh.subMeshCount = mesh.subMeshCount;
using (var iBuffer = mesh.GetIndexBuffer())
{
nMesh.SetIndexBufferParams(iBuffer.count, mesh.indexFormat);
var iSize = iBuffer.stride * iBuffer.count;
var iData = new byte[iSize];
iBuffer.GetData(iData);
nMesh.SetIndexBufferData(iData, 0, 0, iSize);
}

// submeshes
var pos = 0u;
for (int i = 0; i < nMesh.subMeshCount; i++)
{
var subMeshIndexCount = mesh.GetIndexCount(i);
nMesh.SetSubMesh(i, new SubMeshDescriptor((int)pos, (int)subMeshIndexCount));
pos += subMeshIndexCount;
}

nMesh.RecalculateBounds();

return nMesh;
}

Problem
Bei Verwendung dieser Funktion auf bestimmten Netzen wurde ein Netz mit einem Volumen von Null generiert. Nach einigem Debuggen stellte ich fest, dass GraphicsBuffer.GetData Die Funktion ließ das Array ausschließlich auf Nullen zurück, insbesondere setzte sie nicht alles auf Null, sondern beließ es als Nullen (wenn ich eine Schleife verwendet hätte, um alles auf 1 zu setzen). dann wäre es danach immer noch 1). Dies tritt sowohl bei den Scheitelpunktpuffern als auch bei den Indexpuffern auf.
Ich habe erfolglos versucht, die Problemnetze in einem eigenen Unity-Projekt neu zu erstellen, also schaffe ich es nicht einmal Ich weiß, warum diese Meshes überhaupt so aussehen.
Und bevor jemand fragt: Nein, ich kann isReadable nicht einfach auf den Meshes aktivieren, weil ich das Spiel modifiziere und nicht erstelle , die Bundles sind bereits fertig, Ich baue sie nicht, ich arbeite nur mit den Werkzeugen, die mir zur Verfügung stehen.

Top