tk3118’s blog

技術ブログっぽいただのブログです。

よくお世話になる素材サイト一覧

概要

今では、フリー素材が置いてあるサイトさんはいっぱいあると思いますが、素材に困っている時は、大抵時間がないことが多いのではないでしょうか? そのような場合だと、用途に絞って初めから探すサイトの辺りをつけておいた方が効率的だと思います。 こちらがその参考になれば幸いです。

条件

1, 素材の選択肢が豊富 2, 後々の事を考えて商用利用可能(ライセンス)

上記の条件で必要になることが個人的に多かったので、まとめてみます。 ※全てのものが商用利用可能ではない場合もあるため注意が必要です。

サイト一覧

画像

フォント

モーション

その他

【Unity】複雑なアニメーション管理をシンプルに出来る「SimpleAnimation」の紹介

Simple Animationとは?

Unityの公式が作っているアニメーション再生ツールです。 従来の「Animator」+「AnimatorController」は、 複雑であるとの声が多くあり より複雑なPlayablesのサンプルが欲しいという声も沢山あり、今回、その2つを同時に解決するものとして、

↓Unityの公式リポジトリはコチラ.
github.com

導入する

manifest.json に以下のものを記入します.

{
    "com.aria.unity.simpleanimation": "https://github.com/TK-Aria/SimpleAnimation.git",
}

↓こちらにてパッケージを公開しております。
github.com

forkしたものに以下の対応を行いました。

  • UPM対応(Unity PackageManager)
  • warning対応

使い方

参考資料

【Unity】JsonUtilityでルート配列のデシリアライズ

概要

APIのレスポンスが↓こんな感じで返ってくることないでしょうか?

[
    {
        "id": 123,
        "project_id": 234,
    },
    {
        "id": 456,
        "project_id": 567,
    },
    {
        "id": 789,
        "project_id": 890,
    },
    ...
]

しかしUnityのJson周りで JsonUtility を使用している場合
ルートが配列になってしまっている↑のようなJsonはデシリアライズ出来ないです。

これの解決法として自分は以下の2通りで対応しました。

  • 配列にも対応できるようにそれ用の機能を作る。
  • 使う側で工夫する

実装

今回はより簡単な「使う側で工夫する」方法で話していきたいと思います。

まず以下のようなクラスを追加します。

/// <summary>
///  レスポンスで返ってきている配列の1要素
/// </summary>
[Serializable]
public class Hoge
{
    ...
}

/// <summary>
///  レスポンスで返ってきている配列の1要素
/// </summary>
[Serializable]
public class ResponceData
{
    public Hoge[] root;
}

あとは、レスポンス受け取り部分で以下のような感じに 'json' を編集してあげれば大丈夫です。
※ ここでは例として 'UnityWebRequest' を使用しています。(responce変数)

var data = new ResponceData();
json = "{" + $"\"root\": {responce.downloadHandler.text}" + "}";
JsonUtility.FromJsonOverwrite(json, data);

※ 文字列補完が使えないC#のバージョンでは, string.Formatなどを代わりに使ってください。

もうちょっとだけ使いやすくする為に
以下のようなものを作っておくと同じ対応を行う時
少し便利に使えるようになると思います。

[Serializable]
public abstract class ResponceData<T>
{
    public T[] root;
}

public static void DeserializeArray<T>(T target, string json)
    where T :  ResponceData<T>
{
    string _json = "{" + $"\"root\": {json}" + "}";
    JsonUtility.FromJsonOverwrite(_json, data);
}

実際に使う際は

// 宣言しておく (Unity2019から要らない予定).
[Serializable]public class HogeData : ResponceData<Hoge>{}

[SerializeField] HogeData 


DeserializeArray(data, responce.downloadHandler.text);