質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

1045閲覧

unity初期化、記載する位置による違いについて

mink.

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/02/12 11:18

unityにおいて、メンバ変数の初期化についてお聞きしたいです。

以下の3つにおいて、初期化を記載する位置の違いにより、実行されるタイミング・特徴・利点・欠点について教えていただきたいです。
・メソッドを使用せずの初期化(クラス内で宣言したときに初期化)
・awakeメソッドでの初期化
・startメソッドでの初期化

startメソッドとawakeメソッドの違い、実行順番についてはネットにあるサイトがいくつかあるので、それを見ているのですが、
ゲーム実行中における初期化されるタイミング(ゲームが実行された瞬間に呼び出されるのか、そのスクリプトがあるシーンが呼び出されたら実行されるのか)がいまいちわかりません。

また、同様にメソッドを使用せずの初期化(クラス内で宣言したときに初期化)はどのような動きになるのか、がわかりません。

基本的にメソッドを使用せずの初期化(クラス内で宣言したときに初期化)は使用されているイメージがないのですが、それはなぜなのでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

awakeとstartの違いは、prefabをinstantiateしたときがわかりやすいですね。
オブジェクトAとinstantiateした直後にオブジェクトAのstart関数内で定義した情報を取得しようとするとエラーが発生します。

投稿2022/02/18 08:30

YOshim

総合スコア1094

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

クラス内で宣言したときに初期化

多分コンポーネントの変数を宣言して何も代入していない(例: Rigidbody rb; とだけ書く)時の事を言っているのだと思いますが、この時は初期化されず変数には既定値である null が入ります。

一般的な(Unity ではない)C# のプログラミングを学んでいるならば、"Rigidbody rb = new Rigidbody();" と書いて初期化をしようとするかもしれませんが、コンポーネント変数に対してこのように書くことは Unity では許可されていません。実行すると警告が出力されます。

従って Start と Awake の場合だけ考えればよいと思いますが、それについては unity start awake で検索すると記事がたくさん見つかると思います。ドキュメント的な説明では「Awake はインスタンスが生成された直後」「Start はインスタンスが生成された後に最初の Update が呼び出される前」ですが、それがどういう違いなのかはいろいろな記事を見てみるとよいと思います。「Start だけしか使わないとどんな不都合が起きるのか」を考えながら読むとよいと思います。実際にその不都合を経験していると、さらに理解しやすいと思います。

投稿2022/02/13 11:17

編集2022/02/13 11:18
bboydaisuke

総合スコア5339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mink.

2022/03/26 10:56 編集

ありがとうございます!unityコンポーネントの初期化については理解しました。 一方で、変数について疑問があります。 例として下記のようなスクリプトがあった場合、それぞれの初期化が3種類になると思います。 ・aの初期化 ・bの初期化 ・cの初期化 この場合、 ・どの順番で行われるのか。どのタイミングで初期化されるか。 ・aの初期化の方法はあまり見ない(bやcの位置で初期化されているコードを見ることがおおい)が、なぜこれは使用されないのか の2点を知りたいです。 public class Test : MonoBehaviour{ int a = 5; void Awake(){ int b = 5; } void Start(){ int c = 5; } }
bboydaisuke

2022/03/26 11:16

> どの順番で行われるのか。 当然 a > b > c です。 > aの初期化の方法はあまり見ない そんなことは全くありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問