(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

エディタを実行していない時にSceneView上でクリックした座標を取得したけどRetinaディスプレイだとズレた話【Unity】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2017.2.0f3


はじめに

以前、エディタを実行していない時にSceneView上でクリックした座標を取得する方法

をご紹介したのですが、


f:id:kan_kikuchi:20170511063204g:plain


実はこの方法、そのままRetinaディスプレイでやるとズレる事が判明しました。


f:id:kan_kikuchi:20171122205430g:plain


なので今回はこれの対処法の話です。


Retinaディスプレイ

そもそもRetinaディスプレイってなんぞやという所からですが、wikipediaによると以下の通り。

従来の倍の解像度、高画素密度のディスプレイを指す名称である。

Retinaディスプレイ - Wikipedia


ようはピクセルの密度が倍だから綺麗に見えるよ!ってな感じのものです。

この密度が倍というのが曲者で、実際に表示しているサイズとピクセル数が異なってくるため、

座標がズレてしまっていたわけです。


f:id:kan_kikuchi:20171122205430g:plain


対処法

対処法は簡単で、密度が倍なのでその分、位置を調整するだけ。

//非Retina
//mousePosition.y = SceneView.currentDrawingSceneView.camera.pixelHeight - mousePosition.y

//Retina
mousePosition.x *= 2;
mousePosition.y = SceneView.currentDrawingSceneView.camera.pixelHeight - mousePosition.y * 2;

f:id:kan_kikuchi:20171122205515g:plain


ただし、Retinaディスプレイかどうかを判別する方法が分からなかったため、

使用しているディスプレイに合わせて修正する必要があるのであしからず。