ich ein IOS SDK für Unity/COCOS/SpritKit Spiel App aufzeichnen video.Main Programm entwickeln wollen, ist auf synthetische Video nach Screenshots.Nehmen Sie einen Screenshot auf ios für Unity/COCOS/SpritKit Spiele
Jetzt mache ich den Test mit IOS-Projekt von der Einheit Spiel auf IOS 7.0-Gerät und versuchen Opengl Funktion glreadpiexls() verwenden Pixelpuffer zu lesen, bekam aber immer das schwarze Bild, das für Wochen beunruhigt mich. Ich versuche einige Lösungen wie den Kontext zu setzen und die EAGLView-Zeichnungseigenschaft vor glreadpiexls() zu setzen, aber nicht zu arbeiten. Und einige schlagen vor, sicherzustellen, glareadpiexls() vor presentRenderbuffer auszuführen, aber wie. Ich kann den Code von Unity nicht ändern.
Lösungen wie IOSuface unter iOS 9.0 abgeschrieben und scheint nur für UIView Elemente und IOSurface wurde auf iOS 9.0 abgeschrieben und scheint nur für UIView Elemente. RenderTexture oder Application.CaptureScreenshot sind nur für Unity-Projekte, nicht für mein IOS SDK.
So
mir So kann jemand ein paar Vorschläge für die Einheit/COCOS/SpritKit Spiele für den Screenshot auf iOS geben, und das ist mein aktueller Code.
int w = 320;//size.width;//viewport[2];//
int h = 480;//size.height;//viewport[3];//
NSInteger myDataLength = w * h * 4;
// allocate array and read pixels into it.
GLubyte *buffer = (GLubyte *) malloc(myDataLength);
glReadPixels (0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, Puffer);
GLubyte *buffer2 = (GLubyte *) malloc(myDataLength);
GLubyte temp = 0;
int index1 = 0;
int index2 = 0;
for(int y = 0; y < h - 1 - y; y++) { // 交换
index1 = y * 4 * w;
index2 = (h -1 - y) * w * 4;
for(int x = 0; x <w * 4; x++) {
temp = buffer[index1 + x];
buffer[index1 + x] = buffer[index2 + x];
buffer[index2 + x] = temp;
}
}
// make data provider with data.
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, myDataLength, NULL);
// prep the ingredients
int bitsPerComponent = 8;
int bitsPerPixel = 32;
int bytesPerRow = 4 * w;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
// make the cgimage
CGImageRef imageRef = CGImageCreate(w, h, bitsPerComponent, bitsPerPixel, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault, provider, NULL, NO, kCGRenderingIntentDefault);
// myImage is alway nil when debug
UIImage *myImage = [ UIImage imageWithCGImage:imageRef scale:s orientation:UIImageOrientationUp ];
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpaceRef);
Dank für yoour patients.When Einheit Projekt Release IOS, es auf XCode öffnen und meine Aufnahme hinzufügen sdk.And die Tatsache ist, dass ich kann den Teil des Codes von Unity5 oder cocos usw. nicht ändern I Ich möchte nur ein allgemeines IOS SDK für Spiele entwickeln, die von Engines wie unity3D oder Cocos etc. entwickelt werden. –
@JackMei Es ist wirklich schwer, deinen Kommentar zu verstehen. Wenn Sie eine Aufzeichnungs-API für Unity entwickeln, reicht meine Antwort aus, um Sie zu starten. Verwenden Sie die integrierte API von Unity. Wenn es auf diesem Gerät nicht verfügbar ist, verwenden Sie das Plugin aus Ihrer Frage. Wenn Sie möchten, dass jemand Ihre SDK in Unity verwenden kann, müssen Sie es zu einem Plugin machen, so dass sie alles von der Unity-Seite aus haben können. Sie erhalten einen schwarzen Bildschirm, weil Sie dies nicht von der Funktion 'OnPostRender() 'aus der Einheit aufrufen. All diese sind in meiner Antwort erwähnt. – Programmer
Wirklich danke für deine Antwort. Ich weiß, dass es funktioniert, aber ich muss ein allgemeines ios sdk für Einheit/cocos/sprikit Spiele entwickeln. Ich entwickle eine Aufnahme API auf XCode nicht für Einheit. Für Spieleentwickler meines Teams werde ich eine Schnittstelle für das IOS-Projekt von einer der drei Motoren zur Verfügung stellen.So können Sie verstehen, was ich meine? –