知りたいこと
Unityの名前空間について、質問です。
自分の今の理解してるのは、
クラス名が他の人が作成したクラス名と被ってしまうと、衝突が起きるので、
コンパイルを通すときにエラーが発生するので、
特にチーム開発の時には、基本的には名前空間を使って、クラス名の衝突を避ける。
というのは理解できてます。
で、知りたいことは、
皆さんは、namespaceはどこまでの粒度で命名されていますか?
例えば、PlayerとEnemyのカテゴリー別でスクリプトをフォルダの中に分けているとします。
この場合、Playerの名前空間と、Enemyの名前空間を作るとか、、です。
例として、以下にnamespaceを使わないManagerクラスのコードを記載します。
また「疑問に思うこと」では、2つのコードにPlayerの名前空間とEnemyの名前空間を使っています。
C#
1public class PlayerManager : Monovihaviour{ 2 //処理 3}
C#
1public class EnemyManager : Monovihaviour{ 2 //処理 3}
上記のスクリプトでは、クラス名は完結にはなっています。
PlayerならPlayerのみのnamespaceに。
EnemyならEnemyのみのnamespaceに。
ここまでの粒度の名前空間って、逆に使いずらいような気がしています。
ちなみに、今までは一つのプロジェクトに、プロジェクト名のnamespaceをつけていました。
namespaceは以下の「疑問に思うこと」の2つのコードで、
試しにManager.csスクリプトを作成してみたのですが、同じクラス名にはできませんでした。
疑問に思うこと
次に、namespaceを使って、Managerクラスを作っている場合は
- PlayerManager.cs > Manager.cs
- EnemyManager.cs > Manager1.cs
Manager.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Enemy; 5 6namespace Player 7{ 8 public class Manager : MonoBehaviour 9 { 10 public int playerHP; 11 void Start() 12 { 13 Enemy.Manager1 manager = new Enemy.Manager1(); 14 manager.enemyHP = 0; 15 16 } 17 } 18} 19
Manager1.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Player; 5 6namespace Enemy 7{ 8 public class Manager1 : MonoBehaviour 9 { 10 public int enemyHP; 11 void Start() 12 { 13 Player.Manager manager = new Player.Manager(); 14 manager.playerHP = 10; 15 } 16 } 17}
別件ですが、簡単な質問をもう一つだけ。
publicなので、usingを使わずともアクセスができると思うので、
UnityでのInternalアクセス修飾子の同一アセンブリのみっていうのがいまいち理解できていません。
UnityHubでプロジェクトを2つ作成したとしたら、publicにしたら、この違う2つのプロジェクトのクラス間もアクセスできてしまうのでしょうか?
そうならinternalにほとんどしないといけないのでは?と思ってますが、
例えば上の疑問に思うことに記載しているコードだと、他のプロジェクトからアクセスできるのでしょうか?
回答2件
あなたの回答
tips
プレビュー