20200409のUnityに関する記事は9件です。

Editor実行はできるが、Android ビルドしようとすると Gradle Error が出たので解消した

Unity with Oculus Integraiton で Editor実行は問題ないので、apk にビルドしようとすると Gradle Error が出る問題に遭遇したので、その解決?方法。(?が付いているのは後述)

前提

名前 バージョン
Unity 2019.3.0f6
Oculus Integration 13.0.0

エラーの内容

スクリーンショット 2020-04-09 21.57.31.png

Gradle Error: Resource Not Found
Resouce 'xml/newtork_sec_config' not found in AndroidManifest.xml:52.
(See the console for details)

直し方

Oculus フォルダを、Assets フォルダ配下に戻した。
(リファクタリングのために、インポートしたアセットをあるフォルダ配下(Assets/hogehoge/)にまとめていたので、Assets配下に戻した。)

後述の内容

  • 戻しただけで、フォルダの移動はまだ実現していなので、?ということである。
  • 時間ができたら調べて直したいとは思っています。(時間ができたら・・・)

補足

xml/network_sec_config とは?

network_sec_config は Oculus/VR/Editor/network_sec_config.xml にある。

無駄だったこと

  • Resource フォルダ配下を色々見てみたが特に無し
  • Plugin/Android/AndroidManufest.xml 見てみたが特に無し
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Oculus Questで3Dアバターを動かしたい

スクリーンショット 2020-01-02 0.21.30.png


はじめに

  • VRChatっぽい感じで3Dアバターを動かしたいです
  • Final IK(知らない方はスルーで構いません)は使わず、無料でやっていきたいです(90ドルはなかなか気合い入れないと買えないですね...)
  • 3点(頭と両手)が追従され、自分の動きに合わせて動くことをゴールとします
  • 結論から言うと、OVRPlayerControllerの下にunitychanのオブジェクトを入れるだけでした...
  • ので、下はまじめに読まず読み飛ばすことをお勧めします。

環境

  • Windows 10
  • Unity 2019.3.6
  • ユニティちゃん 1.2.1
  • XR Mecanim IK Plus
  • Oculus Integration ver.15

まずは3点の追従

(補足)そもそもユニティちゃんとは...
「ユニティちゃん」はUnity Technologies Japanが
提供する開発者のためのオリジナルキャラクターです。(公式サイトより引用)

開発者のために無料配布されています(規約あり)。開発がはかどりますね。

本筋の3点追従ですが、こちらの記事などがとてもとても参考になりました。

注意点としては、
こちらの記事で登場する○○AnchorというGameObjectは自分でCreate Emptyして生成しなければならないということくらいですかね

できた!あれ...?

このままだと鏡の前で直立しているところから一生動けません。(たぶん)
スクリーンショット 2020-01-02 0.21.30.png

OculusのSDKのOVRCameraRigというものを使っているからですね。
動きたい場合には、代わりに、OVRPlayerControllerというPrefabを使います。

このPrefab、よくみるとOVRCameraRigを内包しています。
スクリーンショット 2020-01-02 0.21.30.png

ので、このPreafabをScene上に生成したうえで、上の記事で見たやり方と全く同じことをここのOVRCameraRigでやればいいわけですね。
もう一度やるのが面倒な人はすり替えるだけでもokだと思います。

できた!あれあれ...?

グロいのでスクショは控えますが、PlayerControllerとユニティちゃんが分離してしまう瞬間が出てしまいます。悲しい...
ユニティちゃんの体もControllerについてくるようにしたいです。

ので、以下のようにOVRPlayerControllerの中にunitychan_VRAvatarを置きます。
スクリーンショット 2020-01-02 0.21.30.png

これで、自分の体の動きに合わせてユニティちゃんの身体も追従してくれるようになりました。
(微妙に身体の位置がずれる場合は、CameraRigの高さを変えるなど地道なパラメータ調整がむばってください

動きが微妙に変...

追記します。

追記1

↑このあと紆余曲折あり、ユニティちゃんがまともに動くようになるまで1日溶かしました。。。
最終的な構成は以下です。
image.png

また、MechanimIKK Plusのスクリプトは「unitychan_VRAvatar」以外にはつけないのがポイントです。
unitychan_VRAvatarにつけたMechanimのスクリプトはこんな感じです。

スクリーンショット 2020-01-02 0.21.30.png

今後追記したいこと
- 足の動きが微妙に変なのでなおす
- idleやrunのアニメーションをつける

参考

OculusQuestでXR Mecanim IK Plusを使用してユニティちゃんを動かしてみる
Mechanim IK Plus

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityでアプリ開発する時に決めておくルール

概要

Unityのバージョンは2018.4

Unityでアプリ開発する時に決めておくといいルールやUnityの設定についてのメモです。
あくまで開発時に気にしておくことのメモ(自分用)なので、各項目について詳しくは説明しません。

  • Unityのバージョン
  • Unityのデバッグモード設定
  • フォルダ構成
  • コーディングルール
  • デバッグログ設定
  • シーンの構成
  • アニメーションの管理方法
  • リソースの管理方法
  • 使用するアセットの検討

Unityのバージョン

長期サポートバージョンであるLTS版を使う(サポートは2年間)
https://jp.gamesindustry.biz/article/1808/18082403/
ダウンロードは以下から
https://unity3d.com/jp/unity/qa/lts-releases

Unityのデバッグモード設定

デバッグ中は値を変更しても元に戻ってしまうので、デバッグ中であることをわかりやすくする
Editor > Preferences > Colors > Playmode tint の色をわかりやすい色に変更

フォルダ構成

  • Assets
    • StoreAssets(他のアセットなど)
      • 各アセット名でフォルダ分け
    • プロジェクト名フォルダ
      • Database(jsonやcsvファイルなど)
      • Editor(エディタ拡張)
      • Font(フォントデータ)
      • Plugins(プラグイン .dll)
      • Resources
        • Load(スクリプトで読み込むリソース)
        • Prefab
        • Texture
        • Audio
      • Common(いろんなシーンで使われるもの)
        • Texture
        • Animation
        • 各シーンでしか使わないものはシーン名でフォルダ分け
      • Scene
        • 各シーン名でフォルダ分け(このシーンでしか使わないファイルも入れる)
        • 用途(用途やファイルの種類によってさらにフォルダを分ける)
      • Script
        • 用途ごとにフォルダ分け
        • Util(全体でよく行う処理をまとめる)

コーディングルール

C#で開発するならMSDNのものを参考にチーム内でルールを決める
https://docs.microsoft.com/ja-jp/previous-versions/dotnet/netframework-3.5/ms229002(v=vs.90)?redirectedfrom=MSDN
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions

注意)
名前空間やクラス名をつけるときはUnityで使用されている単語と被らないよう注意する(DebugやSystemなど)

デバッグログ設定

リリースビルドしたときにDebug.Log()を出力しないようにする

Build Settings > PlayerSettings > Other Settings > Logging を None にする
スクリプトで設定するなら Debug.logger.logEnabled = false;
https://docs.unity3d.com/ScriptReference/Logger-logEnabled.html

ログファイルの出力先 https://docs.unity3d.com/ja/current/Manual/LogFiles.html

シーンの構成

シーンをどう管理するか決める

(1) シーンは1つのみにして配置するオブジェクトを切り替える方法

  • メリット
    • シーン読み込みがないので画面遷移は高速
    • 読み込むオブジェクトが多いと最初の起動が遅い
  • デメリット
    • 複数人で開発するとき注意が必要(シーン変更したときのGitのマージなど)

(2) シーンを画面ごとに分ける

  • メリット
    • 分割されているので複数人で開発しているときにコンクリフトがおきずらい
    • オブジェクトを管理しやすい
  • デメリット
    • シーン切り替えごとに読み込み時間が入る
    • シーンをまたいで読み込みたいオブジェクトや変数は扱いが面倒になる

(3) データを管理するシーンを最初に読み込み階層ごとにシーンを管理する(UI、ステージなど)

  • メリット
    • データやオブジェクトを管理しやすい
    • 複数人での開発もしやすい
  • デメリット
    • シーンを重ねるので読み込みは発生する

(3)は1と2の間を取ってるような構成
開発するアプリによってどう管理するのがいいか検討する
(実際全部を試したわけではないので参考程度のメモ)

アニメーションの管理方法

アニメーションで検討すること

  • Animationファイルをどう管理するか
    • Unity標準の Animator を使用して管理する(Stateが多いと設定が面倒なので注意)
    • SimpleAnimation を使用する(Unityが提供しているアセットでStateの設定が不要)
  • アニメーションにTweenのアセットを使用するか

UIのアニメーションくらいなら SimpleAnimation のほうがやりやすい
キャラクターのアニメーション制御するなら Animator のほうがいいかも

参考になりそうなサイト
https://kan-kikuchi.hatenablog.com/entry/SimpleAnimation
https://logmi.jp/tech/articles/320183
http://tsubakit1.hateblo.jp/entry/2017/12/08/014153

リソースの管理方法

主にデザイナーが作るテクスチャファイルについて

  • UnityはPhotoshopファイルが直接読み込めるのでそのままで管理するのがいいかも
    • だたしWinMergeで差分見るには画像ファイルじゃないとだめ
  • パフォーマンスに影響してくるので1枚の画像に複数のSpriteを管理する
  • PhotoShopファイルをレイヤーを分割して読み込んでくれるアセットなどもあるので検討

注意)
テクスチャの管理方法に関してはよくデザイナーと話して決める(デザイナーがUnityを使ったことがあるかも割と重要)

使用するアセットの検討

使用するアセットによっては開発が楽になるので、便利なアセットは積極的に使っていく
ただし使う前にライセンスやOSSは問題ないか調査すること

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

失われたAndroid Device Monitor

課題

  • unity(などのAndroid Studioを直接触らない開発環境)で、Android実機のデバッグログのチェックに、Device Monitorを利用していました。
  • Android Studio 3.2以降に更新したら、Device Monitorが使えなくなりました。

対処

  • Android Studioに統合されている"Logcat"を使います。
    • メニュー View > Tool Windows > Logcat
    • ツールバーでも切り替えられます。
  • ログのフィルタリングも可能です。
  • スクリーンショットや動画も撮れます。

公式ドキュメント

Android Device Monitor

Android Device Monitor は、Android Studio 3.1 でサポートが終了し、Android Studio 3.2 からは削除されています。Android Device Monitor で使用できる機能は、新機能に置き換えられました。以下の表に基づいて、サポートが終了した機能や削除された機能の代わりに使用できる機能をご確認ください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Unity]uUGUIで可変長リストの中に可変長リストを作る

こういうやつを作ります。

list.gif

普通の可変長リストを作る

まずはネストしていない普通の可変長リストを作ります。
始めに親にしたいオブジェクトにVerticalLayoutGroupなどのLayoutGroupを追加します。

image.png

この時点で子にオブジェクトを追加すると整列して配置されるようになりますが親のサイズは固定のままです。

image.png

配置する要素のサイズに合わせて親要素のサイズを変更したい場合はContent Size Fitterを使用します。
Content Size Fitterを使用すると要素の高さ、幅をPreferred HeightまたはPreferred Widthのサイズに変更することができます。

Preferred Widthについては公式のドキュメントに付加的に使用可能な幅が割り当てられる前に、この Layout 要素で優先される幅。のように記載があります。
分かりづらいですが色々やってみて慣れましょう。
要素の現在のPreferred Width/Heightはインスペクタから確認することができます。

image.png

Content Size Fitter をつけてHorizontal FitとVertical FitをPreferred Sizeに設定すると子要素のサイズに応じて親要素のサイズが変わるようになります。

image.png

ネストした可変長リストを作る

次は本題のネストした可変長リストを作ります。
普通に可変長リストの中に可変長リストを入れると以下のような警告がでます。

image.png

書いてある通りですがこれは親要素にLayoutGroupのコンポーネントが存在する場合、子要素にContent Size Fitterを使用するべきではないというものです。

これを回避するためには親のLayoutGroupコンポーネントのControl Child Sizeにチェックを入れます。

image.png

このパラメータにチェックを入れると子要素のすべての要素にContent Size Fitterを付けたときとほぼ同じ動きをします。

これで大体完成ですが一点注意することがあります。
それは固定長の要素の高さがつぶれてしまうことがある、というものです。
下の画像を見てください。

image.png

Listの最初の子要素であるButtonがつぶれて細長くなってしまっています。
これはButtonのPreferred Heightが10しかないため高さが10になってしまっているためです。
Preferred Heightを任意の値にするためにはLayout Elementコンポーネントを使用します。
Layout ElementのPreferred Heightにチェックを入れることで好きな値を設定することができます。

image.png

これで完成です。

最後に

知ってれば簡単なことですが知らないと苦労するので記事にしました。
uGUIは意外と色々できて便利です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Unity]初心者 privateってなに?

環境

Unity 2019.3.7f1

privateってなに?

ざっくり簡単にいうと、変数やメソッドを他のスクリプトからアクセスさせないようにするもの
意図せず数値が書き換えられてしまうのを防止する

最初は、
privateは他からアクセスできない
publicは他からアクセスできる
と覚えておく程度でOK!

他のスクリプトで値を使う予定のない変数にはprivateをつけておけば無難。

privateは省略できる

初心者さんにはこれを一番伝えたい!

実は、変数宣言時にpublicやprivateなどの"アクセス修飾子"をつけないと
privateが省略されるかたちになっている

次の2つは同じ
image.png
↑privateが省略されている
image.png

他の記事を見る際は、
・privateを省略するパターン
・privateをあえて書くパターン
がありますので、この点を頭において見ていくと良いです。

私は最初これがわからずもやもやした気持ちで参考記事を見ていました。
楽しいUnityライフを!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Unity]初心者 privateってなに?

環境

Unity 2019.3.7f1

privateってなに?

ざっくり簡単にいうと、変数やメソッドを他のスクリプトからアクセスさせないようにするもの
意図せず数値が書き換えられてしまうのを防止する

最初は、
privateは他からアクセスできない
publicは他からアクセスできる
と覚えておく程度でOK!

他のスクリプトで値を使う予定のない変数にはprivateをつけておけば無難。

privateは省略できる

初心者さんにはこれを一番伝えたい!

実は、変数宣言時にpublicやprivateなどの"アクセス修飾子"をつけないと
privateが省略されるかたちになっている

次の2つは同じ
image.png
↑privateが省略されている
image.png

他の記事を見る際は、
・privateを省略するパターン
・privateをあえて書くパターン
がありますので、この点を頭において見ていくと良いです。

私は最初これがわからずもやもやした気持ちで参考記事を見ていました。
楽しいUnityライフを!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Unity初心者]privateってなに?

環境

Unity 2019.3.7f1

privateってなに?

ざっくり簡単にいうと、変数やメソッドを他のスクリプトからアクセスさせないようにするもの
意図せず数値が書き換えられてしまうのを防止する

最初は、
privateは他からアクセスできない
publicは他からアクセスできる
と覚えておく程度でOK!

他のスクリプトで値を使う予定のない変数にはprivateをつけておけば無難。

privateは省略できる

初心者さんにはこれを一番伝えたい!

実は、変数宣言時にpublicやprivateなどの"アクセス修飾子"をつけないと
privateが省略されるかたちになっている

次の2つは同じ
image.png
↑privateが省略されている
image.png

他の記事を見る際は、
・privateを省略するパターン
・privateをあえて書くパターン
がありますので、この点を頭において見ていくと良いです。

私は最初これがわからずもやもやした気持ちで参考記事を見ていました。
楽しいUnityライフを!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity Remoteを導入・使用したので覚え書き(Android)

はじめに

UnityでAndroid端末向けのアプリを作成している際、タッチ操作がPCのエディタ上で確認できないため苦労しました。
手軽にタッチ操作の挙動を確認するには…と調べてみると「Unity Remote」というものがあったので実際に使用してみました。その際の手順や注意点など、何点か記録に残しておきます。

なおAndroidとiOSで手順など違いがあるかもしれません。自分が動かしたのはAndroid環境のみです。

対象

  • UnityでAndroid端末のタッチ操作を手軽に動作確認したいひと
  • Unity Remoteがうまく動かないひと
  • Unity Remoteと、実際にAndroid端末で動かす場合との違いで困っているひと

前段

公式ドキュメントに書かれている通り、Unity Remoteはあくまでも
 ・エディタで再生されるシーンを端末に表示する
 ・端末のタッチ操作を受け付ける
というものです。
Unity Remoteを入れた端末上でアプリが動いているわけではないので、実際にビルドして端末にインストールして動かした場合とは全く別物です。
とはいえ、ビルドとインストールなしで手軽に雰囲気味わえるのは大変助かる話です。

Unity Remote導入

わたしの環境

  • Unity: 2019.2.19 64bit
  • Android端末: URBANO V02, Android 5.1

手順

◆Android端末側
1. Unity Remote 5をGoogle Playから取得してインストールする

2. USBデバッグをONにする
 端末の設定 -> 開発者向けオプション -> USBデバッグ で設定をONにします。
 (開発者向けオプションを有効にする手順は省略…)

3. Unityのエディタを起動するPCとUSBで接続し、Unity Remoteを起動

とりあえず端末側はここまでです。

◆PC側
1. 事前準備
 既に設定済みのものはスキップしてください。

  • Android Build Supportを入れておく
    File -> Build Settings でPlatform:Android を選択した際、右側の設定が表示される「Open Download Page」となっていた場合、そのボタンをクリックしてAndroid Build Support をインストールしておく必要があります。
    無事にインストールされれば、各種設定が表示されるようになります。図のようになっていればOKです。
    1.jpg

  • Android SDKのパスを通す
    Edit -> Preference -> External Tools -> Android の設定で、Android SDKのパスを設定しておきます。
    Unityと一緒にインストールしていた場合は「Android SDK Tools Installed with Unity(recommended)」にチェックを入れればよさそうです。
    自前でインストール済みの場合はそのパスを入れておきます。3.jpg
    Android SDKがまだ無い場合は、このあたりからAndroid Studioを取得・インストールすればSDKも一緒に取ってこれます。
    (またはAndroid Studioインストール後にSDK Managerで取得?)

  • Unity Remoteの端末設定を行う
    Edit -> Project Settings -> Editor -> Unity Remote の設定で、Deviceを「None」から「Any Android Device」に変更しておきます。
    それ以外の設定はおそらくデフォルトのままでよいと思います。
    (もちろん必要に応じて変えることもあるのでしょうが)
    2.jpg

2.Unity Remoteで再生したいシーンを起動して再生
 端末側が各種設定済み && Unity Remote起動済みであれば、端末側でシーンが再生されるはずです。
 もし再生されない場合は上記手順で抜けている部分が無いか確認し
 それでもだめならエディタを再起動してシーン再生しなおすとうまくいったりします。(よくある)

使用にあたっての覚え書き

Unity Remoteはあくまでもエディタ環境である

現在作成しているアプリについて

  • Windows PC版: マウス移動+クリック操作
  • Android端末版: タッチ移動+クリックに相当するボタンを表示してボタンタッチ操作

というように、プラットフォームに応じてUIや操作方法を変えるようにしていました。
そのため、エディタ上のシーン再生も

  • PC: Windows PC版と同じ
  • Unity Remote: Android端末と同じ

となってほしかったのですが、その区別がなかなかできずに苦労しました。
Unity Remoteでシーン再生した場合でも

  • Application.platform で取得されるプラットフォーム種別はRuntimePlatform.WindowsEditor
  • Application.IsEditor で取得される結果もtrue

であったためです。

Unity Remoteかどうか判別する方法

UnityEditor.EditorApplication.isRemoteConnectedを使うことでなんとか判別できました。
ただし注意があります:

  • シーン再生してから少しの間(Unity Remote側で表示されるまで?)はisRemoteConnectedがfalse
    Awake, Startなどの関数で参照するとうまく判断できないことがあります。

  • ビルド環境によってビルドエラーになる
    Android端末向けにビルドしようとしたら
    error CS0234: The type or namespace name 'EditorApplication' does not exist in the namespace 'UnityEditor' (are you missing an assembly reference?)
    というエラーが発生しました。
    EditorApplicationはUnity Editor環境でのみ使用できるようなので、コンパイルオプションで切っておく必要があります。

最終的にはこんな感じで携帯端末かどうか判断できるようにしました。

// 動作プラットフォーム判断
public class PlatformInfo
{
    static readonly bool isAndroid = Application.platform == RuntimePlatform.Android;
    static readonly bool isIOS = Application.platform == RuntimePlatform.IPhonePlayer;

    public static bool IsMobile() {
        // AndroidかiOSか、あるいはUnity RemoteだったらMobile扱いとする
    #if UNITY_EDITOR
        bool ret = UnityEditor.EditorApplication.isRemoteConnected;
    #else
        bool ret = isAndroid || isIOS;
    #endif
        return ret;
    }

}

以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む