mattak's blog

人生を1ミリ進める

自分の制作物でお金を稼いでみるプロジェクト

前置き

100%自分だけで作ったもので何かお金を稼ぐっていうのをフリーランス中になにかしらやってみたかった。

仕事も多少なれてきたので少しづつやっていく!

販売できそうな場所

思い浮かぶ選択肢

作成できそうなコンテンツ

当面の方針

高く売ることや需要があるものを売ることは、まずは考えずに、第二ステップでやっていきたい まずはできるだけハードルを低くして、カジュアルにつくれそうなものを作っていく方針。

NextAction

作れそうなもの/作りたいものアイデア出しをする ある程度の数 (100~) 揃ったら次のステップで詳細に詰めていく

とりあえず雑にアイデア

試行14

EnumSelection v1.0.0 をリリースしました! 🎉

github.com

どうゆうやつ?

複数のenumを一つのfieldで管理 & unity editor上で表示できます!

f:id:mattaclj:20180525004755p:plain

便利な機能とか

どのenumにするかを選ばせるpopupをcategoryとして制限できます。

enum宣言時

[EnumSelectionEnable(Category = "MyCategory")]
public enum Sample {
    Value1,
    Value2,
}

利用時

public class Demo : MonoBehaviour {
    [EnumSelectionOption(Category = "MyCategory")]
    public EnumSelection Value;
}

parseも超簡単

// EnumSelection Value;
var value1 = this.Value.GetEnum<Sample>();
var value2 = this.Value.GetEnum(typeof(Sample));
var value3 = this.Value.GetEnum(); // automatically parse enum by stored class name & assembly name

どうやって保存してる?

  SkillSlot:
  - AssemblyName: Assembly-CSharp
    ClassName: Sample.AttackSkill
    ClassValue: DamageMutiply
  - AssemblyName: Assembly-CSharp
    ClassName: Sample.DefenceSkill
    ClassValue: DamageDivide
  - AssemblyName: Assembly-CSharp
    ClassName: Sample.MagicSkill((ここに脚注を書きます))
    ClassValue: SpeedUp

Assembly名とclass名, enumの値を文字列で保存しています. 読み出すときにstring => enumの変換をする感じ。 enumの順序変えられても安全な設計に倒している

以上です!

🌟 ください!

github/mattak/EnumSelection

試行回数9

Unity 2018.1 のguidかぶりに注意

Unity 2018.1 で新しくプロジェクトを作成した際に、 Scenes/SampleScene.unity が作成され自動的に初期シーンとして開かれるようになりました。 とても便利な機能なのですが、unitypackageをexportする際には注意が必要です。

はまったところ

f:id:mattaclj:20180524234231p:plain

こんな感じの構造のunitypackageをexportしたかったのですが、新規作成したプロジェクトでimportしてみると下記のようなimport画面に...

f:id:mattaclj:20180524234434p:plain

ExamplesディレクトリがScenesディレクトリに、 EnumSelectionDemo.unitySampleScene.unity に認識されてしまっています.

なぜおきるのか?

unitypackageの実態はzipファイルなので、これを解凍してみるとその理由がわかります。 .unitypackage => .zip に変更して、解凍してます.

f:id:mattaclj:20180524235131p:plain

guidをdirectoryとして、3つのファイルが各ディレクトリに保存されています

  • <guid>/asset
  • <guid>/asset.meta
  • <guid>/pathname

詳しくは下記のような感じ

  • asset は実態ファイル (Sample.csのようなファイルがそのまま).
  • asset.meta は対応するunityのmetaファイル.
  • pathname は展開先のそのままのパスが1行書き込まれているだけ (例: Assets/Plugins/EnumSelection/Editor/EnumSelectionDrawer.cs)

この情報を元に.unitypackageはimportされるのですが、ここでexportした際のguidが展開先のプロジェクトのguidと一致しているとそのファイル もしくはフォルダが上書きされるという仕組みです.

つまり、今回は2つのguidがかぶっていたためにimportの認識がおかしくなっているように見えたというわけです

  • Scenes.meta のguid == Examples.meta のguid
  • SampleScene.unity.meta のguid == EnumSelection.unity.meta のguid

UnityEditor上でファイルやフォルダをリネームするとguidは保持したままにしてくれるので、SampleScene.unityとScenesのguidが別プロジェクトでも一致してしまっていたというわけです。

注意

通常はguidがかぶるような危険性はほぼ確率的には起こり得ないと思うのですが、Unityのデフォルトで生成される Scenes.meta と SampleScene.unity.metaはすべての新規プロジェクトで一致してしまうのでライブラリを作ってexportする際には気をつけてください..

下手をすると今後世界中のライブラリでguidの衝突が起きる可能性があるという感じです。

多分テンプレートからコピペするようなUnityの実装なので、guidを動的に生成するようにfixしてくれればこの問題はなくなると思うのですが、一旦修正されるまではexportする際のguidには注意が必要そうです.

あとでissueおくろう..

試行 8