
ã²ãŒã æ¥çã¯ç«ã¡æ¢ãŸã£ãŠããããæ¥ã æ¥éã«çºå±ããŠããŸããæ¥çã®æé·ã«äŒŽããéçºã®è€éããå¢ããŠããŸããã³ãŒããšãã°ãå¢ããŠããŸãããããã£ãŠãææ°ã®ã²ãŒã ãããžã§ã¯ãã§ã¯ãã³ãŒãã®å質ã«ç¹å¥ãªæ³šæãæãå¿ èŠããããŸãã仿¥ã¯ãã³ãŒããæ¹åããæ¹æ³ã®1ã€ã§ããéçåæãšãPVS-Studioãå€§èŠæš¡ãªïŒã ãã§ãªãïŒã²ãŒã ãããžã§ã¯ãã®éçºã§å®éã«ã©ã®ããã«åœ¹ç«ã€ãã«ã€ããŠèª¬æããŸãã
ãç§ãè¿å¹Žããã°ã©ããŒãšããŠè¡ã£ãæãéèŠãªããšã¯ãéçãªã³ãŒãåæãç©æ¥µçã«è¿œæ±ããããšã§ããããã§é²ãã äœçŸãã®æ·±å»ãªãã°ãããããã«äŸ¡å€ãããã®ã¯ããœãããŠã§ã¢ã®ä¿¡é Œæ§ãšã³ãŒãã®èŠæ¹ã«é¢ããèãæ¹ã®å€åã§ããå質ã " -John Carmack
ç§ãã¡ã¯é·å¹Žäž»èŠãªã²ãŒã éçºè ãšååããŠããŸãããããã®éãã²ãŒã æ¥çã«ãšã£ãŠå€ãã®è峿·±ãæçšãªããšãæãéããŠããŸãããã²ãŒã æ¥çã®ã¯ã©ã€ã¢ã³ãã®ãªã¹ããèãããšãããã¯é©ãã¹ãããšã§ã¯ãããŸãããã¯ã©ã€ã¢ã³ãã«ç©æ¥µçãªãµããŒããæäŸããŸããã¯ã©ã€ã¢ã³ããPVS-Studioãç¬èªã®éçºããã»ã¹ã«çµ±åããã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºããããšã©ãŒãä¿®æ£ããæ³šæããç¹å¥ãªæ©èœãäœæããã®ãæ¯æŽããŸãã
ããã«ãGameDevæ¹åã§ã¢ãã©ã€ã¶ãŒã®å€ãã®ç¬ç«ããéçºãè¡ã£ãŠãããããŸããŸãªãããªã²ãŒã ã§èŠã€ãã£ãè峿·±ããã°ã«ã€ããŠäººã ã«äŒããããšã§PVS-Studioãæ®åãããŠããŸãã
åœç¶ãè峿·±ã話ããªãããã§ã¯ãããŸããããã®èšäºã§ã¯ããã®ãããªããã€ãã®è©±ã«ã€ããŠèª¬æããŸãã
PVS-StudioãšUnity

ç§ãã¡ã補åã宣äŒããæ¹æ³ã®1ã€ã¯ããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®ã¬ãã¥ãŒã«é¢ããèšäºãæžãããšã§ãã誰ãããããã®èšäºããæ©æµãåããŸããèªè ã¯ããªãã¿ã®ãããžã§ã¯ãã®è峿·±ããšã©ãŒãèŠãŠãèªåèªèº«ã§æ°ããããšãåŠã¶ããšãã§ããŸããPVS-Studioã®äœæ¥ãå®éã®ã³ãŒãã§ç€ºãæ©äŒãããããããžã§ã¯ãéçºè ã¯ãšã©ãŒã«ã€ããŠåŠã³ãäºåã«ä¿®æ£ã§ããŸãã
Unityãšã®æåã®çå£ãªç¥ãåãã¯ããã®ã²ãŒã ãšã³ãžã³ã®éçºè ãããã€ãã®ã³ã³ããŒãã³ããã©ã€ãã©ãªããã¢ã®ãœãŒã¹ã³ãŒããå ¬åŒãªããžããªã«ãªãªãŒã¹ãã2016幎ã«å§ãŸããŸãããåœç¶ããã®ãããªããããããã±ãŒã¹ãééããããšã¯ã§ãããã¬ã€ã¢ãŠããããã³ãŒãã®ãã§ãã¯ã«é¢ããèšäºãæžãããã£ãã®ã§ãã
ãã®åŸãUnity3Dã³ãŒãïŒåœæã¯ãšã³ãžã³ããã®ããã«åŒã°ããŠããŸããïŒã¯éåžžã«é«å質ã§ããããšãããããŸããããèšäºãæžãéã«ããªãã®é倧ãªãšã©ãŒãèŠã€ããããšãã§ããŸããã
2幎åŸãå¥ã®ã€ãã³ããçºçããŸãããä»åã¯ãUnityéçºè ããšã³ãžã³èªäœã®ã³ãŒããšãšãã£ã¿ãŒããªãªãŒã¹ããŠã¢ã¯ã»ã¹ãéããŸããããããŠãååãšåãããã«ããšã³ãžã³ã®ãœãŒã¹ã³ãŒããéãéããŠç¢ºèªããããšãã§ããŸããã§ããããããŠãæ£åœãªçç±ããããŸããè峿·±ãééããããã€ãèŠã€ãããŸããã
ããããèšäºãæžãããšã¯ãã¹ãŠããã»ã©é ãã§ããç§ãã¡ã¯åŒãç¶ãPVS-Studioã«åãçµãã§ãããGameDevã¯ç§ãã¡ã«ãšã£ãŠéçºã«ãšã£ãŠæãéèŠãªåéã®1ã€ã§ãããããã£ãŠãUnityã²ãŒã éçºè ã«ã¯ããããžã§ã¯ãã®å¯èœãªéãæé«ã®åæãååŸããŠããããããšèããŠããŸãã
Unityãããžã§ã¯ãã®åæã®å質ãåäžãããããã®ã¹ãããã®1ã€ã¯ãUnity ScriptingAPIã§å®çŸ©ãããã¡ãœããã®æ³šéãäœæããããšã§ããã
ã¡ãœããã¢ãããŒã·ã§ã³ã¯ãPVS-Studioã§äœ¿çšãããç¹å¥ãªã¡ã«ããºã ã§ããããã«ãããç¹å®ã®æ¹æ³ã«ã€ããŠå¿ èŠãªãã¹ãŠã®æ å ±ãã¢ãã©ã€ã¶ãŒã«æäŸã§ããŸããããã¯ãã¢ãã©ã€ã¶ãŒã®éçºè èªèº«ïŒã€ãŸããç§ãã¡ïŒã«ãã£ãŠç¹å¥ãªã³ãŒãã§èšè¿°ãããŠããŸãã
ãã®æ å ±ã¯ããŸã£ããç°ãªãçš®é¡ã®ãã®ã§ããå¯èœæ§ããããŸããããšãã°ãã¡ãœãããæž¡ããããã©ã¡ãŒã¿ã«ã©ã®ããã«åœ±é¿ããããã¡ã¢ãªãå²ãåœãŠãããšãã§ãããã©ãããåŠçããå¿ èŠã®ããå€ãè¿ããã©ãããªã©ã§ãããããã£ãŠã泚éã«ãããã¢ãã©ã€ã¶ãŒã¯ã¡ãœããã®ããžãã¯ãããããçè§£ã§ããããã«ãªããããã«ãã£ãŠãæ°ããããè€éãªãšã©ãŒãæ€åºã§ããããã«ãªããŸãã
ãã§ã«å€çš®å€æ§ãªæ³šéãäœæããŠããïŒããšãã°ãSystemåååã®ã¡ãœããçšïŒãUnity ScriptingAPIã®ã¡ãœããæ³šéã§ããããè£è¶³ã§ããŸããã
è©äŸ¡ãšãšãã«æ³šéã®ãªã¹ãã«è¿œå ãå§ããŸãããæ¹æ³ã¯ããã€ãããŸããïŒæåã«æ³šéãä»ããå¿ èŠãããã®ã¯ã©ãã§ããïŒå šéšã§ããããã®æ¹æ³ããããç§ãã¡ã¯æãé »ç¹ã«äœ¿çšãããæ¹æ³ã«æ³šéãä»ããããšããå§ããããšã«ããŸããã
人æ°ã®ããã¡ãœããã®æ€çŽ¢ã¯æ¬¡ã®ããã«å®è¡ãããŸãããæåã«ãUnityã®æ©èœã䜿çšãããããžã§ã¯ãã®ããŒã«ãGitHubããåéããæ¬¡ã«ãïŒRoslynã«åºã¥ãïŒèªäœã®ãŠãŒãã£ãªãã£ã䜿çšããŠãé¢å¿ã®ããã¡ãœããã®åŒã³åºããã«ãŠã³ãããŸããããã®çµæãæãé »ç¹ã«äœ¿çšãããã¡ãœããã®ã¯ã©ã¹ã®ãªã¹ããåŸãããŸããã
- UnityEngine.Vector3
- UnityEngine.Mathf
- UnityEngine.Debug
- UnityEngine.GameObject
- UnityEngine.Material
- UnityEditor.EditorGUILayout
- UnityEngine.Component
- UnityEngine.Object
- UnityEngine.GUILayout
- UnityEngine.Quaternion
- ..ã
次ã«ããããã®ã¯ã©ã¹ã®ã¡ãœããã«æ³šéãä»ããå¿ èŠããããŸãããã¹ããããžã§ã¯ããäœæããããã¥ã¡ã³ããæãäžããŠããããã®ã¡ãœããã«ã€ããŠå¯èœãªéãå€ãã®æ å ±ãååŸããŸãããããšãã°ãããã°ã©ã ãã©ã®ããã«åäœãããã確èªããããã«ãããŸããŸãªåŒæ°ãšããŠnullãæž¡ããŠã¿ãŸããã
ãã®ãããªãã§ãã¯äžã«ãææžåãããŠããªãè峿·±ãæ å ±ã宿çã«çºèŠãããŸãããããã«ããšã³ãžã³ã«ããã€ãã®è峿·±ããã°ãèŠã€ãããŸããããããã£ãŠã次ã®ãããªã³ãŒããå®è¡ããå ŽåïŒ
MeshRenderer renderer = cube.GetComponent<MeshRenderer>();
Material m = renderer.material;
List<int> outNames = null;
m.GetTexturePropertyNameIDs(outNames);
Unityãšãã£ã¿ãŒèªäœãçŽæ¥ã¯ã©ãã·ã¥ããŸãïŒå°ãªããšãããŒãžã§ã³2019.3.10f1ã§ã¯ïŒããã¡ããã誰ãããã®ãããªã³ãŒããæžãããšã¯ããããã«ãããŸãããããã®ãããªã¹ã¯ãªãããå®è¡ããããšã«ãã£ãŠUnityãšãã£ã¿ãŒããããã¯ããŠã³ãã§ãããšããäºå®èªäœãè峿·±ããã®ã§ãã
ãããã£ãŠã泚éãæžã蟌ãŸããŸããåæãéå§ããåŸãããã«æ°ããããªã¬ãŒãçºèŠããŸãããããšãã°ãã¢ãã©ã€ã¶ã¯GetComponentã¡ãœãããžã®å¥åŠãªåŒã³åºããæ€åºããŸããã
void OnEnable()
{
GameObject uiManager = GameObject.Find("UIRoot");
if (uiManager)
{
uiManager.GetComponent<UIManager>();
}
}
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3010颿°ãGetComponentãã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã --ADDITIONAL IN CURRENT UIEditorWindow.cs 22 GetComponent
ã¡ãœããã¯ããã®ååã§ãã£ãŠããç¹å®ã®å€ãè¿ãããããšãæå³ããŸãããã®å€ãã®ãã®ãäœããã®æ¹æ³ã§äœ¿çšããå¿ èŠããããšæ³å®ããã®ã¯è«ççã§ããããã§ïŒæ°ããæ³šéã®ãããã§ïŒãã¢ãã©ã€ã¶ãŒã¯ããã®ã¡ãœãããžã®ãã®ãããªãå€ç«ãããåŒã³åºããè«çãšã©ãŒã瀺ããŠããå¯èœæ§ãããããšãèªèããããã«ã€ããŠèŠåããŸãã
ããã¯ãæ°ããæ³šéã远å ããåŸã«äžé£ã®ãã¹ããããžã§ã¯ãã«è¡šç€ºãããå¯äžã®ããªã¬ãŒã§ã¯ãããŸããããã®èšäºã倧ãããªããããªãããã«ãæ®ãã®éšåã¯èª¬æããŸãããäž»ãªããšã¯ãPVS-Studioã䜿çšããUnityãããžã§ã¯ãã®éçºã«ããããã°ãªãã§ã¯ããã«å®å šã§ã¯ãªãŒã³ãªã³ãŒããèšè¿°ã§ããããã«ãªã£ãããšã§ãã
Unityã¡ãœããã®æ³šéã䜿çšããäœæ¥ã«ã€ããŠè©³ããç¥ãããå Žåã¯ãèšäºãPVS-Studioã¢ãã©ã€ã¶ãŒãUnityãããžã§ã¯ãã§ããã«å€ãã®ãšã©ãŒãæ€åºãå§ããæ¹æ³ããåç §ããŠãã ããã
ã¢ã³ãªã¢ã«ãšã³ãžã³4

2014幎ã«ãUnreal Engine 4ã®éçºè ããšã³ãžã³ã®ãœãŒã¹ã³ãŒããå ¬éãããšããç§ãã¡ã¯ãã®ãããžã§ã¯ããåé¿ã§ãããããã«é¢ããèšäºãæžããŸããããšã³ãžã³éçºè ã¯ãã®èšäºãæ°ã«å ¥ã£ãŠãèŠã€ãããã°ãä¿®æ£ããŸãããããããããã§ã¯ååã§ã¯ãªãã£ããããã¢ãã©ã€ã¶ãŒã®ã©ã€ã»ã³ã¹ãEpicGamesã«è²©å£²ããããšã«ããŸããã
Epic Gamesã¯ãPVS-Studioã䜿çšããŠãšã³ãžã³ãæ¹åããããšã«é¢å¿ãæã£ãŠãããããåæã«åæããŸãããã¢ãã©ã€ã¶ãŒãèŠåãçºè¡ããªãããã«ãUnreal Engineã³ãŒããç¬èªã«ä¿®æ£ããEpicGamesã®æ åœè ãã©ã€ã»ã³ã¹ãè³Œå ¥ããŸããç§ãã¡ãè¡ã£ãä»äºã«å¯ŸããŠç§ãã¡ã«å ±é ¬ãäžããŠãã ããã
ãªããã¹ãŠã®èŠåãä¿®æ£ããå¿ èŠããã£ãã®ã§ããïŒéèŠãªã®ã¯ãéçåæã®æå€§ã®ã¡ãªããã¯ããšã©ãŒãçºçãããããã«ä¿®æ£ããããšã§åŸããããšããããšã§ãããŸãããããžã§ã¯ããåããŠãã§ãã¯ãããšãã¯ãååãšããŠãæ°çŸïŒå Žåã«ãã£ãŠã¯æ°åïŒã®èŠåã衚瀺ãããŸããããããã¹ãŠã®ã¢ãã©ã€ã¶ãŒèŠåã®äžã§ãæ°ããäœæãããã³ãŒãã«å¯ŸããŠçºè¡ãããèŠåã¯ç°¡åã«å€±ãããå¯èœæ§ããããŸãã
äžèŠãããšããã®åé¡ã¯éåžžã«ç°¡åã«è§£æ±ºã§ããŸãã座ã£ãŠã¬ããŒãå šäœãå®å šã«ãã€ãã¹ãããšã©ãŒãåŸã ã«ä¿®æ£ããã ãã§ãããã ãããã®æ¹æ³ã¯ããçŽæçã§ãããæéããããå ŽåããããŸããæå¶ãã¡ã€ã«ã䜿çšããæ¹æ³ã¯ãã¯ããã«äŸ¿å©ã§é«éã§ãã
ãã¡ã€ã«ã®æå¶ã¯PVS-Studioã®ç¹å¥ãªæ©èœã§ããããã«ãããã¢ãã©ã€ã¶ã®ããªã¬ãŒãç¹å¥ãªãã¡ã€ã«ã§ãé衚瀺ãã«ããããšãã§ããŸãããã®å Žåãé衚瀺ã®èŠåã¯åŸç¶ã®ãã°ã«è¡šç€ºãããŸãããåå¥ã«è¡šç€ºã§ããŸãã
æåã®ãã§ãã¯åŸã«å€æ°ã®ããªã¬ãŒãåãåã£ãã®ã§ãæ€åºããããã¹ãŠã®ããªã¬ãŒãæ°åã¯ãªãã¯ããã ãã§æå¶ãã¡ã€ã«ã«è¿œå ã§ããŸããæ¬¡ã«ã¢ãã©ã€ã¶ãŒã§ãã§ãã¯ãããšãããªã¬ãŒã1ã€ããªãã¯ãªãŒã³ãªãã°ãåãåããŸãã
å€ãèŠåã¯ãã°ã«èšé²ãããªããªã£ããããæ°ããèŠåã衚瀺ããããããã«ç°¡åã«èŠã€ããããšãã§ããŸããã³ãŒããäœæããŸãã->ã¢ãã©ã€ã¶ãŒã§ç¢ºèªããŸãã->æ°ããèŠåã衚瀺ãããŸãã->ãšã©ãŒãä¿®æ£ããŸãããããããã¢ãã©ã€ã¶ãŒãæå€§éã«æŽ»çšããæ¹æ³ã§ãã
åæã«ãsuppressãã¡ã€ã«ã«ããã¢ã©ãŒã ãå¿ããªãã§ãã ããã以åãšåãã§ãããé倧ãªãšã©ãŒãè匱æ§ã«é¢ããèŠåãå«ãŸããŠããå¯èœæ§ããããŸãããããã£ãŠã宿çã«ãããã®èŠåã«æ»ããèŠåã®æ°ãæžããããšã¯äŸ¡å€ããããŸãã
ãã¡ããããã®ã·ããªãªã¯äŸ¿å©ã§ãããEpic Gamesã®éçºè ã¯ãã³ãŒããããã«ä¿®æ£ããããšãæãã§ããããããç§ãã¡ã«åŒãæž¡ããŸããã
ãããŠãç§ãã¡ã¯ä»äºã«åãæãããŸããããããžã§ã¯ãã³ãŒãã確èªãããšããã1821幎ã«Level_1ãšLevel_2ã®1ã€ã®ã¬ãã«ã®èŠåãèŠã€ãããŸããããã®ãããªå€§éã®èŠåãè§£æããã«ã¯ãæ·±å»ãªäœæ¥ãå¿ èŠã§ãããã®ããã»ã¹å šäœã容æã«ããããã«ãCIãµãŒããŒã§ç¶ç¶çãªã³ãŒãåæãèšå®ããŸãã
æ¯æ©ãUnreal Engine 4ã®çŸåšã®ããŒãžã§ã³ããµãŒããŒäžã§ã³ã³ãã€ã«ããããã«ãã®çŽåŸã«åæãèªåçã«éå§ãããŸããããããã£ãŠãç§ãã¡ã®ã¹ã¿ãããååäžã«ä»äºã«æ¥ããšãã圌ãã¯åžžã«æ°é®®ãªã¢ãã©ã€ã¶ãŒã¬ããŒããæå ã«æã£ãŠããŠãèŠåã®ä¿®æ£ã®é²æç¶æ³ã远跡ããããšãã§ããŸãããããã«ããã®ãããªã·ã¹ãã ã§ã¯ããµãŒããŒäžã§æåã§å®è¡ããããšã«ããããã€ã§ããã«ãã®å®å®æ§ã確èªã§ããŸããã
ããã»ã¹å šäœã§17å¶æ¥æ¥ããããŸãããèŠåãä¿®æ£ããã¹ã±ãžã¥ãŒã«ã¯æ¬¡ã®ãšããã§ãã

å®éããã®ãã£ãŒãã¯ç§ãã¡ã®ä»äºãå®å šã«ã¯åæ ããŠããŸããããã¹ãŠã®èŠåãä¿®æ£ããåŸãææ°ã®ãã«ãªã¯ãšã¹ããåãå ¥ãããŸã§ããã«2æ¥éåŸ ã¡ãŸããããã®éãã£ãšãUnreal Engineã®ææ°ããŒãžã§ã³ãèªåçã«ãã§ãã¯ãç¶ãããã®çµæãæ°ããã³ãŒããè£å ããç¶ããŸããããããŠãããªãã¯ã©ãæããŸããïŒãã®2æ¥éã§ãPVS-Studioã¯ã³ãŒãã«ããã«4ã€ã®ãšã©ãŒãæ€åºããŸããããããã®1ã€ã¯ç¹ã«æ·±å»ã§ãããæªå®çŸ©ã®åäœã«ã€ãªããå¯èœæ§ããããŸãã
ãã¡ããããããã®ãšã©ãŒãä¿®æ£ããŸãããUnreal Engineã®éçºè ã¯ãããš1ã€ã ãè¡ãå¿ èŠããããŸããããã¯ãç§ãã¡ãšåãæ¹æ³ã§èªååæãæ§æããããšã§ãããã®ç¬éããã圌ãã¯æ°ããæžãããã³ãŒãã«å¯ŸããŠçºè¡ãããèŠåãæ¯æ¥èŠå§ããŸãããããã«ãããéçºã®åææ®µéã§ãåºçŸããç¬éã§ãã³ãŒãã®ãã°ãä¿®æ£ããããšãã§ããŸããã
Unreal Engineã³ãŒãã®éçºæ¹æ³ã«ã€ããŠè©³ããã¯ãUnrealEngineã®å ¬åŒããã°ãŸãã¯Webãµã€ããã芧ãã ããã
ããŸããŸãªã²ãŒã ã®åæ

ããŸããŸãªãªãŒãã³ãœãŒã¹ãããžã§ã¯ãããã§ãã¯ããŠããããã«ã€ããŠã®èšäºãæžããŠããããšãè¿°ã¹ãŸãããïŒã§ããããã²ãŒã ãããžã§ã¯ãã«é¢ããåæ§ã®èšäºããããããããŸãïŒVVVVVVãSpace EngineersãCommandïŒConquerãosuãªã©ã®ã²ãŒã ã«ã€ããŠæžããŸããããããŠïŒéåžžã«å€ãèšäºïŒDoom3ããŸãããããªã²ãŒã æ¥çã§æãè峿·±ããã°ããã10ããŸãšããŸããã
ãŸããããããã»ãšãã©ã®æåãªãªãŒãã³ãœãŒã¹ãšã³ãžã³ããã§ãã¯ããŸããã UnityãšUnrealEngine 4ã«å ããŠãGodotãBulletãAmazon LumberyardãCry EngineVãªã©ã®ãããžã§ã¯ããç§ãã¡ã®ç®ã«çãŸããŸããããšä»ã®å€ãã
ãã®ãã¹ãŠã®æè¯ã®éšåã¯ãç§ãã¡ã説æãããã°ã®å€ãããã®åŸãããžã§ã¯ãéçºè èªèº«ã«ãã£ãŠä¿®æ£ãããããšã§ããããªããéçºããŠããããŒã«ããçŸå®ã®ãç®ã«èŠããããããŠå ·äœçãªå©çãäžçã«ãããããŠãããšæããã®ã¯è¯ãããšã§ãã
ãããªã²ãŒã ã®éçºã«é¢é£ãããã¹ãŠã®èšäºã®ãªã¹ãã¯ãããã°ã®ç¹å¥ãªããŒãžã§èŠãããšãã§ããŸãã
çµè«
ããã§ç§ã®çãèšäºã¯çµããã§ãããã°ããšã©ãŒã®ãªããã¯ãªãŒã³ã§æ£ããæ©èœããã³ãŒãããç¥ãããŸãã
éçåæã®ãããã¯ã«èå³ããããŸããïŒãããžã§ã¯ãã«ãšã©ãŒããªãã確èªããŸããïŒPVS-Studioãã詊ããã ããã


ãã®èšäºãè±èªã話ãèŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãªã³ã¯ã䜿çšããŠãã ããïŒGeorgeGribkovãéçã³ãŒãåæãGameDevæ¥çã§ã©ã®ããã«åœ¹ç«ã€ãã