æè¿ãUnityçšã®ãã©ã°ã€ã³ã®äœæã«ééããŸããã 以åã¯çµéšããªãã£ãããããã®ç°å¢ã®ãŠãŒã¶ãŒã¯2ã3ãæããããŸããã ãã©ã°ã€ã³ã®éçºäžãå€ãã®è峿·±ãç¹ãèç©ãããŠãããã€ã³ã¿ãŒãããã«é¢ããæ
å ±ã¯ã»ãšãã©ãããŸããã éæè
ã®ããã«ããããã¹ãŠã®ãã€ã³ãããã詳现ã«èª¬æããããšæããŸããããããã°ãç§èªèº«ãäœåºŠãèžãã ã®ãšåãã¬ãŒãã«èœã¡ãªãããã«ãªããŸãã
ãã®èšäºã¯äžçŽãŠãŒã¶ãŒã«ã圹ç«ã€ã¯ãã§ãã OSXãWindowsãiOSãAndroidçšã®ãã©ã°ã€ã³éçºã®æçšãªããŒã«ãšãã¥ã¢ã³ã¹ãèæ
®ããŸãã
Unityã§é·æéãããªãåçãããšããã¹ãŠãããŸããããšã¯éããŸããã§ããã çµã¿èŸŒã¿ããŒã«ã¯éåžžã«éãããŠãããã¢ãã€ã«ãã©ãããã©ãŒã ã§ã¯ãã«ã¹ã¯ãªãŒã³ã¢ãŒãã§ã®ã¿ãããªãåçã§ããŸãããããã¯ã¢ã€ã¹ã²ãŒã ã²ãŒã ã§ã¯ãããŸããïŒ æåã¯ããµãŒãããŒãã£ã®ãã©ã°ã€ã³ã䜿çšããŸããã ãã ããå¿
èŠãªæ©èœãæ¬ ããŠãããããã°ãããããã®ä¿®æ£ã¯é·ãéåŸ
ããªããã°ãªããŸããã§ããïŒä¿®æ£ãããå ŽåïŒã ãã®ããã
ãã©ãã¯ãžã£ãã¯ãšw ... ã忢ãããã³æ©èœãåããUnityçšã®ãããªãã³ãŒããŒã®ç¬èªããŒãžã§ã³ãäœæããããšã«ããŸããã
ãã©ã°ã€ã³ãšã³ãŒãã®äœæã¯æçš¿ããŸãã-ç³ãèš³ãããŸãããã忥äžã®ç§å¯ã¯ãããŸãããäžè¬çãªååã«ã€ããŠèª¬æããŸãã ãããªãã³ãŒããŒãå®è£
ããããã«ããªãŒãã³ã§ã©ã€ã»ã³ã¹ããªãŒã®WebM圢åŒãåçã§ããvp8ããã³vp9ã³ãŒããã¯ã䜿çšããŸããã ãããªãã¬ãŒã ããã³ãŒãããåŸãYUVã«ã©ãŒã¢ãã«ã®ããŒã¿ãååŸããŸãã æ¬¡ã«ãåã³ã³ããŒãã³ããåå¥ã®ãã¯ã¹ãã£ã«æžã蟌ã¿ãŸãã å®éãããã§ãã©ã°ã€ã³ãçµäºããŸãã ããã«Unityèªäœã§ã¯ãã·ã§ãŒããŒã¯YUVãRGBã«ã©ãŒã¢ãã«ã«ãã³ãŒãããŸããããã¯æ¢ã«ãªããžã§ã¯ãã«é©çšãããŠããŸãã
ããªããå°ãã-ãªãã·ã§ãŒããŒã§ããïŒ ãã質åã§ãã æåã«ãããã»ããµã§ã«ã©ãŒã¢ãã«ãœãããŠã§ã¢ã倿ããããšããŸããã ãã¹ã¯ãããã®å Žåãããã¯èš±å®¹ç¯å²ã§ãããããã©ãŒãã³ã¹ã¯ããã»ã©äœäžããŸããããã¢ãã€ã«ãã©ãããã©ãŒã ã§ã¯ç¶æ³ã¯æ ¹æ¬çã«ç°ãªããŸãã ã¯ãŒã¯ã¹ããŒã¹ã®iPad 2ã§ã¯ããœãããŠã§ã¢ã³ã³ããŒã¿ãŒã¯8-12 FPSãæäŸããŸããã ã·ã§ãŒããŒã§ã®è²å€æã25-30 FPSãåãåã£ããšããããã¯æ¢ã«éåžžã®åçå¯èœãªã€ã³ãžã±ãŒã¿ãŒã§ãã
ãã©ã°ã€ã³éçºã®ãã¥ã¢ã³ã¹ã«ç§»ããŸãããã
ããŒãã€ã³ã
Unityçšã®ãã©ã°ã€ã³ãäœæããããã®ããã¥ã¡ã³ãã¯ããªãå°ãªãããã¹ãŠãäžè¬çãªçšèªã§èª¬æãããŠããŸãïŒiOSã®å Žåãç§ã¯çµéšããå€ãã®ãã¥ã¢ã³ã¹ãèŠã€ããŸããïŒã ããã¥ã¡ã³ããžã®
ãªã³ã¯ ã
åã°ããããš-çŸåšã®ã¹ã¿ãžãªãšãã©ãããã©ãŒã çšã«åéãããäŸããããŸãïŒiOSãé€ãïŒAppleã¯ããããéçºè
ã«äœåãªãéãæããªãã£ãã§ãããïŒã ãµã³ãã«èªäœã¯Unityã®æŽæ°ããšã«æŽæ°ãããŸãããè»èã«ããã©ã€ããããŸããAPIãã€ã³ã¿ãŒãã§ã€ã¹ã¯é »ç¹ã«å€æŽãããå®çŸ©ããã宿°ã¯ååã倿ŽãããŸãã ããšãã°ãæ°ããããããŒã䜿çšããå Žæããæ°ããæŽæ°ãååŸããŸããã æ¬¡ã«ãæ°ã¥ããŸã§ããã©ã°ã€ã³ãã¢ãã€ã«ãã©ãããã©ãŒã ã§åäœããªãçç±ãèŠã€ããŸããã
SUPPORT_OPENGLES
ãããããããã«èæ
®ããå¿
èŠããããã¹ãŠã®ãã©ãããã©ãŒã ã®å¯äžã®éèŠãªãã€ã³ãã¯ãã¬ã³ããªã³ã°ãµã€ã¯ã«ã§ãã Unityã¬ã³ããªã³ã°ã¯ãå¥ã®ã¹ã¬ããã§å®è¡ã§ããŸãã ããã¯ãã¡ã€ã³ã¹ã¬ããããã¯ã¹ãã£ã§æ©èœããªãããšãæå³ããŸãã ãã®ç¶æ³ã解決ããããã«ãã¹ã¯ãªããã«ã¯ã
é©åãªã¿ã€ãã³ã°ã§ã³ãŒã«ããã¯ããã«ãã
IssuePluginEvent颿°ããããŸãããã®é¢æ°ã§ã¯ãã¬ã³ããªã³ã°ã«å¿
èŠãªãªãœãŒã¹ã®æäœãå®è¡ããå¿
èŠããããŸãã ãã¯ã¹ãã£ã䜿çšããå ŽåïŒäœæãæŽæ°ãåé€ïŒããã¬ãŒã ã®æåŸã«ã³ãŒã«ããã¯ããã«ããã³ã«ãŒãã³ã䜿çšããããšããå§ãããŸãã
private IEnumerator MyCoroutine(){ while (true) { yield return new WaitForEndOfFrame(); GL.IssuePluginEvent(MyPlugin.GetRenderEventFunc(),magicnumber); } }
è峿·±ãããšã«ãã¡ã€ã³ã¹ã¬ããã§ãã¯ã¹ãã£ãæäœããããšãããšãã²ãŒã ã¯DX9 APIã§ã®ã¿ã¯ã©ãã·ã¥ããŸãã
OSX
ããããæãç°¡åã§æããã©ãã«ã®ãªããã©ãããã©ãŒã ã§ãã ãã©ã°ã€ã³ã¯æ¥éã«é²ãã§ãããåæ¹èšå
¥ãç°¡åã§ãã xCodeã§ãProcess-> Unityã«ã¢ã¿ããããŸãã äŒæ©ãå
¥ããããèœäžãããšãã«ã³ãŒã«ã¹ã¿ãã¯ãç£èŠãããã§ããŸãã
è峿·±ãç¹ã1ã€ã ããããŸããã Unityã¯æè¿ãããŒãžã§ã³5.3.2ã«æŽæ°ãããŸããã ãšãã£ã¿ãŒã§ã¯ãOpenGL 4ãã¡ã€ã³ã®ã°ã©ãã£ãã¯ã¹APIã«ãªããŸãããå€ãããŒãžã§ã³ã§ã¯OpenGL 2.1ã§ããããçŸåšã¯éæšå¥šã§ãã æŽæ°ãããããŒãžã§ã³ã§ã¯ããšãã£ã¿ãŒã¯åã«ãããªãåçããŸããã§ããã ã¯ã€ãã¯ãããã°ã¯ã
glTexSubImage2D颿°
ïŒGL_TEXTURE_2Dã0ã0ã0ãå¹
ãé«ããGL_ALPHAãGL_UNSIGNED_BYTEããããã¡ãŒïŒã
GL_INVALID_ENUMãšã©ãŒãè¿ãããšã
瀺ããŸããã OpenGLã®ããã¥ã¡ã³ããã倿ãããšã
GL_REDã¯
GL_ALPHAãã¯ã»ã«åœ¢åŒã眮ãæããããã«ãªããŸãããããã¯OpenGL 2.1ã§ã¯åäœããŸãã...æŸèæã§ããã¯ã¢ããããå¿
èŠããããŸããã
const GLubyte * strVersion = glGetString (GL_VERSION); m_oglVersion = (int)(strVersion[0] â '0'); if (m_oglVersion >= 3) pixelFormat = GL_RED; else pixelFormat = GL_ALPHA;
ãããŠæãäžæè°ãªããšã¯ãOpenGL 4ã§ã³ã³ãã€ã«ãããæçµãã«ãã§ã¯ããã¹ãŠã
GL_ALPHAãã©ã°ã§
æ£åžžã«æ©èœããããšã§ãã ç§ã¯éæ³ã®ã»ã¯ã·ã§ã³ã§ãã®ãã¥ã¢ã³ã¹ãæžãçããŸããããããã§ã人éçã«ãããããŸããã
Unity Editorã¯ãå€ãããŒãžã§ã³ã®OGLã§å®è¡ã§ããŸãã ãããè¡ãã«ã¯ãã³ã³ãœãŒã«ã«æ¬¡ã®ããã«èšè¿°ããŸãã
Applications/Unity/Unity.app/Contents/MacOS/Unity -force-opengl
䟿å©ãªãŠãŒãã£ãªãã£ã®äžã§ãã°ã©ãã£ãã¯ããŒã«ã®äžéšã§ããOpenGLãããã¡ã€ã©ãŒã«ã€ããŠèšåããããšæããŸãã ããŒã«ã¯ãApple Webãµã€ãã®ãéçºè
ãã»ã¯ã·ã§ã³ããããŠã³ããŒãã§ããŸãã ãããã¡ã€ã©ãŒã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®OpenGLã®ç¶æ
ãå®å
šã«ç£èŠã§ããŸãããšã©ãŒããã£ãããããã¯ã¹ãã£ã®å
容ïŒãµã€ãºãã¿ã€ãããã©ãŒãããïŒããããªã¡ã¢ãªã®ã·ã§ãŒããŒãšãããã¡ã確èªããããŸããŸãªã€ãã³ãã®ãã¬ãŒã¯ãã€ã³ããèšå®ã§ããŸãã ã°ã©ãã£ãã¯ãæäœããããã®éåžžã«äŸ¿å©ãªããŒã«ã ã¹ã¯ãªãŒã³ã·ã§ããïŒ

ãã®ãããUnity Editorã§1326ãã¯ã¹ãã£ã䜿çšãããŠããããšãããããŸããã
çª
ãã®OpenGLãã©ãããã©ãŒã ã§ã¯ããã©ã°ã€ã³ããŒãžã§ã³ãåé¡ãªãã³ã³ãã€ã«ãããŸããã ããããDirectX 9ã§ã¯ããã«è©³ãã説æããŸãã
1. DirectX 9ã«ã¯ãããã€ã¹ã®çŽå€±ïŒçŽå€±ããããã€ã¹ïŒãªã©ã®ãæ©èœãããããŸãã OpenGLããã³DirectXïŒããŒãžã§ã³10以éïŒã«ã¯ããã®æ¬ ç¹ããããŸããã å®éãã°ã©ãã£ãã¯ãªãœãŒã¹ïŒãã¯ã¹ãã£ãã·ã§ãŒããŒããããªã¡ã¢ãªã¡ãã·ã¥ãªã©ïŒã®å¶åŸ¡ã倱ãããŸãã ãã®ç¶æ³ãåŠçããå¿
èŠããããçºçããå Žåã¯ããã¹ãŠã®ãã¯ã¹ãã£ãå床ããŒããŸãã¯äœæããå¿
èŠããããŸãã ç§ã®èгå¯ã«ãããšãå€ãã®ãã©ã°ã€ã³ããŸãã«ãããè¡ããŸãã ç§ã¯å°ãã«ã³ãã³ã°ãããããšãã§ããŸãããUnityã¹ã¯ãªãããããã¯ã¹ãã£ãäœæãããã®ãã€ã³ã¿ãŒããã©ã°ã€ã³ã«æž¡ããŸãã ãããã£ãŠããªãœãŒã¹ç®¡çå
šäœãUnityã«ä»»ãã圌èªèº«ãããã€ã¹ã®æå€±ã®ç¶æ³ã«å¯ŸåŠããŠããŸãã
MyTexture = new Texture2D(w,h, TextureFormat.Alpha8, false); MyPlugin.SetTexture(myVideo, MyTexture.GetNativeTexturePtr());
2.ãã¹ãŠã®æºåãæŽã£ããšæããããšããäºæããªãåé¡ãçºèŠãããŸããã ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãäžéšã®ãããªã§ã®ã¿ãç»åããªãã»ããä»ãã§è¡šç€ºãããå ŽåããããŸããã

ç»åã®ã¿ã€ããã倿ãããšããšã©ãŒã¯ãããŒã¿ããã¯ã¹ãã£ã«ã³ããŒããã¢ã«ãŽãªãºã ããã¯ã¹ãã£åº§æšããŸãã¯ã©ãããã¯ã¹ãã£ã«é¢é£ä»ããããŠããå¯èœæ§ããããŸãã ããã¥ã¡ã³ãã¯ãDirectXãäœåãªãã€ãã远å ããããšã§æé©åã®ããã«ãã¯ã¹ãã£ãµã€ãºãåçåã§ããããšã瀺åããŸããã ãã®æ
å ±ã¯æ§é ã«ä¿åãããŸãïŒ
struct D3DLOCKED_RECT { INT Pitch; void *pBits; }
ããã -æŽåãèæ
®ããããã¯ã¹ãã£ã®1è¡ã®ãã€ãæ°ã
ã³ããŒã¢ã«ãŽãªãºã ããããã«ä¿®æ£ãããšãç®çã®çµæãåŸãããŸããïŒäœåãªãã¯ã»ã«ããŒãã§åããŸããïŒã
for (int i = 0; i < height; ++i) { memcpy(pbyDst, pbySrc, sizeof(unsigned char) * width); pixelsDst += locked_rect.Pitch; pixelsSrc += width; }
OpenGLã®ãããã°ã«ã¯ãgDEBuggerãŠãŒãã£ãªãã£ã圹ç«ã¡ãŸããOSXçšã®OpenGL Profilerãšæ©èœã䌌ãŠããŸãã

æ®å¿µãªãããDX9çšã®ãã®ãããªãŠãŒãã£ãªãã£ã¯èŠã€ãããŸããã§ããã ãã®ãããªããŒã«ã®ååšã¯ãããŒã¿ããã¯ã¹ãã£ã«ã³ããŒããéã«ãšã©ãŒãèŠã€ããã®ã«åœ¹ç«ã¡ãŸãã
IOS
ãµã³ãã«ã«ã¯ããã®ãã©ãããã©ãŒã ã®ãµã³ãã«ãããžã§ã¯ãã¯ãããŸããã§ããã ããã¥ã¡ã³ãã«ã¯æçšãªæ
å ±ã¯ã»ãšãã©ãªããäž»ã«ãã©ã°ã€ã³ããã®æ©èœãžã®ã¢ã¯ã»ã¹ã«ã€ããŠã®ã¿ã§ãã
éèŠãªåŽé¢ã«ã€ããŠèª¬æããŸãã
1. xCodeã§ãStaticLibã¿ã€ãã®éåžžã®iOSãããžã§ã¯ããäœæããŸãã OpenGLãã¬ãŒã ã¯ãŒã¯ãæ¥ç¶ããŸã-ãã©ã°ã€ã³ãäœæã§ããŸãã
2.æçµçãªãã©ã°ã€ã³ãã¡ã€ã«ã®ååã¯éèŠã§ã¯ãããŸããã Unityã§ã¯ãiOSãã©ã«ããŒã«ãããã¹ãŠã®ãã©ã°ã€ã³ãã颿°ãã€ã³ããŒããããŸãã
[DllImport("__Internal")]
3.éèŠãªãã€ã³ã-å¥ã®ãã©ã°ã€ã³ã«åãååã®é¢æ°ãããå Žåããã«ãããã«ãã§ããŸããã ãªã³ã«Unityã¯äºéå®è£
ãèªããŸãã ã¢ããã€ã¹-誰ããã®ãããªååãèããªãããã«ååãä»ããŠãã ããã
4.ãã©ã°ã€ã³ã®ããŒãæã«åŒã³åºããã
UnityPluginLoadïŒIUnityInterfaces * unityInterfacesïŒã¯åŒã³åºãããŸããïŒ ãã©ã°ã€ã³ããã€éå§ãããã確èªããçŸåšã®ã¬ã³ããŒããã€ã¹ã«é¢ããæ
å ±ãååŸããã«ã¯ã
UnityAppControllerããç¶æ¿ããç¬èªã®ã³ã³ãããŒã©ãŒãäœæãããã©ã°ã€ã³ãš
RenderEventãéå§ãã颿°åŒã³åºããç»é²ããå¿
èŠããããŸãã äœæããããã¡ã€ã«ã¯ãiOSçšã®ãã©ã°ã€ã³ããããã©ã«ããŒã«é
眮ããå¿
èŠããããŸãã 颿°ãç»é²ããããã®ã³ã³ãããŒã©ãŒã®å®è£
äŸïŒ
#import <UIKit/UIKit.h> #import "UnityAppController.h" extern "C" void MyPluginSetGraphicsDevice(void* device, int deviceType, int eventType); extern "C" void MyPluginRenderEvent(int marker); @interface MyPluginController : UnityAppController { } - (void)shouldAttachRenderDelegate; @end @implementation MyPluginController - (void)shouldAttachRenderDelegate; { UnityRegisterRenderingPlugin(&MyPluginSetGraphicsDevice, &MyPluginRenderEvent); } @end IMPL_APP_CONTROLLER_SUBCLASS(MyPluginController)
5.ãã©ã°ã€ã³ãè€æ°ã®ç°ãªãã¢ãŒããã¯ãã£ã䜿çšããŠããå Žåãããããåäžã®éçã©ã€ãã©ãªã«çµåããŠå©äŸ¿æ§ãé«ããããšãã§ããŸãã
lipo -arch armv7 build/libPlugin_armv7.a\
-arch i386 build/libPlugin _i386.a\
-create -output build/libPlugin .a
6.ãã¹ãäžã«ãè² ã®ãã¯ã¹ãã£åº§æšãé ç¹ã·ã§ãŒããŒãããã¯ã»ã«ã·ã§ãŒããŒã«è»¢éãããªãããšãããããŸãããåžžã«ãŒããçºçããŸãã ããã©ã«ãã§ã¯ããã¯ã¹ãã£ã¯ã¢ãã¬ãã·ã³ã°ã¢ãŒã
CLAMP_TO_EDGEã§äœæãããŸãã ãã®å ŽåãOpenGL ESã¯ãã¹ãŠã[0..1]ã®ç¯å²ã«ã«ããããŸãã ãã¹ã¯ããããã©ãããã©ãŒã ã§ã¯ãããã¯èгå¯ãããŸããã
7.é倧ãªãã°ãèŠã€ãããŸããã ã¹ã¯ãªãããããã°ãæå¹ã«ããŠiOSçšã®ãããžã§ã¯ãããã«ããããšãã²ãŒã ãã¯ã©ãã·ã¥ãããšxCodeãã¯ã©ãã·ã¥ããŸãã ãã®çµæããã°ãã³ãŒã«ã¹ã¿ãã¯ããããŸãã...
iOSãã©ãããã©ãŒã çšã®ãã©ã°ã€ã³ã®ãããã°ã¯æ¥œãã¿ã§ããxCodeã«ã¯ãã¯ã©ãã·ã¥ãããšãã«åžžã«ã³ãŒã«ã¹ã¿ãã¯ããããŸãã ã³ã³ãœãŒã«ã§ã¯ãã¹ã¯ãªãããšãã©ã°ã€ã³ã®äž¡æ¹ã®ãã°ãèªã¿åãããšãã§ããŸãããããžã§ã¯ãã«* .CPPãã©ã°ã€ã³ãã¡ã€ã«ã远å ãããšããã¬ãŒã¯ãå
¥ããŠãå®å
šãªlldbãããã¬ãŒæ©èœã䜿çšã§ããŸãã ããããã¹ã¯ãªããã䜿çšãããšããã¹ãŠãæªåããããããã°ãèšé²ããŠãã ããã
Android
Androidçšã®ãã«ãã«ã¯ãã»ãšãã©ã®ããŒã«ãå¿
èŠã§ãã
-C ++ã³ãŒããç·šéããããã®éåžžã®IDEã ç§ã¯xCodeã䜿çšããŸããã ãšã«ãããAndroidã®ãããŒã§çµã¿ç«ãŠãæ¹ãç°¡åã§ãã
-Cã³ãŒããéçã©ã€ãã©ãªã«ãã«ãããããã®NDKã
-Javaãªã©ã®ãã¹ãŠã®ããŒãºãåããAndroid Studioãã¹ã¿ãžãªã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœãèµ·ãã£ãŠããããç°¡åã«èšé²ããããã«å¿
èŠã§ãã
è峿·±ãç¹ãèŠãŠã¿ãŸãããã
1. Androidã§ã®ãã©ã°ã€ã³ã®ãããã°ã®ç¶æ³ã¯ããªãæ²ããã®ã§ãããã«ãã°ããã¡ã€ã«ã«æžã蟌ãããšãæ€èšããããšããå§ãããŸãã ãã¡ãããæ··ä¹±ããŠãªã¢ãŒããããã°ã®èšå®ã詊ã¿ãããšãã§ããŸãããããã«æéã¯ãªããAndroid Studioãä»ããŠãã°ãåç
§ããããç°¡åãªæ¹æ³ãéžæããå¿
èŠããããŸããã ãã®ãããandroid / log.hã«ã¯__android_log_vprint颿°ããããprintfãšåæ§ã«æ©èœããŸãã 䟿å®äžãã¯ãã¹ãã©ãããã©ãŒã ãã¥ãŒã§ã©ããããŸãã
static void DebugLog (const char* fmt, ...) { va_list argList; va_start(argList, fmt); #if UNITY_ANDROID __android_log_vprint(ANDROID_LOG_INFO, "MyPluginDebugLog", fmt, argList); #elif printf (fmt, argList); #endif va_end(argList); }
assertããã€ãã¹ããªãããšããå§ãããŸãã ããããããªã¬ãŒãããå ŽåãAndroid Studioã§ã¯å®å
šãªåŒã³åºãã¹ã¿ãã¯ã衚瀺ã§ããŸãã
2.ãã®ãã©ãããã©ãŒã ã§ã¯ããã©ã°ã€ã³ã®åœåã®è©³çްã¯libMyPluginName.soã§ãã ããšãã°ãlibãã¬ãã£ãã¯ã¹ãå¿
èŠã§ãïŒè©³çްã«ã€ããŠã¯ãUnityã®ããã¥ã¡ã³ããåç
§ããŠãã ããïŒã
3. Androidã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¹ãŠã®ãªãœãŒã¹ã1ã€ã®ãã³ãã«ïŒjarãã¡ã€ã«ãŸãã¯zipãã¡ã€ã«ïŒã«ä¿åãããŸãã ä»ã®ãã©ãããã©ãŒã ã®ããã«ãã¹ããªãŒã ãéããŠããŒã¿ã®èªã¿åããéå§ããããšã¯ã§ããŸããã ãããªãžã®ãã¹ã«å ããŠãAndroid apkãžã®ãã¹ãå«ãApplication.dataPathãå¿
èŠã§ãããã®æ¹æ³ã§ã®ã¿ãç®çã®ã¢ã»ãããååŸããŠéãããšãã§ããŸãã ããããããã¡ã€ã«ã®é·ããšãã³ãã«ã®éå§ã«å¯Ÿãããªãã»ãããååŸããŸãã
unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity") assetMng = activity.Call<AndroidJavaObject>("getAssets") assetDesc = assetMng.Call<AndroidJavaObject>("openFd", myVideoPath); offset = assetFileDescriptor.Call<long>("getStartOffset"); length = assetFileDescriptor.Call<long>("getLength");
ãã¹
Application.dataPathã«æ²¿ã£
ãŠæšæºããŒã«ïŒfopenãªã©ïŒã§ãã¡ã€ã«ã¹ããªãŒã ãéãããªãã»ãã
ãªãã»ããã§ãã¡ã€ã«ã®èªã¿åããéå§ããŸã-ããããããªã§ãã ãããªãã¡ã€ã«ããã€çµäºãããã以äžã®èªã¿åãã忢ããããç¥ãã«ã¯ãé·ããå¿
èŠã§ãã
4.ãã°ãèŠã€ããŸããã
s_DeviceType = s_Graphics->GetRenderer();
s_DeviceTypeã«ã¯åžžã«
kUnityGfxRendererNullãå«ãŸã
ãŸã ã ãã©ãŒã©ã ãã倿ãããšãããã¯Unityã®ãã°ã§ãã Androidã¯å®çŸ©ã§ã³ãŒãã®äžéšãã©ããããããã©ã«ãã§å®çŸ©ãããŠããŸãïŒ
s_DeviceType = kUnityGfxRendererOpenGLES
Androidçšã«éçºãããšãã¯ãã³ã³ãœãŒã«ã§ã®å®æçãªæåãšå®æçãªåæ§ç¯ã®æºåãå¿
èŠã§ãã æåã«Android.mkããã³Application.mkãæ£ããæ§æããå Žåãã¢ã»ã³ããªã«é¢ããåé¡ã¯çºçããŸããã
ãŸããã®ããã«ãããããã¹ãŠã§ãã ç§ã¯æåããæããã§ã¯ãªãã£ããã¹ãŠã®éèŠãªç¹ã«çŠç¹ãåœãŠãããšããŸããã ãã®ç¥èãããã°ãéåžžã®ãã©ã°ã€ã³ã¢ãŒããã¯ãã£ãäºåã«éçºã§ããŸããã³ãŒããäœåºŠãæžãæããå¿
èŠã¯ãããŸããã
çµè«ãšããŠ
äºåçãªèšç®ã«ãããšããã®äœæ¥ã«ã¯2ã3é±éããããŸãããã2ãæããããŸããã ã»ãšãã©ã®å Žåãäžèšã®ãã€ã³ãã®æç¢ºåã«è²»ããå¿
èŠããããŸããã æãéå±ã§é·ãã¹ããŒãžã¯Androidã§ãã éçã©ã€ãã©ãªãšãããžã§ã¯ããåæ§ç¯ããããã»ã¹ã«ã¯çŽ15åããããæ°ãããã°ã远å ããŠãããã°ãè¡ãããŸããã ã³ãŒããŒãè²·ãã ãããŠãææ
¢ããŠãã ããã Unityã®é »ç¹ãªã¯ã©ãã·ã¥ãšããªãŒãºãå¿ããªãã§ãã ããã
ãã®è³æãæçšã§ã貎éãªæéã®ç¯çŽã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã æ¹å€ã質åã¯å€§æè¿ã§ãïŒ
ãæž
èŽããããšãããããŸããã