暇つぶし2chat GAMEDEV
- 暇つぶし2ch1007:名前は開発中のものです。
15/04/15 18:51:57.01 A545dbfE.net
>>959
そこも間違ってるだろうが、スクリーン原点が違っても(949,-184,-4926)にぶっ飛ぶことはないだろ?だから座標計算間違ってるとエスパーしたんだ
それはそれとして>>958がめちゃめちゃ間違ってたので訂正しとく。ついでにRenderMode [Screen Space - Camera]に対応しといた。
public Vector3 prevPos;
public float fitHeight = 120;//フィット先指定は面倒なので簡略化(このピクセル数ごとにスナップ)
public Canvas canvas;//カメラ取得のためのキャンバス
public Camera uiCamera{get{return canvas==null||canvas.renderMode == RenderMode.ScreenSpaceOverlay ? null : canvas.worldCamera;}}
public void OnBeginDrag(PointerEventData ped) {
RectTransformUtility.ScreenPointToWorldPointInRectangle ((RectTransform)transform.parent,ped.position,uiCamera,out prevPos);//開始時の座標をワールド座標で保持
}
public void OnDrag(PointerEventData ped) {
Vector3 current = new Vector3();
RectTransformUtility.ScreenPointToWorldPointInRectangle ((RectTransform)transform.parent,ped.position,uiCamera,out current);//現在の座標をワールド座標で取得
Vector3 movement = current - prevPos;//移動量は前の座標と現在の差分
Vector3 moveTo = transform.position;
moveTo.y += movement.y*transform.parent.lossyScale.y;//Y移動量を加える
transform.position = moveTo;
prevPos = current;//現在の座標をワールド座標で保持
}
public void OnEndDrag(PointerEventData ped) {
Vector3 setpos = RectTransformUtility.WorldToScreenPoint(uiCamera,transform.position);//スクリーン座標で考える
setpos.y = Mathf.Round (setpos.y/(fitHeight*transform.parent.lossyScale.y))*(fitHeight*transform.parent.lossyScale.y);//適宜フィット先を決める
Vector3 fitPos = setpos;
RectTransformUtility.ScreenPointToWorldPointInRectangle ((RectTransform)transform.parent,setpos,uiCamera,out fitPos);
transform.position = fitPos;
}


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch