- 投稿日:2020-08-09T23:14:01+09:00
【Unity】アニメーションがMissingになった時の解決方法
Unityで作ったアニメーションデータが「Missing」になってしまい動かなくなった!というのは多くの方が経験されていると思います。
今回はその問題について改善方法があるようなので紹介したいと思います。
- 投稿日:2020-08-09T20:20:54+09:00
Unity宴でUtage以下のアセットコードをカスタマイズしてしまった後に宴をアプデートするための作業ログ
Unity宴でUtage以下のアセットコードをカスタマイズしてしまった後に宴をアプデートするための作業ログ
この作業によって判断したいこと
デフォルトアセットのコードをカスタマイズしてしまうと、今後宴アップデートが走った際にカオスになる。
よって、
1. カスタマイズ箇所を把握した上で、アプデ後にカスタマイズ部分を追記するか
2. そもそも追記しなくでも良い方法を模索するか
の判断をするための作業でもある。その他参考情報:宴3のアップデートガイド
https://madnesslabo.net/utage/?page_id=8551
事前調査
- 現在の宴バージョンは3.8.3である。
- 現時点で「Utage」以下においてカスタマイズしてしまっているコードを完全把握する。
- 記憶では、UtageUguiTitleとUtageUguiMainGameをカスタマイズしているはず。
調査結果
- UtageUguiTitleをカスタマイズしていた
- シナリオを周回することを目的とした独自のシナリオチャート画面をscenariochartとして定義していた。
- UtageUguiMainGameをカスタマイズしていた。
- ゲームの進行状況を画面で把握してもらうためのプログレス画面をscenarioprogressとして定義していた。
カスタマイズ箇所を洗い出す
UtageUguiTitle
///
チャート画面
public UtageUguiScenarioChart scenariochart;//「チャート」ボタンが押された
public virtual void OnTapScenarioChart()
{
Close();
scenariochart.Open(this);
}
UtageUguiMainGame
///
チャート画面
public UtageUguiScenarioChart scenariochart;///
プログレス画面
public UtageUguiScenarioProgress scenarioprogress;//「チャート」ボタンが押された
public virtual void OnTapScenarioChart()
{
Close();
scenariochart.Open(this);
}//「プログレス」ボタンが押された
public virtual void OnTapScenarioProgress()
{
Close();
scenarioprogress.Open(this);
}結果に漏れがないか調べる
- VisualStudioの「複数ファイルで検索」機能を使用して、scenariochartとscenarioprogressを「Utage」以下で全検索してみる
検索結果
scenariochart
- 先の調査結果以外ではヒットしなかったので問題なし
scenarioprogress
- 先の調査結果以外ではヒットしなかったので問題なし
判断
- すでに独自コードはオリジナルプロジェクトフォルダ内の「Script」以下でコーディングしていたので、「Utage」以下でのカスタマイズ量は微量であることが把握できた。よって仮にアップデートで上書きされても、上記を追記する事で稼働させることができるから、今後も「UtageUguiTitle」と「UtageUguiMainGame」を必要に応じてカスタマイズする方向で開発することにする。実は他にも色々といじりたいこともあるし。。。
アプデ手順
- Utageフォルダを丸ごと削除して新規インポート
- 該当箇所に必要なコードを追記
- 表示動作検証
アップデート結果
- 表示動作ともに問題なし
- 投稿日:2020-08-09T20:11:16+09:00
Unityでベクターファイル(SVG)を扱う3(マスク&uGUI編)
はじめに
前回svgファイルを表示するところまでやりましたが、ほかにもできることをいくつか紹介します。
SpriteMask
通常のSpriteのように、SpriteMaskにインポートしたSVGテクスチャを指定すれば、通常通り使用できます。
SVG Image
uGUIのCanvas内で使用したい場合は、こちらを使用します
例ではRecttramsformのWidthとHeight(250x250)に合わせていますが、Preserve Aspectにチェックすれば、縦横比を維持したまま表示することもできます。
次回
RawImageはMaskコンポーネントでマスクとして使用できるようなので、これを使用して簡単な画面遷移を作ってみます
参考
VectorGrapics
https://github.com/Unity-Technologies/vector-graphics-samples/blob/master/Documentation/vectorgraphics.md
- 投稿日:2020-08-09T20:10:46+09:00
Macでpng形式の画像の背景を透過処理する方法
- 投稿日:2020-08-09T19:58:12+09:00
Visual Studio CodeでUnityの自動補完を設置する(MacOS)
最近はMacBookでUnityの使用が始まり、VSCodeの自動補完はなかなか出ないので、いろいろ調べてから解決した。解決策を整理しておいた。
ちなみに、解決法はほとんどこのビデオから見つけたので、参考で見てください: https://www.youtube.com/watch?v=btga03_gGfw手順はこんな感じになっている:
1. Unityのプロジェクトを開けて、[Unity] - [Preference] - [External tools] - [External Script Editor]から、Visual Studio Codeを選択して、[Editor Attaching]がチェックしていることを確認する。
2. Monoをダウンロードする。その後ターミナルを開けて、mono
を入力して、ちゃんと出力が出ると問題なし。
3. VSCodeの機能拡張でC#をダウンロードする。
4. Unityで[Window] - [Package Manager]でVisual Studio Code Editorのバージョンを1.1.3に変更する。
5. UnityとVSCodeを閉めて、もう一度開けたら、自動補完機能が正常に動くようにできた!
- 投稿日:2020-08-09T18:01:11+09:00
【Unity】【エディタ拡張】複数のオブジェクトをまとめてPrefab化する
Unity標準機能で出来ると思ったら出来なかった
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; /// <summary> /// 複数のオブジェクトをまとめてprefab化するエディタ拡張 /// </summary> public class MultiPrefabCreator : EditorWindow { // 出力先 private string PATH_FOLDER = "Assets/Resources/Prefab/Temp/"; private HashSet<GameObject> m_dropList = new HashSet<GameObject>(); //メニューに項目追加 [MenuItem("拡張/MultiPrefabCreator")] static void open() { EditorWindow.GetWindow<MultiPrefabCreator>("MultiPrefabCreator"); } void OnGUI() { EditorGUILayout.LabelField("MultiPrefabCreator"); var dropArea = GUILayoutUtility.GetRect(0.0f, 50.0f, GUILayout.ExpandWidth(true)); GUI.Box(dropArea, "ここにPrefab化したいものをまとめてをドラッグ&ドロップ"); var evt = Event.current; switch (evt.type) { case EventType.DragPerform: if (!dropArea.Contains(evt.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; DragAndDrop.AcceptDrag(); break; case EventType.DragExited: foreach (GameObject go in DragAndDrop.objectReferences) { Debug.Log(go); m_dropList.Add(go); } CreatePrefabs(); Event.current.Use(); break; } } /// <summary> /// Prefab化 /// </summary> void CreatePrefabs() { foreach (GameObject go in m_dropList) { if (null == m_dropList) { return; } string prefab = PATH_FOLDER + go.name + ".prefab"; PrefabUtility.SaveAsPrefabAsset(go,prefab); } m_dropList.Clear(); } }Event.currentで処理中のEventが取れるので、
EventType.DragPerform: ドラッグアンドドロップ イベント中
カーソルの表示を変える
EventType.DragExited: ドラッグアンドドロップイベント終了
Prefab作り始める
参考
- 投稿日:2020-08-09T17:11:33+09:00
VRChatでワールドをつくってみる (随時更新)
この記事は
VRChatについて詳しくないけど、ワールドを作ってみたくなった。
せっかく作業ログを書きたいので、この記事は随時更新していくつもり。筆者のスキルレベル
- Unityはチュートリアルをいくつかやったことがある。
- VRChatは1回だけワールドを巡ってみたことがある。正直よくわかっていない。
環境セットアップ
ガイド
日本語でわかりやすく解説してくれているチュートリアルもたくさんあるけど、環境セットアップみたいなバージョン依存のあるものは公式ガイドを読むのがトラブルに遭遇する確率が低い気がしている。
Unityの該当バージョンのインストール
- 2020-08時点で Unity 2018.4.20f1
- VRChatSDKとバージョンを対応させる必要がある。
- 過去にUnityをインストールしたことがあって、Unity Hubを使える環境なら、下記をブラウザURLにコピペするとよい。
unityhub://2018.4.20f1/008688490035VRChat SDKのインストール
- VRCSDK2とVRCSDK3があるようだ。混ぜるなキケンらしい。
- 今回は VRCSDK2 にする。
- https://vrchat.com/home/download
- 投稿日:2020-08-09T14:29:28+09:00
Friction Joint2Dの解説
今回はFriction Joint2Dの解説をしていきます。
Friction Joint2Dとは
Friction JointのFrictionとは、「摩擦」という意味です。
しかし、オブジェクトの摩擦係数を操作するというものではなく、イメージ的には動きや回転の抵抗を操作するといった感じです。Friction Joint2Dの各パラメータ
全部これまでに出たパラメータですので、今回は重要だと思うところをいくつかピックアップして解説していきます。・Auto Configure Connected Anchor
Connected Rigid BodyがNoneの場合は
チェックを外さなくても問題ありません
。
しかし、そうでない場合はこのジョイントではチェックを外し、Connected Anchorの座標を(0,0)にする
ことをオススメします。その方がより自然な挙動をすると思います。・Max Force
Connected Rigid BodyがNoneのときにここの値を大きくすると、
オブジェクトが空中に固定
されたような感じになります。
イメージとしては、ホワイトボードにくっつけられた磁石のような感じです。力が加わればその方向に動きます。使い道
このジョイントの最大の特徴は「
動かしにくいけど、動かしても元の位置に戻らない
」ところにあると私は思います。
なので、重い扉
や、乗ると徐々に下がる床
などを作るときに使えると思います。・おわりに
今回は少し味気ない感じになってしまいました。自分なりに思考を凝らしたつもりだったんですが。
これから少しずつそういうスキルも上げていこうと思います。
ジョイントについてある程度の理解はしたので、次回はジョイントに共通するパラメータのまとめを記事にしようと思います。
- 投稿日:2020-08-09T10:48:38+09:00
Macを初期化。Unityライセンス返却の記録
- 投稿日:2020-08-09T10:01:21+09:00
Unityでbmp画像を読み込むと色がおかしくなる症状
- 投稿日:2020-08-09T02:16:53+09:00
[Unity]UMPでrtmpストリームを受け取ってみる
こんにちはこんばんは、VRizeで技術班としてお手伝いをさせてもらっているよつばです。
今回は8月5日に配信されたぶいっとでFAIOがVRizeのDJとして参加させて頂いたときに作成したバーチャルワールドのスクリーンに利用したアセットの利用法を紹介していきます。はじめに
unityは標準でVideoPlayerコンポーネントを用意していますが、mp4の動画しかストリーミング再生できないという制限があります。
RTMPなどのソースの再生はデフォルトでは対応していないのでこちらで用意するかアセットを頼る必要があります。
自分たちで用意するのは大変なので、アセットを調べていたところ、UMPというアセット(45$)がrtmpや他のプロトコルのストリーム再生に対応していたので、こちらを使ってみることにしました。この記事の対象者
- 4500円くらい払ってやるぜ!って人
- Unityでストリーム再生したい人
UMPが対応しているプロトコル
アセットストア上で明記されている対応規格
メディア 対応規格 (主な)ローカルビデオファイル 3gp avi flv swf m4v mkv ogg mov qt webm wmv ストリーム HTTPS HTTP HLS RTSP RTMP できればyoutubeの動画・ライブも再生できたらよかったのですがyoutube側がころころ仕様を変えるのか他のアセットでも再生ができないなどの意見が寄せられていたので、仕方ないのかなという感じです。
UMPの使い方
※UMPをUnityのプロジェクトにインポートした前提でお話します。
動画を再生する
準備
Project
->UniversalMediaPlayer
->Prefabs
からUniversalMediaPlayer
をHierarchy
に追加します。
インスペクタの解説
Renderring GameObjects
動画を描画するオブジェクトを指定します。Sizeを変えることで、描画対象を増やすことが可能です。
今回はCube、Plane、Sphereを描画対象にしてみました。
Path to video file
再生したい動画のパスを入力します。
公式のドキュメント(インポート時に付属してます)から使用例を引用しておきます。
動画の場所 使用例 StreamingAssetsフォルダ
(StreamingAssets\myVideoFile.mp4)file:///myVideoFile.mp4
ローカルストレージ
(C:\MyFolder\Videos\video1.mp4)file:///C:\MyFolder\Videos\video1.mp4
C:\MyFolder\Videos\video1.mp4
ストリーム rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov 普段ファイルのパスを指定するのと同じ要領で大丈夫そうです。
僕の場合は、SRSを使ってOBSの映像をrtmpで経由したので以下のようなアドレスにしました。
Additional properties
- AutoPlay : プレイ時に自動的に再生するようになります
- Loop : ループ再生するようになります.
- Loop(smooth) : Loopと違いバッファを持たない設定のようです。(正直よくわかってない)
- Mute : ミュートです
Advanced options
今回は特に設定しないため説明は省きます。
Events & Logging
動画の再生時、停止時やエラー発生時に発火させるイベントを指定できるようです。
これも今回は利用しないので省きます。再生
レンダリング対象のオブジェクトとURLの指定ができたら準備は完了です。
後はUnity Editorで実行すればオブジェクトに動画が描画されるはずです。
複数の動画を再生する
UniversalMediaPlayerを増やす
ヒエラルキーに新しくプレファブを入れ、インスペクタで別のURLにするなり、ローカルのパスを指定するだけで別の動画を再生できます。独自のshaderを使う
MainTexにそのまま動画がいくので特に設定はいりません。
さいごに
さすがに有料アセットだけあって使いやすかったです。案外Unity上でストリームを再生する方法がなく、困っていたのでUMPにはとても助けられました。今回は動画を流すことにフォーカスをあてましたが、今度の記事では更にshaderで加工する方法も書いてみようと思います。ここまでお付き合いいただきありがとうございました。