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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

2回答

1970閲覧

Vector3.Normalizeメソッドは、拡張メソッドですか?

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

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

Unity

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

2グッド

0クリップ

投稿2019/03/20 03:21

編集2019/03/20 03:22

###疑問点
①疑問
今学んでいるテキストのコードで、
「Vector3のインスタンス.Normalize();」
とありました。
Vector3.Normalizeメソッドについて調べると
Vector3.Normalizeメソッドの公式リンク
Vector3.Normalizeメソッドはスタティックメソッドなので、
インスタンス名.Normalize()という使い方はできないはずですが、
「Vector3のインスタンス.Normalize();」とできるのは
Nomalizeメソッドが拡張メソッドだからでしょうか?

②疑問
Normalizeメソッドが拡張メソッドだとすると、
Normalizeメソッドの第一引数にthisキーワードをつけて定義するはずですが
それが公式リンクにはありません。
これは省略しているということでしょうか?
またどうやって拡張メソッドかどうか見分けることができるのでしょうか?

③疑問
Vector3.Normalizeに関係ないのですが、
今学んでいるテキストでは、プレイヤーのポジションを得るときに、
プレイヤー.transform.localPosition としています。
プレイヤーはどのオブジェクトとも親子関係になっていません。
親子関係なしのときは、localPositionとpositionは同じ意味になりますか?
なぜプレイヤー.transform.positionではないのでしょうか?

今までNormalize関数について意識せずにつかっていたのですが、
公式リンクを見ると、staticメソッドなのに気づいて使い方があっているかわからなくなったので質問しました。

ご回答宜しくお願いいたします。

### 該当のソースコード C# playerPos はプレイヤーのtransform.localPositionです。 Enemyスクリプトの一部↓  var direction = playerPos - transform.localPosition;  direction.Normalize();  transform.localPosition += direction * m_speed;
papinianus, BluOxy👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

1.2.について
確かに公式ではわからないですね。

レファレンスソースを見るとNormalizeは2つあり、一つはstaticでVector3を引数にとるもの。もう一つはインスタンスメソッドで引数を取らないもの。があります。

拡張メソッドならthisキーワードが必要というのはそのとおりですが、公式スクリプティングAPIは一覧で引数を省略している仕組み上同じ名前のメソッドが併合されたのでしょう。
見極めかたはthisが書いてあるか、しかないですが、この感じの資料だとリファレンスソースを見るしかないかも

投稿2019/03/20 04:09

papinianus

総合スコア12705

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

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

papinianus

2019/03/20 04:10

肝心なこと書いてなかった。拡張メソッドではないです
Zuishin

2019/03/20 04:34

クラスの持つメソッドが公式ドキュメントから落ちてるわけですね。 これはひどい。
退会済みユーザー

退会済みユーザー

2019/03/20 04:51

レファレンスソースというものを初めて知りました。 いつも使っている関数の中身を初めて知って驚いています。 Normalizedメソッドは拡張メソッドではないのを理解しました! ご回答ありがとうございました。
guest

0

①②
Visual Studio で該当コードを開いて F12 を押すと定義へジャンプできます。
これでどこで定義されているか調べてください。
「今学んでいるテキスト」にどう書かれているのか不明なのでこちらでは確かめられません。


Transform.localPosition

Transform に親がいない場合は、値は Transform.position と同じになります。

同じですね。

投稿2019/03/20 04:02

Zuishin

総合スコア28660

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

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

退会済みユーザー

退会済みユーザー

2019/03/20 04:58 編集

NormalizeをハイライトしてF12を押すとVector3の定義がズラッとでてきました。 Normalizeインスタンスメソッドがありました。 質問してなかったらこのままNormalizeメソッドは拡張メソッドだと勘違いしつづけるところでした。 F12で定義にジャンプできるのを初めてしりました。ありがとうございます。 Transform.localPositionについては、完全に見落としていました。すみません。 ご回答ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問