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

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

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

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

Unity

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

Q&A

解決済

2回答

11426閲覧

unityゲームエンジンのvector2とpositionの違いとは

blendegg

総合スコア81

C#

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

Unity

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

0グッド

0クリップ

投稿2019/05/06 02:38

#疑問
vector2というのはxとyの座標を格納して、ベクトル(位置や向き)をあらわすクラスかと思います。xとyはプロパティ(変数)ですよね。unityの場合、以下のようなコードで移動が実現できるかと思います。

position = new Vector2(10,10)

他のゲームエンジンでもそうなのですが、なぜこのような仕組みになっているんでしょうか?
単純にpositionの位置を変更する方法
positon.x +=10

#質問
1.なぜこのような仕組みなのか?
2.vector2の役割は何か?単に位置と向きを格納する箱でしかなく、移動機能などは持たないのか?
3.position = new Vector2(10,10)というコードは、position.xとposition.yプロパティに値をセットしていると考えてよいのか?
暇なときにでも教えてください(´・ω・

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

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

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

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

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

guest

回答2

0

厳密にいえばクラスではなく構造体です。クラスか構造体かは割りと重要なのでおぼえておきましょう

プログラミングする中でよくある単位を構造体化してしまうのは割りとよくある話です。vector2の場合は数学に疎い人でも使えるようにベクトル計算系のメソッドも内包していています

なぜこのようにするかといえば簡単な例だと「こいつ今どこにおるんや」となったときにfloatを2個返してもらわないといけなくなりますが、vector2があることでvector2を返してもらうだけの簡単な作業になります

その他座標を打ち込むメソッドを作ろうとしたときにhoge(float x, float y)hoge(Vector2 vec)だと後者のほうが規格が統一されていて後々妙な混乱を招かないという利点もあります(たまたまhoge2とか作ったときにxとyが逆とかになって滅茶苦茶になったりもしますので)

Vector2自体の移動となると乗算とかしてやれば座標とかは移動しますが、ゲーム画面に映っているものを移動させるような機能はないはずです。○を何秒かけて座標(A,B)に移動するみたいなメソッドに打ち込むのに使うだけです

投稿2019/05/06 21:19

DeadEndShoot666

総合スコア203

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

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

blendegg

2019/05/07 01:44

関数が使用できるものがクラス、メンバ変数のみが構造体という感じですかね 回答ありがとうございました
DeadEndShoot666

2019/05/07 12:34

そういう訳ではありません。構造体でも関数も使えます(昔のC++とかだと無理だったらしいですが)。言いたかったのは構造体でできている値はGCの負担になりにくかったりするので、気軽に使えるとかそういうことです
guest

0

ベストアンサー

1.なぜこのような仕組みなのか?

X座標、Y座標を別々の値として扱うよりも、ベクトルとして扱った方が値の管理や計算が楽だからです。

2.vector2の役割は何か?単に位置と向きを格納する箱でしかなく、移動機能などは持たないのか?

ベクトルは「向き」と「大きさ」を持ちます。
position は原点からのベクトルを「位置」として表しています。

Vector2 には、「移動」も含めて便利な機能が多数あります。
詳細はスクリプトリファレンスを読んでみてください。

スクリプトリファレンス>Vector2
https://docs.unity3d.com/ja/2017.4/ScriptReference/Vector2.html

3.position = new Vector2(10,10)というコードは、position.xとposition.yプロパティに値をセットしていると考えてよいのか?

厳密に言えば、Vector2 を代入しているので違いますが、そのニュアンスで捉えて大丈夫だと思います。

投稿2019/05/06 03:18

nskydiving

総合スコア6500

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

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

blendegg

2019/05/06 11:19

ありがとうございます もやもやが少しだけ取れました
stdio

2019/05/07 02:03 編集

言葉ってめんどくさいよね。 vector型とpoint型は本来は分けるべきですが、プログラム的には「要素が全く同じ構造体を2つも制作したいか?」という疑問が先に来ますね。 確かに差算と乗算と商算のオペレーターの違いの問題とか、掘り下げれば問題は色々出現します。 嫌なら描画エンジンをDirectX等を使用して自分で作ってみるのも手ですよ。私は作った事あるので、量は分かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問