Q&A
やりたいこと
Unityにて、prefab化したオブジェクトを伸縮して配置させ、かつ
次のマウスクリックで新たなオブジェクトを配置させたいです。
操作感としては以下の様にしたいと思っています。
- マウスクリック位置に3D平面上に沿ったprefabを生成
- マウスドラッグで3D平面に沿って1.のprefabを引き伸ばす
- マウスアップで引き伸ばした1.のprefabを配置
- 次のマウスクリックで新たなprefabを生成後
1.の操作に戻る
■参考図
問題点
以下の二つの解説を参考にしているのですが、
マウスドラッグで始点と終点にRayを当て続ける方法と
prefab化したオブジェクトを伸縮させる方法が分からず
ずっと躓いております…。どうぞご教授お願いいたします。
###参考にしたいコード
クリックした位置にオブジェクトを生成
https://futabazemi.net/notes/unity-raycast_click/
C#
1public class ClickPoint : MonoBehaviour 2{ 3 public GameObject cube; 4 5 void Update () { 6 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 7 RaycastHit hit = new RaycastHit(); 8 if (Input.GetMouseButtonDown(0)) 9 { 10 if (Physics.Raycast(ray, out hit)) 11 { 12 Instantiate(cube, hit.point, Quaternion.identity); 13 } 14 } 15 } 16 17}
マウスの位置に向かって伸縮するオブジェクト
https://teratail.com/questions/35150
C#
1private Vector3 m_mouseDownPosition = Vector3.zero; 2 3void OnMouseDown() 4{ 5 // マウスクリックした際の初期位置を保存。 6 m_mouseDownPosition = transform.position; 7} 8 9void OnMouseDrag() 10{ 11 // マウスクリックした場所をワールド座標に変化して、 12 // 初期位置とマウスクリック位置の中間にオブジェクトを配置。 13 // オブジェクトのスケールを初期位置とマウスクリックの距離に。 14 // オブジェクトの向きをマウスクリックした位置に。 15 16 Vector3 inputPosition = new Vector3( Input.mousePosition.x, Input.mousePosition.y, 9.5f ); 17 Vector3 mousePos = Camera.main.ScreenToWorldPoint( inputPosition ); 18 Vector3 mediumPos = ( mousePos - m_mouseDownPosition ) / 2.0f; 19 float dist = Vector3.Distance( mousePos, m_mouseDownPosition ); 20 21 transform.position = mediumPos; 22 transform.localScale = new Vector3( 1.0f, 1.0f, dist ); 23 transform.LookAt( mousePos ); 24} 25 26void OnMouseUp() 27{ 28 // 位置、回転、スケールを元に戻す。 29 transform.position = m_mouseDownPosition; 30 transform.rotation = Quaternion.identity; 31 transform.localScale = Vector3.one; 32}
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/04/27 11:59
2022/04/28 09:39
2022/04/28 10:50
2022/04/29 11:42