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

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

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

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

Unity

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

Q&A

解決済

2回答

232閲覧

c# の public 変数を別の変数に置き換える意味

MakuraMakura

総合スコア24

C#

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

Unity

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

1グッド

0クリップ

投稿2017/10/26 12:55

Unity&C# 初心者です。

「Unity ゲーム開発」と言う本に書いてあるデモコードのpublic変数を別の変数に置き換える意味がよくわからなく質問します。

// 目的地. public Vector3 destination; // Use this for initialization void Start () { characterController = GetComponent<CharacterController>(); } // Update is called once per frame void Update () { // 移動速度velocityを更新する if (characterController.isGrounded) { // 水平面での移動を考えるのでXZのみ扱う. Vector3 destinationXZ = destination;

これはpublic変数をいじるのが危険だからでしょうか?それとも表示的にわかりやすくするためで、それ以上の意味はないのでしょうか?気になったので質問します

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

Unityは使用していませんがドキュメントを少し見た感じ、Vector3は構造体のようです。
構造体は変数に割り当てると、コピーを作るという特徴があるためコピーを作っています。

Vector3 destinationXZ = destination;

このdestinationXZはdestinationのコピーで、destinationとは別物となります。

構造体の振る舞いのついては以下を参照、および、ご自身で検索して調べてみてください。
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/structs

投稿2017/10/26 14:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

MakuraMakura

2017/10/26 14:36

回答ありがとうございます。コピーしたらその変数が元の代入元変数へのアクセスにならないのは、インスタント変数でもない限り全部そうな気がします。C#の構造体のリファレンスを見ろとおっしゃるのはその通りなのと、質問から情報が増えてるからベストアンサーに選択させていただきました。ありがとうございます。
root_jp

2017/10/26 14:57

インスタント変数って何でしょうか?変数の種類として聞いたことないので、良ければ教えてください。 それか、もしかしてインスタンス変数のことですか? であれば、たんなる代入がコピーになるかどうかは、インスタンス変数だろうがローカル変数だろうが全く関係ありません。 構造代は代入で実体のコピーになりますが、参照型であれば代入はポインタのコピーなので、インスタンス自体は同じものを参照します。 >コピーしたらその変数が元の代入元変数へのアクセスにならない と言うのはおっしゃる通りなのですが、参照型をコピーしようと思うと、ディープコピーする必要があり、割と面倒くさいので、明らかに構造体とは違います。
MakuraMakura

2017/10/27 06:18 編集

インスタンス変数ですね。構造代って何でしょうか? もしかして構造体ですか? ってのは冗談ですが。 >たんなる代入がコピーになるかどうかは、インスタンス変数だろうがローカル変数だろうが全く関係ありません。 ちょっとわからないんですが、インスタンス変数かどうかは関係ありますよね?インスタンス変数以外に参照型も代入コピーにならないよってだけですよね。と思ったんですが。 root_jpさんがおっしゃるのは、インスタンス変数以外に参照型も代入元に影響しますよっていうことですよね?と認識したんですが。またc#まで勉強するのだるいと思ったんですが、教えていただいた型のreference見てると面白いですね。ありがとうございました。
guest

0

コードの続きを見ない限りなんとも言えません。
質問者と同意見で下記の理由が考えられます。

  • 変数の加工:destinationに手を加えず、destinationをもとにした値を生成し、利用したいため。
  • 説明:XZ要素のみしか使っていけないことを明示するため。

投稿2017/10/26 13:42

K_S_

総合スコア419

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

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

MakuraMakura

2017/10/26 14:38

回答ありがとうございます。コード全部載せるのは長いので躊躇してしまいました。一見したところはそのあとreadonlyでデータを利用してるようでした。 質問の意図的にはkondosatoruさんの方がベストアンサーなのかも?と思っ他のにベストアンサーにしなくてすみません。 独学の初心者なので本当に回答助かります。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問