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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

3回答

14842閲覧

Unity C#でthisの使い方がよくわからない

torano

総合スコア92

C#

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

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2016/08/14 10:12

編集2016/08/14 10:18

環境 Unity5.4 mono4.4(C#6?)

以下はゲームオブジェクトを回転or移動させるスクリプトです。

using UnityEngine; using System.Collections; public class myscript : MonoBehaviour { private float num; void Start () { num = 0.1f; } void Update () { Vector3 v = this.transform.position; v.z += num; this.transform.position = v; //ここ } }
using UnityEngine; using System.Collections; public class myscript : MonoBehaviour { private float num; void Start () { num = 1.0f; } void Update () { Quaternion q = Quaternion.Euler(num, num, num); transform.rotation = q; //ここ num++; } }

最初のスクリプトではthisがあるのに次のスクリプトではthisがありません。

thisというのはそのクラス(MonoBehaviourを継承しているmyscript?)のインスタンス自身ですよね?

両方のスクリプトでthisを加えたり無くしたりしてみましたが、動作も変わってないみたいで、どんな意味があるのかよくわからないです。
この場合thisはあってもなくてもいいのでしょうか?

その場合、どんな時にthisが必要になるのでしょうか?

ちなみに、以下のサイトを参考に学習していました。
C#ではじめるUnityプログラミング入門

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

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

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

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

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

guest

回答3

0

こんにちは。

flied_onionさんの言う通り、有ってもなくてもよいです。
でも、numには付けてないのに、transformにはつけるとは珍しいです。
もしかすると、基底クラスのメンバ変数なので自分のクラスでは定義されておらずメンバ変数であることを見落としやすいですから、メンバ変数であることを明確に示すためにthisを付けているのかも知れません。

投稿2016/08/14 13:16

Chironian

総合スコア23272

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

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

torano

2016/08/16 03:32

なるほど、確かにそういう意図があったのかもしれません。ありがとうございます。
guest

0

ベストアンサー

その場合はあっても無くても大丈夫です。今の理解であっています。

仮にこういう内容だった場合

c#

1public class myscript : MonoBehaviour { 2 private float num; 3 4 void Start () { 5 num = 1.0f; 6 } 7 8 void Update (Transform transform) { // 引数で同じ名前で受け取っている 9 Quaternion q = Quaternion.Euler(num, num, num); 10 transform.rotation = q; // 引数が使われる 11 this.transform.rotation = q; // myscriptのメンバーが使われる 12 num++; 13 } 14}

「このインスタンスの」を明示するのために必要となります。
メンバ変数の名前と競合していない(引数やローカル変数とかぶっていない)場合、thisは付けても付けてなくても同じです。
インテリセンス出すために書いてる人もいましたが…。
理由が無ければ付けない事が多いと思います。

Javaですが、最近似たような質問がでてますので、こちらも参考になると思います。
Javaでthisが必要な場合

投稿2016/08/14 13:10

flied_onion

総合スコア2604

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

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

torano

2016/08/16 03:31

サンプルがあってわかりやすかったです!ありがとうございます!
guest

0

どちらでもOKです。

thisは「このクラスのメンバである」とういうことを明示しているだけです。

たとえば、コンストラクタ等で引数を受け取る場合、
メンバ変数 ( フィールド ) に int id があり、
引数のひとつに int id がある場合、

どちらなのかわからなくなりますね。

なので、
メンバの方にthisをつけて明示すれば...

という感じです。

あと、一部例外があります。

コピーコンストラクタとかみたいに、同じクラスから生成されたオブジェクトを引き受けて...
自分のメンバと 相手のメンバをコピー等の操作を行う場合、どちらなのかわからなくなります。
なので、this等で明示っていう感じ。

投稿2016/08/15 00:45

BeatStar

総合スコア4958

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

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

torano

2016/08/16 03:32

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問