20200809のUnityに関する記事は11件です。

【Unity】アニメーションがMissingになった時の解決方法

Unityで作ったアニメーションデータが「Missing」になってしまい動かなくなった!というのは多くの方が経験されていると思います。
今回はその問題について改善方法があるようなので紹介したいと思います。

本文はこちらです。
https://tedenglish.site/unity-animation-missing/

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

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フォルダを丸ごと削除して新規インポート
  • 該当箇所に必要なコードを追記
  • 表示動作検証

アップデート結果

  • 表示動作ともに問題なし
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityでベクターファイル(SVG)を扱う3(マスク&uGUI編)

はじめに

前回svgファイルを表示するところまでやりましたが、ほかにもできることをいくつか紹介します。

SpriteMask

通常のSpriteのように、SpriteMaskにインポートしたSVGテクスチャを指定すれば、通常通り使用できます。
image.png

SVG Image

uGUIのCanvas内で使用したい場合は、こちらを使用します
例ではRecttramsformのWidthとHeight(250x250)に合わせていますが、Preserve Aspectにチェックすれば、縦横比を維持したまま表示することもできます。
image.png

次回

RawImageはMaskコンポーネントでマスクとして使用できるようなので、これを使用して簡単な画面遷移を作ってみます

参考

VectorGrapics
https://github.com/Unity-Technologies/vector-graphics-samples/blob/master/Documentation/vectorgraphics.md

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

Macでpng形式の画像の背景を透過処理する方法

人生で初めて透過処理とをしてみた。

(1)表示 → マークアップツールバーを表示
スクリーンショット 2020-08-09 19.45.20.png

(2)インスタントアルファを選択
スクリーンショット 2020-08-09 19.45.38.png

(3)背景のどこかをドラッグすると背景が赤くなるので、
   ちょっとずつドラッグしながらいい感じに調節
スクリーンショット 2020-08-09 19.46.09.png

(4)調節が終わったら、編集 → カット
スクリーンショット 2020-08-09 19.47.50.png

(5)Unityのassetにドラック&ドロップ!
   TextureTypeをsprite(2D and UI)にするのを忘れずに!
スクリーンショット 2020-08-09 20.03.44.png

完成!!!いい感じ!!!
スクリーンショット 2020-08-09 20.04.05.png

画像の透過処理とかムリ〜〜〜って思ってたけど、やってみたらとても簡単でした。:santa:

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

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を閉めて、もう一度開けたら、自動補完機能が正常に動くようにできた!

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

【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作り始める


参考

UnityEditor上で複数のゲームオブジェクトをプレハブ化する方法

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

VRChatでワールドをつくってみる (随時更新)

この記事は

VRChatについて詳しくないけど、ワールドを作ってみたくなった。
せっかく作業ログを書きたいので、この記事は随時更新していくつもり。

筆者のスキルレベル

  • Unityはチュートリアルをいくつかやったことがある。
  • VRChatは1回だけワールドを巡ってみたことがある。正直よくわかっていない。

環境セットアップ

ガイド

  • 日本語でわかりやすく解説してくれているチュートリアルもたくさんあるけど、環境セットアップみたいなバージョン依存のあるものは公式ガイドを読むのがトラブルに遭遇する確率が低い気がしている。

  • https://docs.vrchat.com/docs/setting-up-the-sdk

Unityの該当バージョンのインストール

  • 2020-08時点で Unity 2018.4.20f1
  • VRChatSDKとバージョンを対応させる必要がある。
  • 過去にUnityをインストールしたことがあって、Unity Hubを使える環境なら、下記をブラウザURLにコピペするとよい。
unityhub://2018.4.20f1/008688490035

VRChat SDKのインストール

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

Friction Joint2Dの解説

今回はFriction Joint2Dの解説をしていきます。

Friction Joint2Dとは

Friction JointのFrictionとは、「摩擦」という意味です。
しかし、オブジェクトの摩擦係数を操作するというものではなく、イメージ的には動きや回転の抵抗を操作するといった感じです。

Friction Joint2Dの各パラメータ

FrictionJoint2D_param.png
全部これまでに出たパラメータですので、今回は重要だと思うところをいくつかピックアップして解説していきます。

・Auto Configure Connected Anchor

Connected Rigid BodyがNoneの場合はチェックを外さなくても問題ありません
しかし、そうでない場合はこのジョイントではチェックを外し、Connected Anchorの座標を(0,0)にすることをオススメします。その方がより自然な挙動をすると思います。

・Max Force

Connected Rigid BodyがNoneのときにここの値を大きくすると、オブジェクトが空中に固定されたような感じになります。
イメージとしては、ホワイトボードにくっつけられた磁石のような感じです。力が加わればその方向に動きます。

使い道

このジョイントの最大の特徴は「動かしにくいけど、動かしても元の位置に戻らない」ところにあると私は思います。
なので、重い扉や、乗ると徐々に下がる床などを作るときに使えると思います。

・おわりに

今回は少し味気ない感じになってしまいました。自分なりに思考を凝らしたつもりだったんですが。
これから少しずつそういうスキルも上げていこうと思います。
ジョイントについてある程度の理解はしたので、次回はジョイントに共通するパラメータのまとめを記事にしようと思います。

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

Macを初期化。Unityライセンス返却の記録

Macの調子が悪いのかBlenderの調子が悪いのか
これを機にMacを初期化してみようと思います。
必ずUnityのライセンス返却とログアウトを
忘れてはいけないと聞いた事があるので
備忘録として行った作業を記録しておく。

まずはライセンスの返却。
歯車の隣の自分のマークをクリック。
ライセンスの管理を選ぶ。
スクリーンショット 2020-08-09 10.15.47.png

ライセンスの返却を選ぶ。
スクリーンショット 2020-08-09 10.16.04.png

ライセンスの返却
使用しているシリアル番号のアクティビティ?
2台までしか使えないのでこのMacを解除してという意味だろう。
またこのMacで使うので一旦ほっとこ。
確認を選ぶ。
スクリーンショット 2020-08-09 10.16.28.png

サインアウトをする。
スクリーンショット 2020-08-09 10.19.44.png

さあ!これで上手いこといくかは初期化して起動するまでわからない。

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

Unityでbmp画像を読み込むと色がおかしくなる症状

概要

表題の通り、bmp画像をunityにインポートすると色がおかしく表示される現象についての解決策になります。

以下の通り、左がbmp画像ファイルですが、unityにインポートすると右のように青くなった色で表示されます。

bmpcolor.PNG

対策

対策としては、bmp画像をpng画像に変換してから読み込むと色合いがおかしくならずに読み込むことができました。

pmg.PNG

3Dモデル(fbxとかMMDモデルとか)でbmpファイルがテクスチャとして使われているケースがあるので、そのときはお気をつけください。

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

[Unity]UMPでrtmpストリームを受け取ってみる

こんにちはこんばんは、VRizeで技術班としてお手伝いをさせてもらっているよつばです。
今回は8月5日に配信されたぶいっとFAIOがVRizeのDJとして参加させて頂いたときに作成したバーチャルワールドのスクリーンに利用したアセットの利用法を紹介していきます。

はじめに

unityは標準でVideoPlayerコンポーネントを用意していますが、mp4の動画しかストリーミング再生できないという制限があります。
RTMPなどのソースの再生はデフォルトでは対応していないのでこちらで用意するかアセットを頼る必要があります。
自分たちで用意するのは大変なので、アセットを調べていたところ、UMPというアセット(45$)がrtmpや他のプロトコルのストリーム再生に対応していたので、こちらを使ってみることにしました。

この記事の対象者

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からUniversalMediaPlayerHierarchyに追加します。
image.png

インスペクタの解説

image.png

Renderring GameObjects

動画を描画するオブジェクトを指定します。Sizeを変えることで、描画対象を増やすことが可能です。
今回はCube、Plane、Sphereを描画対象にしてみました。
image.png

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で経由したので以下のようなアドレスにしました。
コメント 2020-08-09 013118.png

Additional properties

image.png

  • AutoPlay : プレイ時に自動的に再生するようになります
  • Loop : ループ再生するようになります.
  • Loop(smooth) : Loopと違いバッファを持たない設定のようです。(正直よくわかってない)
  • Mute : ミュートです

Advanced options

今回は特に設定しないため説明は省きます。

Events & Logging

動画の再生時、停止時やエラー発生時に発火させるイベントを指定できるようです。
これも今回は利用しないので省きます。

再生

レンダリング対象のオブジェクトとURLの指定ができたら準備は完了です。
後はUnity Editorで実行すればオブジェクトに動画が描画されるはずです。
image.png

複数の動画を再生する

UniversalMediaPlayerを増やす

image.png
ヒエラルキーに新しくプレファブを入れ、インスペクタで別のURLにするなり、ローカルのパスを指定するだけで別の動画を再生できます。

独自のshaderを使う

MainTexにそのまま動画がいくので特に設定はいりません。

さいごに

さすがに有料アセットだけあって使いやすかったです。案外Unity上でストリームを再生する方法がなく、困っていたのでUMPにはとても助けられました。今回は動画を流すことにフォーカスをあてましたが、今度の記事では更にshaderで加工する方法も書いてみようと思います。ここまでお付き合いいただきありがとうございました。

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