実現したいこと
拡縮、回転するものは9スライスのスプライト
- マウスクリックで始点を決める
- マウスドラッグでスプライトの右上or左上を操作
現在
マウスクリックでの始点の決定はRayを飛ばして決めることに成功しています。
ドラッグ操作での回転がうまくいっていません。
拡縮はSpriteRenderer.sizeでwidthとheightを設定しています。
また、9スライスがLookAtを使うと地面と垂直になってしまうので空のオブジェクトにアタッチして空のオブジェクトを回転させることで対応しています。
C#
1// メンバー変数 2Ray ray; 3RaycastHit hit; 4 5void Update() 6{ 7ray = myCamera.ScreenPointToRay(Input.mousePosition); 8Physics.Raycast(ray, out hit) 9 10// タイルの回転(スプライトがマウスのある方に向くようにしたけどなんか違う) 11//var qrot = Quaternion.LookRotation(hit.point - tile.transform.position); 12//var point = hit.point - tile.transform.position; 13//point.y = 0; 14//var lockAt = Quaternion.LookRotation(point,Vector3.up); 15//tile.transform.rotation = lockAt; 16//tile.transform.rotation = Quaternion.AngleAxis(10, tile.transform.position); 17 18 19// 拡縮用 20var unit = army.GetComponent<Army>().GetUnit(i); 21int max = unit.SoldiersNum(); 22int x,y = 0; 23var pos = farstpos - hit.point; 24SpriteRenderer sprite = tile.GetComponentInChildren<SpriteRenderer>(); 25 26// 拡縮操作 27if (pos.x < 0&& pos.x<pos.z) 28{ 29 x = (int)pos.x * -1; 30 if (x >= max) x = max; 31 else if (x < 1) x = 1; 32 y = max / x; 33} 34else if (pos.x > 0 && pos.x > pos.z) 35{ 36 x = (int)pos.x; 37 if (x >= max) x = max; 38 else if (x < 1) x = 1; 39 y = max / x; 40} 41else 42{ 43 if (pos.z > 0) y = (int)pos.z; 44 else y = (int)pos.z * -1; 45 46 if (y >= max) y = max; 47 else if (y < 1) y = 1; 48 49 x = max / y; 50} 51 sprite .size = new Vector2(x, y); 52 // ユニットに兵士の配置範囲を設定 53 unit.SetSoldiersRange(new Vector2(x, y)); 54}
模索
現状Transform.RotateAroundで解決しようとしてangleの求め方に困り断念
Quaternion.AngleAxisも上記の理由で断念
手詰まりの状態で解決策のヒントでも得られればと思い質問しました。
すみませんが、回答よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。