暇つぶし2chat GAMEDEV - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト1005:名前は開発中のものです。 15/04/15 17:38:49.53 A545dbfE.net 間違って.scの方に貼っちまった...こっちにもレスしとく >>946-947 質問がよくわからないのでエスパーすると、関数名がUnityEngine.EventSystemsのハンドラなのでUIの話だと推定する。で、座標計算がおかしいのはルートCanvasのRenderModeが[Screen Space - Overlay]なのに座標変換をCamera.mainでやってるからだな多分。 まず座標系の変換はRectTransformUtility使うべし。第一引数のCameraは[Screen Space - Overlay]ならnull、それ以外なら所属するCanvasのworldCameraを使うこと。 以下書き直してみたサンプル。 public Vector3 prevPos; public float fitHeight = 120;//フィット先指定は面倒なので簡略化 public void OnBeginDrag(PointerEventData ped) { //開始時の座標をワールド座標で保持 prevPos = RectTransformUtility.WorldToScreenPoint(null,ped.position); } public void OnDrag(PointerEventData ped) { //現在の座標をワールド座標で取得 Vector3 current = RectTransformUtility.WorldToScreenPoint(null,ped.position); Vector3 movement = current - prevPos;//移動量は前の座標と現在の差分 Vector3 moveTo = transform.position; moveTo.y += movement.y;//Y移動量を加える transform.position = moveTo; //現在の座標をワールド座標で保持 prevPos = current; } public void OnEndDrag(PointerEventData ped) { //ピクセルで指定した場合のスクリーン座標で考える Vector3 setpos = RectTransformUtility.WorldToScreenPoint(null,transform.position); //適宜フィット先を決める setpos.y = Mathf.Round (setpos.y/fitHeight)*fitHeight; transform.position = RectTransformUtility.WorldToScreenPoint (null, setpos); } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch