【Unity】UnityPackageを一括で生成させる
今回はUnityPackageの自動生成について書きたいと思います。
前提
私はUnityエディター拡張を作成するとき、1つのフォルダでまとめて管理しています。
RNFという独自のフォルダの中にEditorフォルダを用意し、その中に全てのエディター拡張をまとめて管理しています。
UnityPackageを自動生成させる
作成中のエディター拡張のうち、
「一部のエディター拡張だけを別のプロジェクトへインポートさせたい」
という状況がしばしば発生します。 目的のエディター拡張を手作業でコピーしてもいいですが、これは若干面倒くさいです。
そこで、RNF/Editor/以下にあるフォルダを一括でunitypackage化させることにしました。
UnityPackage自動生成スクリプト
unitypackageを一括生成させるため、以下のようなスクリプトを書きました。
namespace UnityPackageToolkit { using System.IO; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEditor; public static class UnityPackageExporter { [MenuItem("Export/UnityPackage", false, 2)] static public void ExportUnityPackage() { var exportRootPath = Path.Combine(Path.GetDirectoryName(Application.dataPath), "UnityPackages"); if (!Directory.Exists(exportRootPath)) { Directory.CreateDirectory(exportRootPath); } // unitypackage化用の情報の作成 var exportDatas = Directory.GetDirectories(Application.dataPath + "/RNF/Scripts/Editor", "*") // RNF/Scripts/Editor以下のすべてのディレクトリ取得 .Select(dir => { var inputFilePath = "Assets" + dir.Substring(Application.dataPath.Length); var outputFilePath = Path.Combine(exportRootPath, Path.GetFileName(inputFilePath) + ".unitypackage"); return new ExportData { InputFilePath = inputFilePath, OutputFilePath = outputFilePath }; }) .ToList(); // RNFフォルダ自体もunitypackage化 exportDatas.Add(new ExportData { InputFilePath = "Assets/RNF", OutputFilePath = Path.Combine(Path.GetDirectoryName(exportRootPath), "RNF.unitypackage"), }); // unitypackageの作成 foreach (var data in exportDatas) { EditorUtility.DisplayProgressBar("Export Unitypackages", data.FolderName, 0f); AssetDatabase.ExportPackage(data.InputFilePath, data.OutputFilePath, ExportPackageOptions.Recurse); } EditorUtility.ClearProgressBar(); EditorUtility.DisplayDialog("Export Unitypackages", "Complete", "OK"); // 保存先フォルダを開く System.Diagnostics.Process.Start(exportRootPath); } private class ExportData { public string FolderName { get { return Path.GetFileName(InputFilePath); } } public string InputFilePath; public string OutputFilePath; } } }
これを実行すると以下のようなUnityPackage群が一括で生成されます。
目的のuntiypackageをダブルクリックするだけで簡単にエディター拡張をインポートできます。
UnityPackageExporterの使い方
"Export/UnityPackage" を選ぶとあとは全自動でUnityPackageが生成されます。
【Unity】Unity上でTodo管理ができるエディター拡張"uTodoList"の紹介
今回はUnity上でTodo管理ができるエディター拡張"uTodoList"を紹介します。
これなに?
Unity上でTodo管理ができます。
Q. なんでUnityでTodo管理するの?
Unityでタスク管理をするメリット。 それはタスク管理がUnityで完結するという点だと思います。
Unityプロジェクトとの関連性が高いタスクはUnityプロジェクト内に持たせたほうが情報が整理しやすくなる。
Unityプロジェクトと強く紐づくタスクはUnityプロジェクトの中へ、開発全体のタスクはタスク管理ツールへ、という住み分けができるようになるわけです。
使い方
"Tools/uTodoList"を選択するとTodo管理ウィンドウが開きます。
[
【Unity】シーンをワンクリックで開くエディター拡張 "SceneLauncher"を公開しました。
シーンをワンクリックで開くエディター拡張 "SceneLauncher"を公開したので紹介します。
これなに?
シーンやManagerスクリプトをワンクリックで開けるエディター拡張です。
ProjectビューでシーンやManagerスクリプトをいちいち探すのが面倒くさかったので作ってみました。
使い方
"Tools/Scene Launcher"を選択してウィンドウを開きます。
機能紹介
機能1. シーンを開く
シーン名が書かれたボタンをクリックするとシーンを開きます。
現在のシーンを編集しているときに押すと編集内容が破棄されてしまうので注意。 (ここはそのうち直したい)
機能2. シーンのManagerスクリプトを開く
Manager.csと書かれているボタンを押すと (シーン名)Manager.csを外部コードエディタで開きます。
上記gifでは GameManager.csを開いています。
機能3. シーンアセット(.unity)を選択する。
.unity と書かれているボタンを押すとシーンアセットが選択されます。
【Unity】シーン構築を楽にするエディター拡張"SceneBuilder"を公開しました。
シーン構築を楽にするエディター拡張 SceneBuilder を公開したので紹介します。
これなに?
こんな感じのシーンと
こんな感じのファイル群を自動で作ってくれます。
シーンやManagerクラスを手作業で作成するのが面倒くさかったので作ってみました。
使い方
シーンを作りたい場所で右クリックして "Create/Scene Builder" を選択します。
ダイアログが出てくるのでお好みのシーン名を入力して保存をクリックします。
あとは待っているだけでシーンアセットとスクリプトが自動で作成されます。 とっても簡単。
使用風景
gifキャプチャーも載せてみました。こんな感じで手軽に作成できます。
【Unity】ヒエラルキーのオブジェクトをリネームしやすくするツール "HierarchyRegexRenamer" を公開しました
オブジェクトを一括リネームするエディター拡張 HierarchyRegexRenamerを公開したので紹介します。 github.com
これなに?
ヒエラルキーで選択したオブジェクトを一括でリネームするエディター拡張です。
オブジェクト名の()だけを消したり、 すべてのオブジェクトの頭に文字を一括で付け足したりできます。
使い方
STEP1 : ウィンドウを開きます
STEP2 リネームしたいオブジェクトを選択します
STEP3 ウィンドウにRegexパターンと置換文字列を入力して、リネームボタンを押します
プリセット機能
Regexがわからない人でも扱えるようにプリセット機能を用意しています。
【Photoshop CC】画像を半透明にする
はじめに
「画像を半透明にしたい」というシチュエーションはよくあると思います。
今回はPhotoshop CCのレイヤーマスク機能を使ってレイヤーを半透明にする方法をご紹介いたします。
使用する画像
STEP 0. Photoshopを開く
背景レイヤーは削除してPhotoshopアイコンだけの状態にしておきます。
STEP 1. レイヤーマスクの追加
レイヤーパネルの下のほうにある四角いアイコンをクリックしてレイヤーマスクを追加。
レイヤーマスクが追加されます。
STEP 2. レイヤーマスクの選択 (Windows)
Altキーを押しながらレイヤーマスクを左クリックするとレイヤーマスクが選択されて編集可能な状態になります。
↓ 鉛筆ツールで試し描き
STEP 3. レイヤーを半透明にしてみる
このレイヤーマスクを編集することでレイヤーの不透明度を変えることができます。
例えば、明度50%のグレーで塗った部分は不透明度50%になり、 明度0%の黒で塗った部分は不透明度0%(完全な透明)になります。
例えば、以下のようにレイヤーマスクを塗ると、
グレーで塗った部分だけ半透明になります。
Unityに取り込んで表示させてみるとこんな感じ
ファイルの書き出しは Ctrl + Alt + W か Ctrl + Alt + S が便利です。
【UE4】サンプルSTGを改造して5-Way弾を打たせてみる
UE4はじめました。
自身のUE4学習もかねて、今回はサンプルSTGを改造して5-Way弾を撃たせるまでの手順を記事として書き残したいと思います。
環境
0. プロジェクト作成
Twin Stick Shooter を選択して新規プロジェクトを作成します。
ASDWで移動、矢印キーで1-way弾の発射ができるSTGが作成されます。 (Alt + Pでゲーム再生)
今回はこのSTGを改造して、5-Way弾を発射できるようにしていきたいと思います。
1. 自機のブループリントを開く
アウトライナの TwinStickPawnを編集 と青字で書かれている部分をクリックしてブループリントを開きます。
弾の生成処理
弾を生成している処理は、FireShot 関数内の以下の黄色で囲った部分になります。
ここを編集して5-Way弾を実装していきます。
STEP2. 弾の向きの変更
CombineRotatorsノードの配置.
CombineRotatorノードを配置します。
CombineRotatorsノード は回転情報であるRotatorに別のRotatorを加算するときに使用するノードです。
今回はこのノードを利用して、弾の回転を実装します。
CombineRotatorsノードの接続
CombineRotatorsの青色のリンクを以下のように繋ぎます。
補足: ピンの分割
ピンを右クリックして Split Struct Pinを選択するとピンを分割することができます。
以上で弾の向きを変更する準備が整いました。
回転が変わることを確認してみる。
ここで、試しにYawへ15を入力してみましょう。
弾が15°ずれた方向へ飛ぶようになります。
Yawの入力値が弾の回転の加算値となるのです。
Forループを使って弾を複数生成する
次に、弾の生成処理にForループをかませて弾の生成処理が複数回呼ばれるようにしていきます。
弾の生成を行っているノードは SpawnActor ノードです。
ForLoopノードの配置
ForLoopノードを配置します。
ブランチノードの出力ピンをドラッグアンドロップするとノードの配置と繋ぎなおしを同時にやってくれるので楽です。
今回は弾を5個撃ちたいので、First Index を -2, Last Index を 2に設定します。
CanFireフラグの設定タイミングの変更
サンプルでは、弾を1回撃った直後に Can Fire フラグ(弾の発射可能フラグ)をOFFにする処理が入っており、弾が1つしか発射できないようになっています。
セットノードの実行フローをForLoopノードのCompletedピンに繋ぎ、 5つの弾すべてが発射されてからフラグがOFFになるようにします。
リンクの切断は Alt + 左クリック で行うと楽ちんです。
ForLoopノードの配置は以上で完了となります。
45°間隔で弾が発射されるようにする
次に、Forループのインデックスを利用して弾の回転を設定していきます。
Forループのインデックスに45をかけたものをYaw(弾の回転)に設定するようなノードを組んでいきます。
(弾の回転) = 45 * (インデックス)
まず、ForLoopノードのIndexピンに int*floatノードを接続します。
そしてfloatに45を入力し、CombineRotatorsノードの Yawに接続します。
以上で5-Way弾を発射する準備は完了となります。
2. 確認してみる
ゲームを再生して、矢印キーを押すと弾が5方向へ発射されることが確認できます。
3. 角度を狭くしてみる
45°間隔で弾が発射されることが確認できました。
次はこれを5°間隔で発射されるようにしてみたいと思います。
先ほどのint*floatノードで45を入力していたところを5に変更します。
弾が1つしか出ない
この状態で弾を撃っても、1つの方向にしか発射されません。
これは、弾同士が接触することによって消滅を起こしてしまっているのが原因です。
なので、弾のコリジョン設定を変更して弾が消えないようにしてみます。
弾のコリジョンの設定
コンテンツブラウザでTwinStickProjectileをダブルクリックしてブループリントを開きます。
ビューポートタブで弾をクリックし、詳細タブからCollisionを設定します。
今回は弾同士のコリジョンを無効にしたいので、Projectile の無視チェックボックスをONにします。
確認してみる
コリジョンが正しく設定できていると、弾が5個発射されることが確認できます。