1.
Unityで参照渡しの拡張メソッド— z5t (@zzz5t) 2018年11月26日
ふと、Vector3拡張しようとしたらVector3は構造体で、参照渡しされない?らしくて「refとかで参照渡し出来んじゃね?」と思ったが「C#4では使用できない、C#7.2から出来る」とか言われて無理?、とか思ったが
丁度、2018.3.0なら出来んのかhttps://t.co/i13mowgmZT
2.
Unity分からんというかよくプログラミング分からんし、昨日コールバック作るのにデリゲートを使い、便利っぽい事に気付いたがなんかUniRxを使うとさらに便利らしいな、やってみるか— z5t (@zzz5t) 2018年11月26日
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 件のコメント:
コメントを投稿