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

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

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

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

Unity

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

Q&A

解決済

1回答

951閲覧

Unityで使うC#の勉強方法について

sho0

総合スコア6

C#

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

Unity

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

0グッド

0クリップ

投稿2020/05/22 09:01

前提・実現したいこと

Unityで使うC#の勉強方法について

###ここに質問の内容を詳しく書いてください。

Unityでゲームを作りたくて現在「 UnityではじめるC# 基礎編」という本で勉強しております。
この本は__①変数と型、メソッド、条件分岐、繰り返し処理、配列変数__
の書き方がはじめに記載されており、
その後に実際にユニティを立ち上げ、スクリプトを記載して動かしていきましょうという内容です。
しかし私の認識が悪いのか、実際にユニティを立ち上げ、スクリプトに記載する内容がはじめに勉強した(①)を勉強しただけでは出来ないような気がします。
スクリプトの中身は下記に記載しております。

また規則性があるのであれば教えて頂きたいです。
例(変数の規則性であれば、型 変数名 = 型により変わる;)

わからないなりに何通りか考えてみたのですが

例えばvoid Update()の一行目のTransform tr = this.GetComponent<Transform>();ですが
クラス名 メゾット名 = クラス名.メゾット名<>();
で構成されているのか?
それであれば、メゾットには()が最後に必要では無いのか?
またそもそもメゾット=メゾットの構成がよくわからない。

もう一つのパターンが
Transform tr = this.GetComponent<Transform>();は
型 変数名 = クラス名.メゾット名<>();
で構成されている。
しかしそれではTransformなんて型は聞いたことが無いし、またそもそも変数=メゾットの構成もよくわかりません。

発生している問題・エラーメッセージ

using System.Collections; using System.Collections.Generic; using UnityEngine; public class tesu : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { Transform tr = this.GetComponent<Transform>(); Vector3 Pos = tr.position; pos.x = Random.Range (-2.0f, 2.0f); pos.y = Random.Range (-2.0f, 2.0f); tr.position = pos; } }

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

BluOxy

2020/05/22 09:49

細かいですが、Methodなのでメソッドですね。
sho0

2020/05/23 06:23

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

回答1

0

ベストアンサー

私はその本を持っていないという前提で回答します。ざっくりとした概要だけの解説です。

Transform tr = this.GetComponent<Transform>();
型 変数名 = インスタンス.メゾット名<型>();が正解です。

参考書の他に、公式リファレンスも利用しましょう。例えば以下はTransformのページです。
UnityEngine.Transform - Unity スクリプトリファレンス
ここを見ると、Transformとは(あなたが知らないだけで)Unityで用意されている「オブジェクトの位置、回転、スケールを扱うクラス」だと分かります。
更にこのクラスはワールド座標位置であるpositionという変数などを持っていることも分かります。

同様にGetComponentのページも見てみましょう。
Component-GetComponent - Unity スクリプトリファレンス
ここを見ると、「ゲームオブジェクトに type がアタッチされている場合は type のタイプを使用してコンポーネントを返します。ない場合は null です」と書かれているので、そういうメソッドなのだと分かります。
更にpublic T GetComponent ();と「ジェネリック版。詳細については Generic Functions を参照してください。」という説明があります。このリンク先を見ると、<T>←この書き方について説明があります。

これを踏まえると、Transform tr = this.GetComponent<Transform>();
「自分のGameObjectに付いているTransformコンポーネントを取得して、Transform型の変数trに代入するよ」
という意味になります。
(同じ要領で他のクラス(Vector3Random)やメソッド(Range)も調べると理解が進むかと思います)

何故そんなことをするかというと、Transformクラスは前述の通りオブジェクトの位置などを司っている為、その位置を書き換えるとオブジェクトが移動します。
とりあえず試しにオブジェクトを動かしてみようか、ということですね。

つまり例示のコードはこういう意味になります。
1行目:Transformを取得
2行目:変数Posに自身のオブジェクトの現在地を代入
3行目:Posのx値に、-2〜2までのランダムな値を代入
4行目:Posのy値に、-2〜2までのランダムな値を代入
5行目:自身のオブジェクトの位置をPosにする(つまりPosの位置に移動する)
このコードでも(大分奇天烈な動きになるとは思いますが恐らくは)正常に動作します。

ちなみにthisは「自分自身のインスタンス(tesu)」を指します。大抵省略可能です。
インスタンスとは何かというのは話が長くなるので別途調べてください。


もし今の参考書を全部学んでまだ分からないことがあると思ったら別の資料を調べてみてください。
本当に今まで何のプログラムも書いたことが無いというレベルなら下記ページがオススメです。
UnityでC#プログラミングの基礎を学習する - Qiita
(若干情報古いですが基本は変わらないと思います)

投稿2020/05/22 09:45

編集2020/05/22 09:47
sakura_hana

総合スコア11425

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

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

sho0

2020/05/23 06:23

回答頂きありがとうございます。 TransformがクラスでGetComponentがメソッドというのはhttps://docs.unity3d.com/ja/current/ScriptReference/Transform.html https://docs.unity3d.com/ja/current/ScriptReference/Component.GetComponent.html の画面ではどこで見分けているのですか? 一単語のみであればクラス、【.】がついた後の物はメソッドという認識でしょうか?
sakura_hana

2020/05/25 00:10

>一単語のみであればクラス、【.】がついた後の物はメソッドという認識でしょうか? 概ねその認識でもいいと思いますが、クラスの場合は「class in 〜」、メソッドの場合は定義(「public Component GetComponent (Type type);」など)が書かれているのでそこでも見分け可能です。 あと本文を見れば、クラスには変数や関数のリストがあるのでそちらでも分かるかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問