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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

Q&A

解決済

1回答

4358閲覧

Cubeの4つの頂点の座標を取得したい

qoooooo

総合スコア13

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

0グッド

1クリップ

投稿2017/12/27 09:10

###前提・実現したいこと
すでに配置されている、回転した4つのCubeの座標を取得したいです

###発生している問題・エラーメッセージ
明らかに異なる座標が取得されてしまいます

###該当のソースコード

Javascript

1 2//functionの一部になります 3 var Unit : GameObject;//CubeをInspectorバーで設定しています 4 var theta : float; 5 var Cx : float; 6 var Cz : float; 7 var Coordinatex = new float[16]; 8 var Coordinatez = new float[16]; 9 10 for(var i = 0; i <4 ; i++) 11 { 12 Unit = Units[i]; 13 theta = -Unit.transform.eulerAngles.y* Mathf.Deg2Rad; 14 Cx = Unit.transform.position.x; 15 Cz = Unit.transform.position.z; 16 17 Coordinatex[i*4] = Mathf.Cos(theta)-Mathf.Sin(theta)+Cx; //URx 18 Coordinatex[i*4+1] = -Mathf.Cos(theta)-Mathf.Sin(theta)+Cx; //ULx 19 Coordinatex[i*4+2] = -Mathf.Cos(theta)+Mathf.Sin(theta)+Cx; //LLx 20 Coordinatex[i*4+3] = Mathf.Cos(theta)+Mathf.Sin(theta)+Cx; //LRx 21 22 Coordinatez[i*4] = Mathf.Sin(theta)+Mathf.Cos(theta)+Cz; 23 Coordinatez[i*4+1] = -Mathf.Sin(theta)+Mathf.Cos(theta)+Cz; 24 Coordinatez[i*4+2] = -Mathf.Sin(theta)-Mathf.Cos(theta)+Cz; 25 Coordinatez[i*4+3] = Mathf.Sin(theta)-Mathf.Cos(theta)+Cz; 26 27 }

###試したこと
meshも試しましたがいまいち書き方がわかりません

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

sakura_hana

2017/12/27 13:19

Unitsの中に4つのCubeオブジェクト(既に配置・回転済み)が入っていて、そのオブジェクトの位置座標が取得したいということでしょうか?(それとも4つのCubeの各頂点の座標が取りたいのでしょうか?)
qoooooo

2017/12/27 14:36

4つのCubeの各頂点の座標が取りたいということです。わかりにくくて申し訳ないです。
guest

回答1

0

ベストアンサー

mesh.verticesが各頂点の座標の配列です。
とりあえず動く形にするなら以下のような感じでしょうか。

Javascript

1for(var i = 0; i < 4 ; i++) 2{ 3 Unit = Units[i]; 4 Mesh mesh = Unit.GetComponent(MeshFilter).mesh; 5 for(var j = 0; j < mesh.vertices.Length ; j++) { 6 if (j < 4) { 7 Coordinatex[i*4+j] = mesh.vertices[j]; 8 } else { 9 Coordinatez[i*4+j-4] = mesh.vertices[j]; 10 } 11 } 12}

※どこがどの頂点なのかはモデルによると思いますので適宜確認・調整してください。
※UnityのJavascriptは現在Legacy扱いです。今学習を進めるならC#にすることをオススメします。

投稿2017/12/28 00:11

sakura_hana

総合スコア11427

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

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

qoooooo

2018/01/04 07:49

meshにどのような順で要素が入れられるのかがわかりません。 また、1つの立方体に対してmesh.vartices.Lengthが24になるのは、8頂点×(xyz座標)という意味なのでしょうか?
qoooooo

2018/01/04 08:27

すみません、ややこしくなってしまったので質問を新しく投稿させていただきました。もし回答していただけるのであれば、そちらでお願いいたします。
sakura_hana

2018/01/05 04:48

別質問(https://teratail.com/questions/107551)の方でも説明されていますが、メッシュの頂点はモデルごとに違います。 見た目はただの立方体でも作り方によって8頂点だったり24頂点だったりします。 (UnityデフォルトのCubeは24頂点のようですね) 計算負荷を下げたいなら3Dソフト(Blenderやメタセコイア等の無料ソフトでOK)で8頂点の立方体モデルを作ってインポートした方が早いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問