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

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

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

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

Unity3D

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

解決済

Unity マウスドラッグで平面に沿ってプレハブを引き伸ばしたい

SHO1128
SHO1128

総合スコア91

C#

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

Unity3D

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

1回答

0評価

0クリップ

242閲覧

投稿2022/04/26 23:53

やりたいこと

Unityにて、prefab化したオブジェクトを伸縮して配置させ、かつ
次のマウスクリックで新たなオブジェクトを配置させたいです。
操作感としては以下の様にしたいと思っています。

  1. マウスクリック位置に3D平面上に沿ったprefabを生成
  2. マウスドラッグで3D平面に沿って1.のprefabを引き伸ばす
  3. マウスアップで引き伸ばした1.のprefabを配置
  4. 次のマウスクリックで新たなprefabを生成後

1.の操作に戻る

■参考図
イメージ説明

問題点

以下の二つの解説を参考にしているのですが、
マウスドラッグで始点と終点にRayを当て続ける方法と
prefab化したオブジェクトを伸縮させる方法が分からず
ずっと躓いております…。どうぞご教授お願いいたします。

###参考にしたいコード

クリックした位置にオブジェクトを生成
https://futabazemi.net/notes/unity-raycast_click/

C#

public class ClickPoint : MonoBehaviour { public GameObject cube; void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(ray, out hit)) { Instantiate(cube, hit.point, Quaternion.identity); } } } }

マウスの位置に向かって伸縮するオブジェクト
https://teratail.com/questions/35150

C#

private Vector3 m_mouseDownPosition = Vector3.zero; void OnMouseDown() { // マウスクリックした際の初期位置を保存。 m_mouseDownPosition = transform.position; } void OnMouseDrag() { // マウスクリックした場所をワールド座標に変化して、 // 初期位置とマウスクリック位置の中間にオブジェクトを配置。 // オブジェクトのスケールを初期位置とマウスクリックの距離に。 // オブジェクトの向きをマウスクリックした位置に。 Vector3 inputPosition = new Vector3( Input.mousePosition.x, Input.mousePosition.y, 9.5f ); Vector3 mousePos = Camera.main.ScreenToWorldPoint( inputPosition ); Vector3 mediumPos = ( mousePos - m_mouseDownPosition ) / 2.0f; float dist = Vector3.Distance( mousePos, m_mouseDownPosition ); transform.position = mediumPos; transform.localScale = new Vector3( 1.0f, 1.0f, dist ); transform.LookAt( mousePos ); } void OnMouseUp() { // 位置、回転、スケールを元に戻す。 transform.position = m_mouseDownPosition; transform.rotation = Quaternion.identity; transform.localScale = Vector3.one; }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Unity3D

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