Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。コピー2019.03.01C#のメソッド呼び出しをする際に引数を渡してメソッド内で引数の値を使う事は多々あります。メソッド呼び出し時の引数の渡し方には「値渡し」と「参照渡し」の二通りの方法があるので、今回はそれについて勉強していきます。後述する引数に付けるキーワードのrefとoutを使う頻度は少ないかも?しれません。Unityの場合はPhysics.Raycastの引数でoutが出てきたりするので意味を理解しておくと何をしているのか?がわかります。hit.point);}}}スポンサーリンク変数の種類メソッドに渡す引数の渡し方の前に、変数の種類について少し見ていきます。変数については、C#で変数を使うUnityでゲームを作る時に必要なC#の変数について勉強します。gametukurikata.com2017.10.08を見てください。変数には値型と参照型があり、値型は値そのもの、参照型は値がある場所を指し示す参照値が入っています。値型の変数を引数で渡す値型と参照型の変数の違いがわかったところでメソッド呼び出し時に値型の変数を渡して変数の値がどうなるのかを見てみましょう。intValue;}}値型であるint型の変数intValueに1を入れた後、IncreaseメソッドにintValueを引数として渡して呼び出します。IncreaseメソッドはintValueに引数として渡ってきた値を入れ、それに1を足してその値を呼び出し元に返しています。Unityのコンソールには結果として21が表示されます。Increaseの呼び出しから得られた戻り値は2で、Increase呼出し後にintValueの値を表示すると1が表示されていることになります。この場合は値型の変数をそのまま引数で指定している為、引数は値渡し(変数の値のコピー)をしていて、Increase呼出しの後StartメソッドでintValueの値を表示してもintValueの値は変わっていません。StartとIncreaseで同じ名前のintValueを使っていますが、これはまったく別物です。参照型の変数を引数に渡す次に参照型の変数をメソッド呼び出し時に引数として渡してみます。5;}}参照型であるint型の配列を宣言し、最初に要素を表示しています。その後ChangeArrayValueメソッドにintArrayを引数として渡し、その後intArrayの要素を再度表示しています。ChangeArrayValueの引数には参照型であるintArrayを渡しているので、引数としては値の場所を示す参照値が渡っています。ChangeArrayValueメソッドではtempIntArrayにintArrayの参照値を受け取り、配列の0番目の要素を5に書き換えます。その為StartメソッドでChangeArrayValueを呼び出した後にintArrayの要素を表示すると5123と表示されます。値型と違って参照型の場合は値がある場所を指し示す参照値が渡っている為、ChangeArrayValueメソッドで要素の書き換えが起こるとStartメソッド内のintArrayの値も書き換わってしまいます。refを使った参照渡し値型と参照型の変数を引数に渡す違いが見れましたが、refを使うと明示的に参照渡しをすることが出来ます。値型の変数を引数として渡す時に渡す引数の前にrefを書きます。intValue;}}RefTestは最初に示したPassByValueスクリプトのメソッド呼び出し時の実引数とメソッドの仮引数にrefを付けただけです。結果として表示されるのは22となります。refを付けてintValueを渡しているのでintValueの参照値がIncreaseに渡されその値を書き換えているのでStartメソッド内のintValueも書き換えられます。上の例ではIncreaseで戻り値を返していますが参照で渡ってきた値を書き換えている為、特に値を返す必要がありません。{intValue++;}}outを使った参照渡しrefと似たようなものにoutを使った参照渡しがあります。outを使った引数は参照渡しになり、呼び出し先のメソッドで初期化をする必要があります。先ほど作成したRefTest2スクリプトをrefからoutに変更してみます。10;intValue++;}}RefTest2のスクリプトのrefをoutにし、Startメソッド内のintValueの初期化をなくし、Increaseメソッド内でintValueの初期化をしています。Increaseの呼び出し時に渡すintValueにoutが付いているのでStartメソッド内でのintValueの初期化をしません。IncreaseメソッドのintValueにもoutを付け、intValueの初期化をしその値をインクリメントしています。Increaseメソッド呼び出し時の引数intValueにはoutキーワードが付いているので参照渡しとなりIncreaseで戻り値を返さなくてもStartメソッド内のintValueの値が変更されます。上のスクリプトでは11がコンソールに表示されます。OutTest1では値型の変数を参照渡しにしていますが、参照変数の場合もそのまま参照渡しになります。}}}StartメソッドではTestClassの変数testClassの宣言をするだけで実体は生成せずIncreaseメソッドにout付きの引数として渡します。Increaseメソッド内でTestClassの実体を作成しプロパティのAgeに10を入れた後インクリメントします。このスクリプトを実行するとコンソールに11が表示されます。この例はこの記事の最初に示したPhysics.Raycastの例と使い方としては同じ感じですね。終わりに参照渡しをする際に使用するrefとoutについてはPhysics.Raycastの引数等で見ていたのでなんとなく何をしているのかはわかっていましたが、refやoutが実際にどういった動作をするのかを見ていけたのでよかったです。わたくしが持っている本ではrefやoutを使ったメソッドはほとんど使う必要がない事が書かれていましたし、個人的に使う事もなかったので動作がどんなものなのかがわかるだけでいいかなと思いました。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事UnityでC#の勉強C#のIf文、Switch文をUnity付属のMonoDevelopを使って勉強するC#のIf文、Switch文の使い方をUnity付属のMonoDevelopを使って勉強していきます。UnityでC#の勉強C#のクラス、フィールド、メソッド、コンストラクタ、プロパティの作成C#のクラスの作成やフィールド、メソッド、コンストラクタ、プロパティについて記述しました。UnityでC#の勉強UnityでC#の勉強始めますUnityを使ってC#の勉強をしていきます。プログラミング自体の勉強とUnityで使える勉強をしてタイトルからJavaScriptを消してやろうかと・・・UnityでC#の勉強C#で正規表現を使って文字列処理をするC#で正規表現を使って文字列処理をする勉強をしていきます。UnityでC#の勉強C#で変数を使うUnityでゲームを作る時に必要なC#の変数について勉強します。UnityでC#の勉強C#でフォルダ、ファイルの作成、移動、削除をするC#でDirectoryクラス、Fileクラスを使用してフォルダ、ファイルの作成、移動、削除を行ってみます。サンプルはUnity付属のMonoDevelopを使って作成し実行していきます。Unityでアイコンを使ってライフゲージを作成するUnityで操作キャラクターの回りを旋回する攻撃ユニットの作成ホームUnityでC#の勉強スポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?gametukurikata.com2019.06.21の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なアクションゲームや、TPSゲームの作成までが出来ます。自作タイピングゲームタイピングゲームを作りました。WebGL形式なのでPCのブラウザで遊べます。以下からプレイ出来ます。FinalTypingUnityを使って作成したローマ字入力のタイピングゲームです。gametukurikata.com2022.01.02お知らせ2023/01/24個人的にUnity2022.2.3f1をインストールしました。2022/10/14UnityのIKを使って足の位置と角度を地面に合わせる機能Unityのゲームでキャラクターの両足が別の高さの地面の上にある時にそれぞれの足をそれぞれの地面につけるようにする機能を作成しますgametukurikata.com2016.04.11機能を少し修正しました。2020/09/19コメント欄は閉鎖しました。今までコメントを投稿してくださった方はありがとうございました。(^^)/2018/08/07わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。gametukurikata.com2019.08.01Unityを使い始めたばかりの人がつまづきやすい点を解消するUnityを使い始めたばかりの人が結構な確率で陥る不具合や疑問点を解消していきます。基本的にはブログに寄せられた質問への回答という感じです。gametukurikata.com2018.12.04も参照してみてください。小・中学生によるデジタルコンテンツ開発の全国大会ですuycc.unity3d.jp2022年大会の先行エントリーが開始されているようです。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。記事の内容に質問がある方へUnityを使った3Dゲームの作り方(かめくめ)の歩き方UnityのJavaScriptとC#を読み替えてどちらでも対応出来るようにするホーム検索トップサイドバータイトルとURLをコピーしました。