###実装したい機能
マウスの位置に向かって伸縮するオブジェクト
他にも処理速度などに関するアドバイスがあればよろしくお願いします
###実装した物
x座標とz座標のみで描画しカメラはy軸上で固定の擬似的な2D
回転軸に空のゲームオブジェクトを用意、回転させたい物の親にする
クリックした地点にオブジェクトが親ごと移動
Vector3.Distanceを使用し、オブジェクトが生成された地点とマウスの位置の距離distを出す
オブジェクトの元のサイズにdistを半分にした物を足した分だけ伸びる
その際オブジェクトをdistの半分移動させる *
マウスの位置からオブジェクトの位置を元に角度を算出
親をそれに合わせて回転させる
###問題点
・最初にマウスを上下以外に向かって伸ばす
・伸ばしたオブジェクトを縮める
上記の二つの行動をした際にオブジェクトの位置と軸がずれる
また、最初に下へ伸ばした場合、マウスの逆方向へ伸びるようになる
*が原因ではないかと思っていますがどう修正すべきかがわかりません
###コード
public GameObject bar;//オブジェクト public GameObject pivot;//回転軸、barの親、空のゲームオブジェクト private Vector3 mousePos; private Vector3 barPos; private Vector3 objDirection;//マウスとオブジェクトの角度 private Vector3 newSca;//伸縮時の新しいサイズ private Vector3 newPos;//伸縮時に移動する private float dist; //オブジェクトとマウスの距離 void OnMouseDown() { bar.transform.localScale = new Vector3 (0.25f, 0.25f, 0.25f); newSca = bar.transform.localScale; if (!bar.activeInHierarchy) { bar.gameObject.SetActive (true); } barPos = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 9.5f)); pivot.transform.position = barPos; } void OnMouseDrag() { mousePos = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 9.5f)); dist = Vector3.Distance (barPos, mousePos); newSca.y = 0.25f + dist/2; newPos = new Vector3 (barPos.x, barPos.y, barPos.z + dist/2); objDirection = mousePos - bar.transform.position; pivot.transform.LookAt(bar.transform.position + new Vector3(objDirection.x, 90, objDirection.z)); if (dist < 1.25f) { bar.transform.position = (newPos); bar.transform.localScale = newSca; } }

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/05/18 01:08
退会済みユーザー
2016/05/18 15:38
2016/05/19 12:53
退会済みユーザー
2016/05/19 13:22
退会済みユーザー
2016/05/20 19:39
退会済みユーザー
2016/05/20 20:34 編集