Move To View を改良する

Move To View について

シーンで表示している位置にオブジェクトを動かす機能でMove To Viewがあります。メニューのGameObject-> Move To View (Ctrl + Alt + F)です。
たしかにこれを使うとそれっぽい位置にオブジェクトが移動するのですが、だいたい自分の想像していた位置にはいきません。

シーン

例えば、上記の画像のシーンビューで適当なオブジェクトを選択し、Move To Viewをしたとすると、下記のような位置に移動します。
床をすり抜けて、どこか遠くに置かれ、結局自分で位置を調整することになります。

Move To View後

私の求めているものは、シーンビューのカメラからレイを飛ばして、最初に当たった位置あたりにオブジェクトが移動するMove To Viewです。
というわけでそれを作ります。

エディタ拡張で実装

適当なEditorフォルダを作り、MyMoveToView.csを作り、以下のコードを実装します。
これでGameObject-> My Move To View (Ctrl + Alt + Z) が使えます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using UnityEditor;
using UnityEngine;

public class MyMoveToView {

[MenuItem("GameObject/My Move To View %&z")]
static void Do() {
if (Selection.activeGameObject == null) { return; }

var c = SceneView.lastActiveSceneView.camera;
Ray ray = new Ray(c.transform.position, c.transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {
Selection.activeGameObject.transform.position = hit.point;
} else {
Selection.activeGameObject.transform.position = c.transform.position;
}
}

}

実行すると、想定した位置に移動できました。

Move To View後

確認バージョン

Unity 5.6.4f1

Unityカテゴリの記事
Kris' Favorite Assets が便利
キー操作でUIのナビゲーションをループさせる
TextMeshProのSprite Assetを更新する
UnityPhysicsDebugDraw2D が便利
色管理を考える
Open Recent Scene が便利
細かいTips
ビルドスクリプトを書く
AnimatorのCulling Modeでハマった話
Vectrosityを使ってUGUI上で線や円のアニメーションをする
スプレッドシートからjsonデータを読み込む
ビジュアルノベルアセットFungusにコマンドを追加してカスタマイズする
Skinned Mesh Renderer の Boundsについて
シーンごとにビルド結果の容量を出す
シーンビューにクオリティ設定のスライダーを出すエディタ拡張
ビルド結果のFile headersが大きい理由
フリーのビジュアルノベルアセットFungusを使ってRPGのイベントを作る
フリーのビジュアルノベルアセットのFungusが便利
Visual Studio で保存時にフォーマットする
スプレッドシートからデータを読み込む
Easy Save2 で シリアライズされたクラスを保存する
ShaderでSpriteの色相をシフトする
Sprite、Texture の 色相をシフトする
uGUIのButtonをクリック時にハイライトのままになる
uGUIのCanvas Groupを使って透過処理をしたり、操作を制限する
自作のコンフィグ画面に必要なもの
uGUIでトグルなボタンを作る
uGUI で動的にボタンを作る
Easy Save2 を使ってみる
csv読み込んで ローカライズ
LoadLevelAdditive で共通シーンを加算
画面全体に色をかける
Any State でどこからでも遷移できるようにする
iTween のStop ではまる
sprite の multiple で 境界がおかしくなる
2D画面に線を引く Line Renderer
Renderer の Materials を スクリプトから設定する
背景をスクロールさせる