Unityで回転盤のようなものをドラッグで回転させる方法を考えていたのですが、UnityのCommunityでまさにこれだ!という回答をみつけました。
[javascript]
// 他のオブジェクトとのリンク:
var dummyPointer : Transform; // 空のゲームオブジェクトだけでいい (見えないけどね)
var disc : Transform; // メインの回転盤
// Variables:
private var dummyOffset : float;
private var discOffset : float;
// A Flag:
private var mouseIsUp : boolean = true;
// Raycast SetUp:
var hit : RaycastHit;
function Update () {
// マウス押したか:
if (Input.GetMouseButton(0)){
// 判定のRaycast発射:
var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
// 光線が特定の名前のオブジェクトにあたった:
if (Physics.Raycast (ray, hit) && (hit.transform.name == "hayami_base")){
// 常にダミーはあたった箇所を向く:
dummyPointer.LookAt(hit.point);
// マウスを押したときの初期処理:
if(mouseIsUp){
// ダミーとメイン回転盤の角度を覚えておく:
dummyOffset = dummyPointer.eulerAngles.y;
discOffset = disc.eulerAngles.y;
// 最初のクリックでなくなる:
mouseIsUp = false;
}else{
// 最初のクリックでない (押し続け)
// ダミーから回転盤の回転をセットすることができる:
disc.eulerAngles.y = discOffset + (dummyPointer.eulerAngles.y – dummyOffset);
}
}
}else if (!mouseIsUp){
// クリックが終わったらからフラグも戻す:
mouseIsUp = true;
}
}
[/javascript]
このスクリプトをMainCameraにアタッチして、dummyPointerに空のGameObjectを、discに回転させたい物体をいれ、hit.transform.name == “hayami_base”と判定しているところにはクリックして回転させるオブジェクトの名前を入れればすぐ使えるようになります。
ダミーのオブジェクトをLookAtでクリックしてる点の方向に向かせ、その角度を使用するというのはまさに目から鱗でした。LookAtという便利関数を使うために、間にオブジェクトをかませることでややこしい数学とか使わなくてもいけるもんなんですね!
あとはこれをタッチポインタ向けに書き換えればいいだけ。