ãªã³ã©ã€ã³ã²ãŒã ãéçºããäžã§ãå®è£ ãå¿ èŠã«ãªãïŒãªãã©ã€ã³ã®ã²ãŒã éçºã«ã¯ãªãïŒåŠçã¯ã倧éæã«åãããšæ¥ç¶ïŒð€ïŒãšåæïŒðïŒã®2ã€ã§ãã
- ãããã¯ãŒã¯ã«æ¥ç¶ããŠãä»ãã¬ã€ã€ãŒãšéä¿¡ã§ããããã«ãã
- ä»ãã¬ã€ã€ãŒãšããŒã¿ãéåä¿¡ããŠãã²ãŒã ã®ç¶æ ãåæãã
Unityã«ã¯ãããã®å®è£ ãæ¥œã«ããæ©èœãæã£ãŠããã¢ã»ããïŒãããã¯ãŒã¯ã©ã€ãã©ãªïŒãããã€ãååšããŠããŸããããã®äžã§ãå©çšè ãå€ã䜿ãããããªã³ã©ã€ã³ã²ãŒã éçºã®å ¥éã«æé©ãªã¢ã»ããããPUN2ïŒPhoton Unity Networking 2ïŒã«ãªããŸãã
ð€ æ¥ç¶
Photonã®ãµãŒããŒã«ã¯ãããŒã ãµãŒããŒãšãã¹ã¿ãŒãµãŒããŒãšã²ãŒã ãµãŒããŒã®3çš®é¡ããããŸãããŸãããŒã ãµãŒããŒãžæ¥ç¶ããããŒã ãµãŒããŒããé©åãªãªãŒãžã§ã³ïŒåœã»å°åïŒã®ãã¹ã¿ãŒãµãŒããŒãžè»¢éããããŠãã¹ã¿ãŒãµãŒããŒã§ãã¬ã€ã€ãŒã®ãããã¡ã€ãã³ã°ãè¡ããã«ãŒã ãäœæãããŠããã²ãŒã ãµãŒããŒãžè»¢éããã®ãåºæ¬çãªæµãã§ãããã¬ã€ã€ãŒã¯ãåãã«ãŒã ãžåå ããŠããä»ãã¬ã€ã€ãŒãšã®ã¿ããŒã¿ãéåä¿¡ããŠåæåŠçãè¡ãããšãã§ããã®ã§ãããã«ã¹ã ãŒãºã«åãã¬ã€ã€ãŒãé©åãªã«ãŒã ãžåå ãããŠãããããæ¥ç¶åŠçã®äž»ãªç®çã«ãªããŸãã
ããŒã ãµãŒããŒ
Photon Cloudã¯äžçäžã®æ§ã ãªãªãŒãžã§ã³ã«ãµãŒããŒãèšçœ®ãããŠããŸããæ¥æ¬åšäœã®ãã¬ã€ã€ãŒã¯ãæ¥æ¬ã«èšçœ®ãããŠãããµãŒããŒã«æ¥ç¶ããã°å¿«é©ã«éä¿¡ãã§ããŸãããããé ãåœã«èšçœ®ãããŠãããµãŒããŒã«æ¥ç¶ããŠããŸããšéåžžã«äžå®å®ãªéä¿¡ã«ãªã£ãŠããŸãã§ããããããŒã ãµãŒããŒã§ã¯ã倿°ã®ãªãŒãžã§ã³ã®äžããé©åãªãªãŒãžã§ã³ãéžæããŠããã®ãªãŒãžã§ã³ã®ãã¹ã¿ãŒãµãŒããŒãžã®è»¢éãè¡ãããŸããããã¯å šãŠèªåçã«è¡ããããããã²ãŒã éçºè åŽã§æèããå¿ èŠã¯ã»ãšãã©ãããŸããããã®ããæ¬æžã§ã¯ãã以éãæåã«ãã¹ã¿ãŒãµãŒããŒãžæ¥ç¶ãããã®ãšããŠèª¬æãè¡ã£ãŠãããŸãã
private void Start() {
// PhotonServerSettingsã®èšå®å
容ã䜿ã£ãŠãã¹ã¿ãŒãµãŒããŒãžæ¥ç¶ãã
PhotonNetwork.ConnectUsingSettings();
}
ãã¹ã¿ãŒãµãŒããŒ
ãã¹ã¿ãŒãµãŒããŒã¯ãçŸåšã²ãŒã ãéãã§ãããã¬ã€ã€ãŒã®ç·æ°ããã²ãŒã ãµãŒããŒã«äœæãããŠããå šãŠã®ã«ãŒã ã®æ å ±ãç£èŠããŠããŸããããã§æ°ããã«ãŒã ãäœæããããæ¢ã«ååšããã«ãŒã ãžã©ã³ãã ã§åå ãããããŸãã¯ãããŒã«åå ããŠãæ¢ã«ååšããã«ãŒã äžèЧããåå ããã«ãŒã ãéžãã ãããããšãã§ããŸãããã¬ã€ã€ãŒã¯ã«ãŒã ãžåå ããæã«ããã®ã«ãŒã ãäœæãããŠããã²ãŒã ãµãŒããŒãžè»¢éãããŸãã
// ãã¹ã¿ãŒãµãŒããŒãžã®æ¥ç¶ãæåããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnConnectedToMaster() {
// "Room"ãšããååã®ã«ãŒã ã«åå ããïŒã«ãŒã ãååšããªããã°äœæããŠåå ããïŒ
PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default);
}
ã²ãŒã ãµãŒããŒ
ã«ãŒã ã¯å šãŠã²ãŒã ãµãŒããŒã«äœæãããŸããã«ãŒã ãžåå ãããã¬ã€ã€ãŒã¯ãã²ãŒã ãµãŒããŒãéããŠåãã«ãŒã ãžåå ããŠããä»ãã¬ã€ã€ãŒãšããŒã¿ãéåä¿¡ããŠãã²ãŒã ã®ç¶æ ãåæãããŠãããŸããããã§ãã¬ã€ã€ãŒãã«ãŒã ããéåºããæã¯ãå ã®ãã¹ã¿ãŒãµãŒããŒãžåã³è»¢éãããŸãã
// ã²ãŒã ãµãŒããŒãžã®æ¥ç¶ãæåããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnJoinedRoom() {
// ã©ã³ãã ãªåº§æšã«èªèº«ã®ã¢ãã¿ãŒïŒãããã¯ãŒã¯ãªããžã§ã¯ãïŒãçæãã
var position = new Vector3(Random.Range(-3f, 3f), Random.Range(-3f, 3f));
PhotonNetwork.Instantiate("Avatar", position, Quaternion.identity);
}
ð åæ
ã«ãŒã ãžåå ãããã¬ã€ã€ãŒã¯ãã²ãŒã ãµãŒããŒãéããŠåãã«ãŒã ãžåå ããŠããä»ãã¬ã€ã€ãŒãšããŒã¿ãéåä¿¡ã§ããããã«ãªããŸããããããã«ãŒã ããã¬ã€ã€ãŒã®æ å ±ãååŸããŠæŽæ°ãããããã¬ã€ã€ãŒãçæãããããã¯ãŒã¯ãªããžã§ã¯ãã®æ©èœã掻çšãããããŠãã²ãŒã ã®ç¶æ ãåæãããåŠçãè¡ã£ãŠãããŸãã
ãã¬ã€ã€ãŒ
ã«ãŒã ã«åå ãããã¬ã€ã€ãŒã¯ãã«ãŒã å ã§ãŠããŒã¯ãªIDãå²ãåœãŠãããŸãããã¬ã€ã€ãŒã¯ãã¬ã€ã€ãŒåã®ä»ã«ãäŸãã°ããã¬ã€ã€ãŒã®ç²åŸããã¹ã³ã¢ããããŒã æŠã®ã²ãŒã ã§ããã°ãã¬ã€ã€ãŒãæå±ããããŒã ã®IDãªã©ãåãã¬ã€ã€ãŒããšã«æãããå€ã®åæã«äœ¿ãããšãã§ããŸãã
private void Start() {
var nameLabel = GetComponent<TextMeshPro>();
// ãã¬ã€ã€ãŒåãšãã¬ã€ã€ãŒIDã衚瀺ãã
nameLabel.text = $"{photonView.Owner.NickName}({photonView.OwnerActorNr})";
}
ãŸãåã«ãŒã å ã§ã¯ããã¬ã€ã€ãŒ1人ã«ãã¹ã¿ãŒã¯ã©ã€ã¢ã³ããå²ãåœãŠãããŠããŠãã«ãŒã å ã®ãã¬ã€ã€ãŒ1人ã ãã«å®è¡ããããåæåŠçãè¡ãå Žåã«æŽ»çšãããŸãã
ãããã¯ãŒã¯ãªããžã§ã¯ã
ãããã¯ãŒã¯äžã§åæãããã²ãŒã ãªããžã§ã¯ãã¯ãããã¯ãŒã¯ãªããžã§ã¯ããšåŒã°ããŸããèªèº«åŽã§ã€ã³ã¹ã¿ã³ã¹ãçæãããšä»ãã¬ã€ã€ãŒåŽã§ãã€ã³ã¹ã¿ã³ã¹ãçæãããŠãéã«ä»ãã¬ã€ã€ãŒåŽã§ã€ã³ã¹ã¿ã³ã¹ãçæãããšèªèº«åŽã§ãã€ã³ã¹ã¿ã³ã¹ãçæãããŸãããããã¯ãŒã¯ãªããžã§ã¯ãã¯ãåãã¬ã€ã€ãŒã®ã¢ãã¿ãŒã®ä»ã«ãäŸãã°ãã²ãŒã ã®ãããäžã«ååšããã¢ã€ãã ããNPCã®æµãã£ã©ã¯ã¿ãŒãªã©ãæ§ã ãªã²ãŒã ãªããžã§ã¯ãã®åæã«äœ¿ãããšãã§ããŸãã
// ã²ãŒã ãµãŒããŒãžã®æ¥ç¶ãæåããæã«åŒã°ããã³ãŒã«ããã¯
public override void OnJoinedRoom() {
// ã©ã³ãã ãªåº§æšã«èªèº«ã®ã¢ãã¿ãŒïŒãããã¯ãŒã¯ãªããžã§ã¯ãïŒãçæãã
var position = new Vector3(Random.Range(-3f, 3f), Random.Range(-3f, 3f));
PhotonNetwork.Instantiate("Avatar", position, Quaternion.identity);
}
ãããã¯ãŒã¯ãªããžã§ã¯ãã«ã¯æææš©ãããããããã¯ãŒã¯ãªããžã§ã¯ããçæãããã¬ã€ã€ãŒãããã©ã«ãã§ã¯ææè ãšããŠçŽã¥ããŠããŸããã«ãŒã ã«çŽã¥ãïŒææè ãæããªãïŒã«ãŒã ãªããžã§ã¯ããšåŒã°ãããããã¯ãŒã¯ãªããžã§ã¯ããçæããããšãã§ããŸãã
ð¶ Photon Cloudã§ããã«ãã€ã€ã«ã²ãŒã ã¯äœãããïŒ
Photon Cloudã®ç¡æãã©ã³ã¯æå€§20人ãŸã§åææ¥ç¶ã§ããŸããã1ã«ãŒã ã«10ïœ20人以äžãéãŸã£ãŠå¯ŸæŠãããããªãªã³ã©ã€ã³ã²ãŒã ã®éçºã¯ïŒäžå¯èœã§ã¯ãããŸãããïŒããªãé£æåºŠãé«ããªããŸãã
ã¡ãã»ãŒãžæ°ã®å¶é
Photon Cloudã«ã¯ã1ã«ãŒã ã®ç§éã¡ãã»ãŒãžæ°500ãšããå¶éããããŸããããã§ã«ãŠã³ããããã¡ãã»ãŒãžæ°ã¯ããµãŒããŒãéåä¿¡ããã¡ãã»ãŒãžæ°ã®åèšã«ãªããŸããäŸãã°ãåå ãã¬ã€ã€ãŒæ°ã4人ã®ã²ãŒã ã§ããããã¬ã€ã€ãŒãä»3人ã®ãã¬ã€ã€ãŒã«ããŒã¿ãéä¿¡ããå ŽåããµãŒããŒã¯1ã¡ãã»ãŒãžãåä¿¡ããŠ3ã¡ãã»ãŒãžãéä¿¡ããã®ã§ã4ã¡ãã»ãŒãžãã«ãŠã³ããããŸãã
1ã«ãŒã ã®ç§éã¡ãã»ãŒãžæ°
ã§è¡šããŸããããã¯1ã«ãŒã ã®åå ãã¬ã€ã€ãŒæ°ãå¢ãããšãã«ãŒã å ã®ã¡ãã»ãŒãžæ°ãææ°é¢æ°çã«å¢å ããããšãæå³ããŸãããããŠããã®ç§éã¡ãã»ãŒãžæ°ã500以äžã«æãããšãããšã
ãæºããããã«ãåãã¬ã€ã€ãŒã®ç§ééä¿¡ã¡ãã»ãŒãžæ°ã調æŽããå¿ èŠããããŸããåå ãã¬ã€ã€ãŒæ°ã4人ãªããçŽ30åãšé«éãªå¯ŸæŠã¢ã¯ã·ã§ã³ãäœããã ãã®ååãªäœè£ããããŸãããåå ãã¬ã€ã€ãŒæ°ã10人ã«ãªããšãæå€§5åã§ããŸãåæããä»çµã¿ãèããªããã°ãªããŸãããåå ãã¬ã€ã€ãŒæ°ã20人ã«ããªããšã2åã§å¶éããªãŒããŒããŠããŸããããæ§ã ãªéä¿¡éåæžã®ãã¯ããã¯ãããªãã¯ãé§äœ¿ããªããã°ããŸãšãã«åæããããšããå°é£ã«ãªãã§ãããã
ããã¯èŠæ¹ãå€ããã°ãåãã¬ã€ã€ãŒã®ç§ééä¿¡ã¡ãã»ãŒãžæ°ã1åååŸã§åæã§ããã²ãŒã ãªããåå ãã¬ã€ã€ãŒæ°ã20人以äžã§ãåããããšããããšã§ããããŸããäŸãã°ãã¿ãŒã³ããŒã¹ã®ã²ãŒã ããã»ãã¿ãŒã³ããŒã¹ïŒè¡åã²ãŒãžãæºãŸããšã³ãã³ããéžæã§ãããããªãã®ïŒã®ã²ãŒã ãªã©ã§ã倧人æ°ãªã³ã©ã€ã³ã²ãŒã éçºã«ãã£ã¬ã³ãžããŠã¿ãŠãè¯ããããããŸããã
転ééè¶ éæé
ã§ã¯ãå®éã«1ã«ãŒã ã®ç§éã¡ãã»ãŒãžæ°ã500ãè¶ ãããã©ããªãã®ãïŒãšãã話ãã以äžã®å ¬åŒãã©ãŒã©ã ã§è°è«ãããŠããŸãã
- 1ã«ãŒã ã®ç§éã¡ãã»ãŒãžæ°500ã¯ã匱ãå¶éïŒsoft limitïŒã§ãã
- ã¡ãã»ãŒãžæ°ã500ãè¶ ããŠããPhoton Cloudã®ãµãŒããŒã«æªåœ±é¿ããªããã°OK
- ãµãŒããŒã«æªåœ±é¿ãããã°ãPhotonéå¶åŽããä¿®æ£äŸé Œã®é£çµ¡ããã
- ïŒç¡æãã©ã³ã§ãïŒè»¢ééè¶ éæéããããå¯èœæ§ãããã®ã§ã现å¿ã®æ³šæãæãããš
ãšã®ããšãªã®ã§ãèªå·±è²¬ä»»ã«ãããŠã1ã«ãŒã ã®ç§éã¡ãã»ãŒãžæ°ã500ãè¶ ãããããªãªã³ã©ã€ã³ã²ãŒã ãéçºããããšã¯å¯èœã§ãããã ãããããµãŒããŒã«æªåœ±é¿ãããã»ã©ã®è² è·ããããŠããŸã£ãå Žåã«ãåé¡ãä¿®æ£ã§ããã ãã®ç¥èãã¹ãã«ããªããã°ãã²ãŒã ããªãªãŒã¹ã§ããªããªã£ãããå ¬éäžæ¢ã«ããããåŸãªããªãããšã«ãªããããããŸãããããã«ã1ã«ãŒã ã®åå ãã¬ã€ã€ãŒæ°ãå¢ãããšããã¡ãã転ééãææ°é¢æ°çã«å¢å ãããããå€é¡ã®è»¢ééè¶ éæéãçºçããŠããŸãå¯èœæ§ããããŸãããã倧人æ°ãªã³ã©ã€ã³ã²ãŒã éçºã«ãã£ã¬ã³ãžããã€ããã§ããã°ããããã®ãªã¹ã¯ã¯ååã«çè§£ããŠããå¿ èŠãããã§ãããã
ããã«ãã€ã€ã«ã²ãŒã ã®å®äŸ
æåå³åã§ãããPUN2ã§éçºããã«ãžã¥ã¢ã«ãªããã«ãã€ã€ã«ã²ãŒã ãunityroomã«ç¡æã§å ¬éããŠããŸãã®ã§ãè¯ãã£ããéãã§ã¿ãŠãã ããã