暇つぶし2chat GAMEDEV - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト1006:名前は開発中のものです。 15/04/15 17:52:35.19 biP3mVKw.net >>958 いや多分ね、スクリーンスペースをレフトアップ原点と勘違いしてるだけの話だと思うw スクリーンスペース指定のY座標がマイナスになってるんだから変換先も 画面内ではありえねぇよなぁ、っていうw 1007:名前は開発中のものです。 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; } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch