2018年11月27日火曜日

UnityでC#7.2機能を使う+VSCodeがLangVersion defaultが基本の為C#7.0で認識するのを修正する+UniRxとZenjectを試そうとちょっと古い記事参考にしてたら修正必要だった

ほぼ自分用メモ、めちゃ適当なので注意

1.

2.


UnityでC#7.2機能を使う


http://baba-s.hatenablog.com/entry/2018/09/12/205000を参考にしてUnity Hubから2018.3.0b11を入れて新規プロジェクトで試した。

普通にそれでいけるっぽい、が

Unityで機能は使えるっぽいがVSCodeがプロジェクトをC#7.0だと認識して、VSCodeでインテリジェンス?がうまく働かない


VSCodeがC#7.0だと認識するのを修正する


基本的にはUnityプロジェクト内にある.csprojファイルの<LangVersion>latest</LangVersion>とか書いてる所らへんを全部7.2とか7.3とかに指定すればいいっぽい様に見えるが

そうやってもなんかうまくいかない。


ていうか、それで解決してもVSCodeを閉じてUnityから開き直すと毎回なんか.csprojが書き換えられる?っぽいので死ぬ。


UnityアセットストアにあるVSCodeってアセットを入れる



VSCode

これを入れる、なんかVSCode用のなんかっぽい

入れたら、UnityのEdit -> PreferencesにVSCodeって項目が増えてるのでVSCodeいってVSCodeのcode.cmdのパスを設定したり、Enable Integrationにチェックを入れたりする

これ、環境設定とか勝手に書き換えられる。
UnityのPreferencesのExternal Toolsの所とか書き換えられる。


そうしたらうまくいくかというと、LangVersionを修正したりすると、そこそこうまくいく(?)

が、毎回LangVersionを変えないといけない。

だけども、入れたアセットのVSCode.csがLangVersionを変えてる?挿入してる?節があるっぽくて、そこをいじればいいっぽい。


アセットVSCodeのVSCode.csをいじってLangVersionを変える



アセットのVSCode入れたらAssets以下にVSCodeってフォルダが出来てると思う、その中のPlugin -> Editor -> VSCode.csを編集する。

「<LangVersion>」で検索して「<LangVersion>default</LangVersion>」ってなってる部分を<LangVersion>7.2</LangVersion>」とか<LangVersion>7.3</LangVersion>」とかにする。

そうした後、VSCodeを一回閉じてUnityからまた開いたりする。

が、たぶん、.csproj見るとLangVersionの所まだうまく変わってないと思うので適当に片っ端から全部<LangVersion>7.3</LangVersion>とかに変える。

すると、なんか以降はVSCode再起動したりしてもちゃんとうまくいくっぽい。


その後…


UniRxとZenjectを試した



アセットストアからUniRxとZenjectを入れた。

https://developer.aiming-inc.com/unity/zenject/をやる事にした。

が、Zenject部分とUniRx部分でそれぞれ引っ掛かった。


Zenject、.AsSingle()を一回にする



https://github.com/svermeulen/Zenject#upgrading-from-zenject5を参考に

InstallerSample.csを以下の様に修正する。


public override void InstallBindings(){
    Container.Bind(typeof(ZenjectSample) ,typeof(IInitializable), typeof(IDisposable)).To<ZenjectSample>().AsSingle();
}


これでいける。


UniRx、IObservableが見つからない→System.IObservable



IObservableで構文エラーでる。なんか最近のUnityで.NETのバージョンが4以上だと躓くっぽい?よく知らん。

http://mslgt.hatenablog.com/entry/2017/01/31/022302を見たが状況が違うかな…
ていうか、IObservable.cs確認したらもう「NET_4_0」が入ってたし。

とりあえず、System.IObservableとするか、「using System;」を入れれば良いっぽい。


これで動く



以上でhttps://developer.aiming-inc.com/unity/zenject/のサンプル?が動くはず。


以上



最近Unityを本格的に始めている?が、まあ、よくわからん…

とりあえず一週間で謎のゲームになってない未完成の何かを作った。
キャラの性能データにScriptableを色々使ったり、Debug.DrawLineみたいな細い線をゲーム画面に描くのにGLを使ったり、攻撃とかのエフェクト?にシェーダー(参考[1][2][3][4])を書いたりしてみた。
(ちなみに、FixedUpdateの存在を忘れていて全部Updateでやってるので無茶苦茶になるかも、またUIがカメラ動くとブレブレするのはLateUpdateを使えば解決出来たと思う)


それはとりあえず一旦放置して、また別のゲーム作ろうと思います。


Zenjectはよく分かってないが、特に大規模な開発で役に立つ物らしい。
小規模な物では使う必要ない…というか無駄にややこしくなるんじゃないかな…と思うが、知らない物があると知りたくなっちゃうので…とりあえず試してみた。

UniRxもよく分かってないが、デリゲートとかの?eventの強化版みたいな感じらしい。
デリゲートありがたいがちょっと使いにくいなーとか思ったのでいいかもと思い、とりあえず試してみた。


ゲーム作ってる途中で、なんか色々仕組みというか、どう設計するか、みたいなのをずいぶん考え込んでしまう。(後々改変したりしやすくしたいと思うので)
が、経験値が足りないのでイマイチ正解が分からず、そこで詰まったり、何度も作り直すという現象が起きがち、
とりあえず、実際にどんどん作っていくのが一番いいっぽいのであんまり考え込まない様にゲーム作るよ…

0 件のコメント:

コメントを投稿