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

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

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

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

Unity

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

Q&A

解決済

2回答

6443閲覧

unityでオブジェクトをクリックしたときに移動させたい

DiG5219

総合スコア26

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2016/04/07 17:11

編集2016/04/08 14:33

unity初心者です

キューブを自動でランダムに生成し、落ちてくるようにしました。
そのキューブをマウスでスリックされたときにクリックされた場所に移動させたいと思っています。

if (Input.GetMouseButtonDown(0))
{
Vector3 pos1 = Input.mousePosition;
pos1.z = 30;
Vector3 pos2 = Camera.main.ScreenToWorldPoint(pos1);
pos2.y = transform.position.y;
transform.position = pos2;

自動生成され、落ちてくるキューブに上のスクリプトを適用することで
移動はできるようになったのですが、z軸の方向への移動ができません。

z=30で固定しているからできないのは当たり前だと思い、
そこの文を消して実行すると、クリックしたとたんに消えてしまいました。
y軸はクリックされても移動しないで落下を阻害しないようにしています。

どうすれば、落下中にクリックした場所への移動ができるようになるんでしょうか?
ご教授お願いします。

回答ありがとうございます。追記です。

他の方法を試そうと思い少し挑戦してみました。

動かしたいキューブとは別に、パネルのようなものを用意して
そのパネルをクリックしたときのy軸をキューブのz軸に、
パネルをクリックしたときのx軸を同じくキューブのx軸に対して動かせないかと思っています。

前回はキューブはプレハブ化してクリックされたときの動きはキューブにスクリプトとして適用しており、それをGameControllerというスクリプトで自動生成していました。

今回新しくパネルを作ってそれにスクリプトを作ってクリックされたときにキューブを取得して動かそうと思い調べたのですが、いまいちコードの書き方がわかりません。

パネルにスクリプトを適用してそこからクリックを検出してy軸x軸をキューブのz軸x軸にしてキューブを動かすのがいいのか、
キューブにスクリプトを適用してパネルがクリックされたことを検出してクリックされたy軸x軸を自分のz軸x軸に変えて動かす方がいいんでしょうか?

あと、パネルのy軸をそのままキューブのz軸にするとなると
パネルのy軸(xyzすべて)の基準も変えなければいけないような気がします。

調べたところRayやTagでなんとかできそうだったのですが、
上手くできず進展しませんでした。

再度、ご教授いただけるとありがたいです。

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

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

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

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

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

guest

回答2

0

z軸の指定無し時に画面から消えるとのことですので、
Camera.main.ScreenToWorldPointによって得られるpos2.z(カメラのz位置)に
キューブが移動してしまったことでカメラがキューブの内側から撮影することとなり
ポリゴン内側の描画がされないことから消えてしまったように見えることが原因ではないでしょうか?

落下中にクリックした場所への移動ができるようになるんでしょうか?

クリック位置はスクリーン上の(x、y)で、(z)はカメラのz位置になるので、
不都合があるようでしたら自分で指定する必要があります。

C#

1pos2.y = transform.position.y; 2pos2.z = transform.position.z; // 追加

と指定すればキューブのz軸はクリック前と変化なく配置されるはずです。

投稿2016/04/08 04:39

buibui80

総合スコア1033

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

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

0

ベストアンサー

3D空間上のクリックはちょっとめんどくさい処理が必要です。
言われている通り、Z軸に対しての情報がないのが原因ですね。(画面は2次元なので)

なので、なんとかしてZ軸の値を算出しないとならないことになります。

考え方としては、今求めているマウスの位置から3次元の情報に変換したあと、その位置からまっすぐにレイを飛ばし、そのレイが接触した位置が求めたい場所になると思います。
イメージとしてはレーザーポインタで窓の外から部屋の中を指し示す感じです。
(レイの方向はカメラの向いている方向(つまりforward)を設定すれば大丈夫です)

レイが接触した位置はレイオブジェクトから取れるのでそれをキューブの位置に適用してあげれば実現できると思います。

「Physics.Raycast」のドキュメント

投稿2016/04/08 04:37

edo_m18

総合スコア2283

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問