やりたいこと
Unityにて、prefab化したオブジェクトを伸縮して配置させ、かつ
次のマウスクリックで新たなオブジェクトを配置させたいです。
操作感としては以下の様にしたいと思っています。
- マウスクリック位置に3D平面上に沿ったprefabを生成
- マウスドラッグで3D平面に沿って1.のprefabを引き伸ばす
- マウスアップで引き伸ばした1.のprefabを配置
- 次のマウスクリックで新たな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; }
まだ回答がついていません
会員登録して回答してみよう