Vuforiaについて
今ViufoliaでARの研究、開発をしているので、自分なりに纏めようと思う。
現段階でGroudPlaneに関しては実装予定がないので参考サイトだけ表記しておきます。
【Unity】【AR】Unity2017.3+Vuforia7で水平面検知する - するめとめがね
目標
マーカを読み込んでオブジェクトを表示する
オートフォーカスの実装
開発環境
Unity2017.4.6f1
Vuforia7.5.20
実機はGalaxyS8 android8.0
vufoliaの概要
マーカを読み込んでオブジェクトを表示することができる
水平面検知をし、オブジェクトを出現させる。
サービスに関しては、有料と無料が両方ある。
Vufoliaの導入
自分が調べた段階では、三つあるのかと思います。
1:公式サイトからダウンロード
- このサイトに飛び、Downloadsに行く。
- 既にUnityがある場合は、Dowload Unity Extensin(Legacy)からダウンロードする。
ない場合はDownload Unityへ
これの場合、自分の見解でPlayerSetting→XR Settingsがこのようになる。
別の方法でチェックボックスが表示されます。
特に実装する上で問題はないかと思います。
2:Exeからダウンロード
際程のPlayerSettingにあったVuforia Augmented Realityでダウンロードする。
ダウンロードしたらXR Settings->vuforia Augmented Realitにチェックをいれる。
※この場合1のパターンと実装の方法が少し変わります。
3:アセットストアからダウンロード
以下から確認ができるかと思います。
特にこの辺は、検証していませんので、ご自身でお願いします。
assetstore.unity.com
実装
先ほどの1と2のパターン合わせて書きます。
1の場合
Vuforia->Prefabsへ行く。
ここでHierarchyにARCameraとImageTargetを配置します。
※このタイミングでMainCameraは、削除しておく。
2の場合
GameObject->Vuforia->ARCameraを追加
GameObject->Vuforia->ImageでImageTargetのオブジェクトがSceneに追加される
※1と同様でMainCameraは、削除しておく。
ここまでが1と2の違いになるかと思います。
残りは同じはずなので、混乱することはないかと思います。
ImageTargetの設定1
先ほど配置したImageTargetに、表示したいオブジェクトを子に追加する。
Licensekeyの設定
ARCameraにボタンでOpen vufolia confugurationがあるのでそれを押す。
そうするとこのような画面に行くかと思います。
ここでAppLicenseKeyが必要になるので公式サイトへ行き、アカウントを作る。
基本は英語だが、ほぼ直観で行けると思うので困らないかなって思います。
アカウントが作れたらログインをし、Developをクリックする。
・次にGetDevelopmentKeyをクリック。
アプリ名を入力するのとチェックボックスを押すだけ。
・入力したアプリ名が表示されるので、それをクリックすると
長い文字列が表示されます。
これがLicenseKeyになるのでコピーする。
・Unityに戻り、AppLicenseKeyに入力する。
Databeseの設定
次にARで読み込む画像をあらかじめ設定しておく必要がる。
先ほどのLicenceKeyの引き続きでTargetManager->AddDatabeseに飛ぶ。
・Nameの欄にDatabeseの名前を決める。
・TypeはDeviceにする。
作成したDatabeseからAddTargetを選択
・TypeはSingleImage
・Fileは、読み込む画像
※読み込む画像は、それなりに色が多めにある画像が好ましい。
画像も少し大きいほうが、認識は、早い気がします。
僕は513×813ピクセルで作っていました。
・Widthは1
・Nameは、そのままの通りです。
これで画像が追加されました。
ここでRatingというのがあり、星マークが多いほど認識がしやすい。
なるべくカラフルなのは、これが関係しています。
・Download Databese(All)を選択
・Select a development PlatformはUnityEditorを選択
これによってUnityPackageがダウンロードされるので、プロジェクトにD&Dをする。
・先ほどのLicenceKeyを入力した場所に、Databeseがあります。
そこに自分のDatabeseとActivateにチェックを入れる。
オブジェクトを表示するのに、大事なので表示されなかったらここを要確認です。
ImageTargetの設定2
またここでImageTargetに戻る。
・DatabeseとImageTargetを設定できるようになるので
自分が用意したモノにする。
ここでEnableExtendedTrackingにチェックを入れておく
これはARマーカが外れてもトラッキングができちゃいます。
~参考サイト~
tsubakit1.hateblo.jp
ここまで来たらスマホに書き出しをしましょう。
書き出しに関して、以下を参考にお願いします。
UnityからAndroid実機ビルド手順(2017.08版) - Qiita
https://qiita.com/taroyan/items/2ff7f6aadd640221bde5
実行したら画像のようになれば成功です。
現在やってることのチラ見になってしまうが・・・
オートフォーカスの実装
Androidには、オートフォーカスが対応されてない場合があります。
以下のコードをARCameraにアタッチをする。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Vuforia; using UnityEngine.UI; public class FocusController : MonoBehaviour { private bool mVuforiaStarted = false; void Start () { VuforiaARController vuforia = VuforiaARController.Instance; if (vuforia != null) vuforia.RegisterVuforiaStartedCallback(StartAfterVuforia); } private void StartAfterVuforia() { mVuforiaStarted = true; CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO) } void OnApplicationPause(bool pause) { if (!pause && mVuforiaStarted) { CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO) } } }
~参考サイト~
【Unity】VuforiaでARアプリを作るときのTIPS 10選 - おもちゃラボ
作業量はそこそこ多いが、簡単に実装できてしまうので
興味がある人は、今回紹介しなかったGroudPlaneにもチャレンジしてみて下さい。
長文になってしまいましたが、足りないとこがもしあればコメント下さい。
UnityのUIのスケールを自動調整する方法
今Unityでスマホゲームの開発をしているのですがその際に誰もが気にする
アスペクト比があると思います。
スマホだと16:9
タブレットだと4:3になると言われているらしいです。
ここでもし端末のトレンドが変わって新しい比率が出た場合、それにあったUIを
対応しなければいけないと思います。
ここでUnityではCanvas Scalerを変更してあげると
自動的にそのスマホにあったサイズに変換してくれるらしいので便利です!
しかもノーコーディングで!!
~変更する箇所~
・UI Scale Modeを Scale With Screen Sizeに変更する
・Screen Match ModeをExpandに変更する
この二点でUIのスケールが変わると思います。
ゲームオブジェクトのコンポーネントを破棄する方法
生成したゲームオブジェクトの何かしらのコンポーネントを
破棄する方法があります。
それがDestroy()
使い方の例はこちらです。
new obj= Instantiate(cloneObj, transform.position, transform.rotation) as GameObject; Destroy(obj.GetComponent<Rigidbody>());
今までゲームオブジェクトの破棄でしか使ったことが無かったが
こういう使い方があるんだなーー
Unityエディタ拡張勉強会について
今回Unityエディタ拡張の勉強会の内容についてです。
先日、Donutsさんのとこで拡張部分の勉強会に参加してきました。
今回どんな内容だったのかをざらっと進めていきます。
まずはエディタ拡張とは何ってとこから
簡単に言ってしまえば、Unityをより使いやすくし、開発効率をあげること
それでなにができんだよってとこについて
・ショートカットキーの追加
・独自のInspectorの実装
・Assetインポート時の動作変更
・prefab部分のセーブ機能
など色々あります。
Inspectorの拡張例
Transformのエディタ拡張 - G.D.M
開発しながらアニメを見るエディタ拡張例
【Unity】僕の考えた最強のエディタ拡張【AdventCalendar】 - 代官山らへんで働くengineerのUnityブログ
これを聞いたときはまじで笑いました
Attribute
まずこれは何ぞやってとこだけど・・・
・フィールド変数(プロパティ)や関数、クラスに対し、情報を付加できること
使い方について
・[Attribute名]変数、関数、クラスの宣言で付加する
インスペクターに変数を表示、非表示とクラスの表示、非表示について
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AttributeTest : MonoBehaviour { //変数の表示 [SerializeField] private int privateParam; //変数の非表示 [HideInInspector] public int publicHideParm; // [System.Serializable]でクラス表示 [System.Serializable] public class SerializableClass { public int filedParam; } public SerializableClass serializableclass; // [System.Serializable]を適用しないと非表示 public class NormalClass { public int filedParam; } public NormalClass serializableclass; }
その他のAttributeについて
●コンポーネントを自動で加える
[RequireComponent(typeof(型名))] public class Hoge : MonoBehaviour
「必要なスクリプトをアタッチし忘れて参照出来ない」みたいな事を無くす時に使える
●変数に説明書きを加える
●マウスオーバで表示
[Tooltip("説明")] public string num;
●複数行に対応
[MultiLine] public string num;
さっそく本題に・・・
今回はReadOnlyAttributeというAttributeを自作しました。
どういうものか?
・Inspectorで確認できるが、編集はできない
・本来は存在しない機能
必要なクラス
・Attribute名を決めるクラス
・Attributeの内容を決めるクラス
・Attributeを使うクラス
まずは先にAseetsの中にEditorフォルダーを作ってください。
Editorフォルダーを作ることによって読み込む必要がないものは無視されます。
では中身に・・・
Attributeを作る
今回中身の詳細については割愛させていただきます。
Attribute名を決めるクラス(ReadOnlyAttribute.cs)
public class ReadOnlyAttribute : PropertyAttribute {}
Attributeの振る舞いを決めるクラス(ReadOnlyDrawer.cs)
※Assets/Editorフォルダを作り、その中に入れること
using UnityEditor; // UnityEditorの名前空間を使用する [CustomPropertyDrawer(typeof(ReadOnlyAttribute))] public class ReadOnlyDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { GUI.enabled = false; EditorGUI.PropertyField(position, property, label, true); GUI.enabled = true; } }
Attributeを使うクラス(ReadOnlyAttributeTest.cs)
public class ReadOnlyAttributeTest : MonoBehaviour { [SerializeField] private int attack; [SerializeField] private int deffence; // Inspectorに表示するが、編集はできない [ReadOnlyAttribute] public int rank; void Update() { rank = attack * deffence; } }
・適当なオブジェクトにReadOnlyAttributeTestをアタッチ
・PlayしてInspectorのAttackとDeffenceを変更する→Rankが変わる
CustomEditor
• AttributePropertyはプロパティ単位で適用される
• クラス全体のInspectorでの見え方を変更するAttribute
• 標準のTransformやCollider、Cameraの見え方もCustomEditorで作られる
やること
• CustomEditorでInspectorにReadOnlyで表示させる
用意するクラス
• CustomEditorの内容を定義するクラス
• CustomEditorを適用するクラス
CustomEditorの内容を定義するクラス(ReadOnlyCustomEditor.cs)
※Assets/Editorフォルダの中に入れること
using UnityEditor; [CustomEditor(typeof(CustomEditorTest))] public class ReadOnlyCustomEditor : Editor { private CustomEditorTest editorTest; void OnEnable() { editorTest = (CustomEditorTest)target; } public override void OnInspectorGUI() { base.OnInspectorGUI(); EditorGUILayout.LabelField("Rank",editorTest.rank.ToString()); } }
CustomEditorを適用するクラス(CustomEditorTest.cs)
public class CustomEditorTest : MonoBehaviour { [SerializeField] private int attack; [SerializeField] private int deffence; // プロパティは標準でInspector非表示 public int rank { get { return attack * deffence; } } }
オブジェクトにアタッチするとこのようになる。
特定シーンから再生する仕組み
• 特定のシーンを再生したい需要
• Titleから始める
• GameManagerのあるシーンから始める
• 毎回現在のシーンを閉じて、特定のシーンを開いて...は非効率
• 再生後に編集中のシーンに戻りたい
→SceneStarterが欲しい
これらをどうするか?・・・
エディタ拡張で解決する
前準備
• MainシーンとTitleシーンを作る
• Scenesフォルダを作りその中にシーンファイルを移動する
• 再生可能なシーンリストに加える
• UnityメニューのFile -> Build Setting -> Scenes In Buildにシーンファイルを
ドラッグ&ドロップ
• Mainシーンを開いておく
• ショートカットキーでTitleシーンから再生することを目指す
タイトルシーンを再生する(TitleStarter.cs)
※Assets/Editorフォルダに入れておく
using UnityEditor; using UnityEditor.SceneManagement; public class TitleStarter : Editor { private const string StartScene = "Assets/Scenes/Title.unity”; [MenuItem("Tools/Play From Title %@")] public static void PlayFromTitle() { if(EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { // シーンに遷移 EditorSceneManager.OpenScene(StartScene); // 自動でPlay EditorApplication.isPlaying = true; } } }
• MainシーンでCommand(Ctrl) + @
→Titleシーンが開く
少しだけ中身の詳細について
[MenuItem(“パス ショートカットキー")]
• メニューに追加するAttribute
• Attributeが付いた関数を実行する
ショートカットキー
• %:Command(Mac), Ctrl(Windows)
• #:Shift
• &:Alt
• _:キーのみ
• _@で@のみ
• 2つまでの複合もできる
• %#@
さらに先ほどの部分をもう少し使いやすくする。
TitleStarter.csに追加してください
再生後は編集していたシーンに戻る
//1.名前空間を追加 using UnityEngine; using UnityEngine.SceneManagement; //2.定数を追加 private const string SaveKey = "SaveScene”; //3.PlayFromTitle関数を編集 if(EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { // 以下の処理を追加 PlayerPrefs.SetString(SaveKey, SceneManager.GetActiveScene().path); // シーンに遷移 EditorSceneManager.OpenScene(StartScene); // 自動で遷移 EditorApplication.isPlaying = true; }
再生後は編集していたシーンに戻る
・再生後に戻る処理を加える
[InitializeOnLoadMethod] private static void gameEnd() { var scene = PlayerPrefs.GetString(SaveKey, ""); if(string.IsNullOrEmpty(scene)) { return; } EditorApplication.playmodeStateChanged = onPlayModeStateChanged; } private static void onPlayModeStateChanged() { // 終了時に if(!EditorApplication.isPlaying) { // このイベントを削除 EditorApplication.playmodeStateChanged = null; // 戻る var scene = PlayerPrefs.GetString(SaveKey, ""); PlayerPrefs.DeleteKey(SaveKey); EditorSceneManager.OpenScene(scene); } }
PlayerPrefas
• 永続的データを管理するUnity内蔵クラス
• セーブデータやハイスコアの保存
• Key-Value方式で保存
• Keyはstringで指定
• Valueはint, float, stringを保存可能
メソッド
• 保存:PlayerPrefs.SetString(Key, value)
• 取得:PlayerPrefs.GetString(Key)
• 存在の確認:PlayerPrefs.HasKey(Key)
• ファイルに保存:PlayerPrefs.Save()
• Keyと値削除:PlayerPrefs.DeleteKey(key)
• 全て削除:PlayerPrefs.DeleteAll()
保存場所
Mac
• /Library/Preferences内にunity.[company name].[product name].plist
Windows
• HKCU\Software\[company name]\[product name]
• 直接変更すればセーブデータのリセットや、値の変更も可能だが...
• 効率的に編集するため、エディタ拡張でPlayerPrefsエディタを作る
PlayerPrefasエディタ用のWindowを作る
PlayerPrefsEditor.cs
※Assets/Editorフォルダに入れておく
using UnityEngine; using UnityEditor; public class PlayerPrefsEditor : EditorWindow { private string key; private string value; [MenuItem("Tools/PlayerPrefs/OpenEditor")] static void OpenEditor() { EditorWindow.GetWindow<PlayerPrefsEditor>("PlayerPrefsEditor"); } }
string型のPlayerPrefsエディタを作る
OnGUI関数を追加する
void OnGUI() { GUILayout.Label("Key"); key = GUILayout.TextField(key); GUILayout.Label("Value"); value = GUILayout.TextField(value); if(PlayerPrefs.HasKey(key)) { var data = PlayerPrefs.GetString(key); GUILayout.Label("Saved Value: " + data); } if(GUILayout.Button("Save")) { PlayerPrefs.SetString(key, value); PlayerPrefs.Save(); } }
OnGUI関数を編集する
GUILayout.BeginHorizontal(); // 追加 GUILayout.Label("Key"); key = GUILayout.TextField(key); GUILayout.Label("Value"); value = GUILayout.TextField(value); GUILayout.EndHorizontal(); // 追加 if(PlayerPrefs.HasKey(key)) { var data = PlayerPrefs.GetString(key); GUILayout.Label("Saved Value: " + data); } if(GUILayout.Button("Save")) { PlayerPrefs.SetString(key, value); PlayerPrefs.Save(); } // 追加 if(GUILayout.Button("Delete")) { PlayerPrefs.DeleteKey(key); PlayerPrefs.Save(); }
オススメエディタ拡張の紹介
Odin - Inspector and Serializer
https://www.assetstore.unity3d.com/jp/#!/content/89041
• 有料($22.50)
• Inspectorの操作性を向上させる数多くの機能を搭載
主な機能
• 配列の要素削除や並び替え
• ReadOnlyAttribute
• 値の範囲を設定
• コンポーネントの参照が必要だがされていない場合にエラーメッセージ
Editor Console Pro
https://www.assetstore.unity3d.com/jp/#!/content/11889
• 有料($30.00)
• Debug.Logの拡張版
主な機能
• 検索・フィルター・色付け
• 値の監視
• ログのエクスポート
Advanced PlayerPrefs Window
https://www.assetstore.unity3d.com/jp/#!/content/7070
• 有料($9.00)
• 高機能PlayerPrefsエディタ
• データのインポート/エクスポート
Inspector Navigator
https://www.assetstore.unity3d.com/jp/#!/content/26181
• 無料
• オブジェクト選択の履歴を残す
• ショートカットキーで選択状態を移動
ReferenceViewer
https://github.com/anchan828/unitejapan2014/tree/master/ReferenceViewer
・アセットの参照を検索する
FrameCapturer
GitHub - unity3d-jp/FrameCapturer: export framebuffer, GBuffer or any RenderTextures from Unity to file. supported format: png, exr, gif, webm, mp4
・ゲーム画面を録画する
MissiongList
http://developer.wonderpla.net/entry/blog/engineer/Unity5_Search_MissingAssets/
・Missingになっているプロパティを検索する
壊れたAnimationClipを少しリカバリーしてみるEditor拡張
Unity 壊れたAnimationClipを少しリカバリーしてみるEditor拡張 - 渋谷ほととぎす通信
• 階層構造を変更しても大丈夫
自作したエディタ拡張に関する記事46選+スライド
【Unity】自作したエディタ拡張に関する記事46選+スライド - コガネブログ
・ 小さなエディタ拡張を大量に作成し紹介
今回ざっとこのようなことを学んできました。
初めてエディタ部分に触れたので理解できないこともいくつかあったのですが、エンジニアの方に聞いたら
分かりやすく教えていただけのでとっても実りのあるものになりました。
今回お世話になったDonutsさんのホームページを貼っておきますので気になった方は、12月18日に
シェーダの勉強会があるのでぜひ参加してみてはいかがでしょうか?
そしてそして最後の懇親会では人事の方とも楽しく会話ができそしてピザが美味しかったです(笑)
初心者向けUnityハンズオン
どうも、今日は初心者向けのUnityハンズオンに行ってきました!
どんなことをやったのかを簡単に紹介します。
やったこと一個目
なんだよこれって思った人は、頑張って察してください。。。
そう、これはみたらし団子です笑(え?)
これもですが前半はショートカットキーについていくつか教えてもらいました!
僕Unityは触ったことあるのにこのような細かいとかが知らなかったので勉強になりました。
一応いくつか簡単に・・・
まずはこれ!
大抵エディタ左上にあるこれは左からQ W E R Tで操作ができます。
二つ目
例えばで3DオブジェクトのCubeをふたつ作る。
そしてこんな感じにする。
<ここからは自分の解釈になるかな>
上のオブジェクトを選択しながらVキーを押す。
そうすると頂点がもう一個のオブジェクトの近い頂点に移動ができるんだよ!
これはバージョンのせいか分からないがオブジェクトが移動できる状態でないとでな出ないからそこだけ注意(Unity 2017.2.0f3 )
結果的このようないい感じに配置ができるよ~
結構ぴったりじゃね??
後は最後に簡単なミニゲーム作りました。
キャプチャーした動画ここに上げるのできないので画像で簡単に説明を。。。
まずはこのようなステージ作成を行いました。
ボールは十字キーで操作。赤い床またはオブジェクトに当たるとボールがジャンプして、最終的に緑のオブジェクトに当たるとゲームクリアーという簡単なミニゲームです!!
とりあえず自分で作ったのはよいが自分ひとりで笑いながら楽しんでいました(笑)
とりあえずざっくり今日はこんな感じなことをしましたよ!
知らないことも多々あったのでとても勉強になりました!
では今日はここまでと。
Unity開発の参考になりそうなサイトをまとめてみた!
どうも、みなさん!
現在就活作品に向けてスマホゲームを研究or開発しているのですがやっぱりその中でネットの情報ってのはかなり重視してくることがあるので今回は自分なりに得に自分がお世話になってるサイトをまとめてみようかなって思います。
例えばUnityの開発をしたいけどどういうの作ろうか思いつかないとか、こ~ゆうの作りたいけどどうやったらいいか分らない人にはぜひおすすめかなって思います。
Qiita
ここは、サイトに書いてあるようにプログラマーの技術共有サイトです。
色々な人がUnityの技術について公開していますので、実装あたりで悩んでいる方には、
おすすめかなって思います。
URL
テラシュールブログ
自分はテラシュールブログさんは、演出やエディタ拡張などにはお世話になっているのではないかと思います。
ほかにもアセットの情報やゲームの作り方のヒントになる情報がたくさん載っているので初心者にはとてもおすすめです。
ひよこのたまご
このひよこのたまごさんにはサイトに書いてあるようにチュートリアルがたくさん載ってあるので初心者にはこれもまたオススメではないかと思います。
自分の中では2Dが多いかなって感じたので2D のゲーム作りたい方にはおすすめかなって思います!
もちろん3Dに関する情報もなっていますので3D開発したい方にもオススメです。
Unityを使った3Dゲームの作り方(かめくめ)
こちらのかめくめさんのサイトは自分の中ではUnityの3Dに関する技術やオンラインゲーム、FPSゲーム開発などの開発等にはおすすめです。
かめくめさんはUnityに関することは現在はC#らしいですが過去の記事には、JavaScriptでの記述がありますのでC#で開発している方はC#で読み替えて開発する必要があるので初心者の方はそこには注意です!(自分はそんなに苦労はしなかったです笑)
とあるプログラマーの備忘録
こちらのサイトは僕は最近お世話になったのであまり記事はたくさん読めていないのですが、比較的入門的な内容が多いかなって感じました。
なので初心者にはおすすめかなって思います。
面白法人カヤックさん
余談ですが僕はこのカヤックの清水さんのデザインパターンに関する記事を読んでそこからカヤックさんを知り、今就活にとても興味がある企業のひとつにあります(笑)
では記事的な内容は、Unity開発したい人すべてにオススメな内容がたくさん書いてあると思います。記事も企業の方が書いていらっしゃるのでとても分かりやすい内容になっているのでとてもオススメです!
No hack,no work
こちらは一部の記事になりますがUnityの勉強を深めてた方には一度は絶対見てほしい内容かなって思います。
Unityの開発をする中で気をつけなきゃいけないことなどがジャンルごとに書いてあるのでぜひ読んでみてください。
僕はこのサイトは先輩から教えてもらったのですが、とても学べる内容になってるのでぜひおすすめです。
今回は見てほしい記事のURLを直接貼っておきます。
最後にUnityの勉強会に参加してみたーいとかそんな方は一度このサイトを見てみたらどうでしょうか?
Unityのスタッフさんから学べる道場になってます!
今回ずっとこの記事は書きたいと思っていたのですか投稿がとても遅くなってしまいほんとにすいませんでした。。。
ですが今回紹介したサイトはどれもオススメなのでぜひ全部とはいかなくてもどれかひとつは見てみてください。
では今日はここまで。