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

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

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

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

Q&A

解決済

1回答

16108閲覧

Instantiateで生成したものが必ず90度回転している

jum6948

総合スコア20

Unity3D

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

0グッド

1クリップ

投稿2017/05/30 03:09

###前提・実現したいこと
モンスターを倒したらモンスターが消えた場所にコインを出したい。
Unityの3Dです。

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

自分の持っている知識では、どうやっても「Instantiate」で生成したコインが90度回転しています。

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

C#でやっています。

1 void OnDestroy() 2 { 3 Instantiate(MonsterDead, transform.position, transform.rotation); 4 5 //Quaternion rote = new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); 6 Instantiate(Coins, transform.position, Quaternion.identity); 7 8 //GameObject obj = Instantiate(Coins) as GameObject; 9 //obj.transform.localPosition = Camera.main.ScreenToWorldPoint(obj.transform.localPosition); 10 11 12 //Instantiate(Coins, transform.position, Quaternion.identity); 13 14 //リザルト用のスコアを加算する 15 GameDirector.Score += 1000; 16 this.aud.PlayOneShot(this.DownSe); 17 }

###試したこと
Prefabの「Coins」自体の角度を触る。(90、45、180)
結果:90度回転していました。

Instantiate(Coins, transform.position, Quaternion.identity);
結果:90度回転していました。

Quaternion rote = new Quaternion(90.0f, 0.0f, 0.0f, 1.0f);
Instantiate(Coins, transform.position, Quaternion.identity);

Quaternion rote = new Quaternion(0.0f, 90.0f, 0.0f, 1.0f);
Instantiate(Coins, transform.position, Quaternion.identity);

Quaternion rote = new Quaternion(90.0f, 0.0f, 90.0f, 1.0f);
Instantiate(Coins, transform.position, Quaternion.identity);
結果:どれも、90度回転していました。

GameObject obj = Instantiate(Coins) as GameObject;
obj.transform.localPosition = Camera.main.ScreenToWorldPoint(obj.transform.localPosition);
結果:プレイヤーキャラの見えない所に出現する

###補足情報(言語/FW/ツール等のバージョンなど)
【環境】
Unity5.6.1f1 personal
win10
MicrosoftVisualStudio

【補足】
「Coins」は、空のゲームオブジェクトにコインを8枚、円陣を組んだものをグループ化して入れております。

コイン自体は、くるくると回転しています。
なので90度回転しているとどこかに勝手に移動します。

//コインくるくる
iTween.RotateTo(this.gameObject, iTween.Hash("z", 720, "looptype", "loop", "easetype", "linear", "delay", 0));

コインにはBoxColliderをつけています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Quaternion rote = new Quaternion(90.0f, 0.0f, 0.0f, 1.0f); Instantiate(Coins, transform.position, Quaternion.identity); Quaternion rote = new Quaternion(0.0f, 90.0f, 0.0f, 1.0f); Instantiate(Coins, transform.position, Quaternion.identity); Quaternion rote = new Quaternion(90.0f, 0.0f, 90.0f, 1.0f); Instantiate(Coins, transform.position, Quaternion.identity);

どっち方向に90度回転しているのか分かりませんが、この中のどれかで動くと思います。
ただ、roteが反映されていないので「Quaternion.identity」の部分を「rote」に変更してください。

また、「iTween.RotateTo」はデフォルトだとワールド座標に対する回転になります。
(=親オブジェクトがどんな方向を向いていようがワールド座標のZ軸で回転する)
iTween.RotateTo(this.gameObject, iTween.Hash("z", 720, "looptype", "loop", "easetype", "linear", "delay", 0, "islocal", true));
これでお試しください。

投稿2017/05/31 00:45

sakura_hana

総合スコア11425

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

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

jum6948

2017/05/31 05:59

roteの部分を直し iTween.RotateTo(this.gameObject, iTween.Hash("z", 720, "looptype", "loop", "easetype", "linear", "delay", 0, "islocal", true)); コインくるくるするコードを上記のものに変更して角度を変更すると、少しずつですがコインの並びに変化がありましたのでいろいろ試したら Quaternion rote = new Quaternion(0.0f, 90.0f, 90.0f, 1.0f); Instantiate(Coins, transform.position, rote); 上記の記述で無事に動作しました! 本当にありがとうございましたッ!
ozwk

2017/05/31 07:24

ちなみに奇跡的にクォータニオンの値が近くなってますが、 クォータニオンをコンストラクタで生成する際の引数は角度じゃないです。
sakura_hana

2017/06/01 01:10

>クォータニオンをコンストラクタで生成する際の引数は角度じゃないです。 すっかり忘れてました。コメントありがとうございます。 Quaternion rote = Quaternion.Euler(0.0f, 90.0f, 90.0f); こちらの方が良さそうですね。(Quaternion.Eulerは角度で指定が出来ます)
jum6948

2017/06/19 03:03

改訂版の方が、使いやすくていいですね。 そっちのほうをベストアンサーにしようとしましたが出来ませんでした。ごめんなさい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問