質問するログイン新規登録

回答編集履歴

4

注意書き

2016/06/01 04:53

投稿

shironegi
shironegi

スコア119

answer CHANGED
@@ -17,4 +17,8 @@
17
17
  前述のパフォーマンスのためか,MonoBehaviourの設計思想のためか,理由はどちらにせよ根本的に手を入れている線は間違いないのではないかと.
18
18
 
19
19
  いまひとつ文章がまとまっていなくてすみません.
20
- あくまで推測なので鵜呑みにしないで頂ければ幸いです.
20
+ あくまで推測なので鵜呑みにしないで頂ければ幸いです.
21
+
22
+ ※追記
23
+ 誤った情報がありますが訂正しておりませんので,
24
+ 後々ご覧になる方はコメント欄を見て補完して下さい.

3

補足

2016/06/01 04:53

投稿

shironegi
shironegi

スコア119

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  なお,継承した場合に基底クラスのイベント関数(例えばUpdate)にpublicを付けない場合は言語仕様通り継承されず,派生クラスでUpdateを定義しない場合は基底クラスのUpdateさえ呼ばれないので,クラスだけ継承してもオブジェクトの動作を決定するイベント関数は完全に別個になります.
13
13
  それが Mono(単一の)Behaviour(動作)の名前の由来と考えると繋がります.
14
14
  (BehaviourからではなくMonoBehaviourからイベント関数が定義されていますよね)
15
- publicにすると言語仕様上仮想関数にしてしまうと必ず継承されてしまうので,このような動作は実現できません.
15
+ publicにすると言語仕様上必ず継承されてしまうので,子側で空の関数を定義しない限り親の動作を引き継いでしまい,このような動作は実現できません.
16
16
  継承されようとも動作定義をクラス単位で別個にするには,publicを付けない状態で呼び出せる方法(=コンパイラ拡張)が必要になります.
17
17
  前述のパフォーマンスのためか,MonoBehaviourの設計思想のためか,理由はどちらにせよ根本的に手を入れている線は間違いないのではないかと.
18
18
 

2

追記

2016/06/01 04:28

投稿

shironegi
shironegi

スコア119

answer CHANGED
@@ -7,6 +7,14 @@
7
7
  仮想関数はオーバーヘッドがかかりますからね.
8
8
 
9
9
  C++ならまだしもC#ですし,エンジンの根幹部分で多大なオーバーヘッドによる負荷を生じさせてしまってはゲームどころではなくなってしまうため,コンパイラレベルで根本的に手を入れているのではないかと思っています.
10
- さらに言うとpublicさえ付けさえない(付けなくて良い)のはイベント関数が不用意に他のクラスから呼ばれる事を防ぐためではないかと.
10
+ さらに言うとpublicさえ付けさえない(付けなくて良い)のはイベント関数が不用意に他のクラスから呼ばれる事を防ぐためと,下記の点を実現するためではないかと.(長いので別段落にしました)
11
11
 
12
+ なお,継承した場合に基底クラスのイベント関数(例えばUpdate)にpublicを付けない場合は言語仕様通り継承されず,派生クラスでUpdateを定義しない場合は基底クラスのUpdateさえ呼ばれないので,クラスだけ継承してもオブジェクトの動作を決定するイベント関数は完全に別個になります.
13
+ それが Mono(単一の)Behaviour(動作)の名前の由来と考えると繋がります.
14
+ (BehaviourからではなくMonoBehaviourからイベント関数が定義されていますよね)
15
+ publicにすると言語仕様上仮想関数にしてしまうと必ず継承されてしまうので,このような動作は実現できません.
16
+ 継承されようとも動作定義をクラス単位で別個にするには,publicを付けない状態で呼び出せる方法(=コンパイラ拡張)が必要になります.
17
+ 前述のパフォーマンスのためか,MonoBehaviourの設計思想のためか,理由はどちらにせよ根本的に手を入れている線は間違いないのではないかと.
18
+
19
+ いまひとつ文章がまとまっていなくてすみません.
12
20
  あくまで推測なので鵜呑みにしないで頂ければ幸いです.

1

補足

2016/06/01 04:25

投稿

shironegi
shironegi

スコア119

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  ということです.
7
7
  仮想関数はオーバーヘッドがかかりますからね.
8
8
 
9
- C++ならまだしもC#ですし,エンジンの根幹部分で多大なオーバーヘッドによる負荷を生じさせてしまってはゲームどころではなくなってしまうため,根本的に手を入れているのではないかと思っています.
9
+ C++ならまだしもC#ですし,エンジンの根幹部分で多大なオーバーヘッドによる負荷を生じさせてしまってはゲームどころではなくなってしまうため,コンパイラレベルで根本的に手を入れているのではないかと思っています.
10
10
  さらに言うとpublicさえ付けさえない(付けなくて良い)のはイベント関数が不用意に他のクラスから呼ばれる事を防ぐためではないかと.
11
11
 
12
12
  あくまで推測なので鵜呑みにしないで頂ければ幸いです.