【Unity】Addressable Assets のロケーション変更
アセットのダウンロード先を実行時に変更したい場合あるよね・・
例えば、
開発サーバとか、ステージングサーバとか、本番サーバとか
それぞれのURLを指定したいわけです。
UnityのAddressable Assetsでは AddressableAssetsSettings に設定できますが、
LoadPathはビルドに決められています。
そこで、
Addressables.InternalIdTransformFunc
がドキュメントに書かれていました
使ってみた。
1.AddressableAssetSettings からProfileを開く
2.RemoteLoadPath の URLを "BASE_URL" に指定
3.BASE_URLの部分を上書き
gist.github.com
必要であればログイン時にサーバから BASE_URL を返してもらえば環境によって切り替えできます。
【Javascript】Date.today()
Javascript では現在の日時を取得するメソッドがあります。
Date.now()
C#の DateTime.Today(時刻部分は 00:00:00)が欲しいので
書いてみた。
Date.today = function(){ const res = new Date(); // memo // from javascript 1.4 // dateObj.setHours(hoursValue[, minutesValue[, secondsValue[, msValue]]]) // before javascript 1.3 : https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours res.setHours(0, 0, 0, 0); return res; }
使い方
const today = Date.today(); console.log(today.toString()); // Wed Oct 30 2019 00:00:00 GMT+0900 (Japan Standard Time)
ログインボーナスを実装するぞ!
【Cocos2d-JS】cc.loader の拡張
リソースデータAに自前のデータBを依存していて、
データAをプリロード時にデータBも一緒にプリロードしたいです。
データAをインスタンス化してからデータBをプリロードしてもいいですが、
処理が複雑になってしまうです。
あるいは、同時時複数リソースを使用するデータが、
毎回パスを構築してプリロードするのもコード量が増える。
どう対処するかと
cc.loaderのソースとにらめっこしたら
cc.loader.register(...) を発覚しました。
cc.loader.register
cc.loader.registerを使って特定の拡張子でカスタムローダーを登録できます
cc.loader.register(['ext'], { load: function (realUrl, url, resource, cb) { /*....*/ cb(); // ロードが終わったらコールバックを実行します } });
.spine 拡張子を定義して一気にこの3つのファイルをロードする
cc.loader.register(['spine'], { load: function (realUrl, url, resource, cb) { let urls = []; urls.push(url.replace('.spine', '.atlas')); // atlas urls.push(url.replace('.spine', '.png')); // png urls.push(url.replace('.spine', '.json')); // json cc.loader.load(urls , (error, datas)=>{ // datas を使ってさらに依存しているデータを読み込む cb(); }); } });
使い方
cc.loader.load("res/assets/model.spine");
このように *.spine 拡張子をロードする場合、
登録したカスタムローダーが実行され、
必要なデータがロードされます。
【Unity】Unity WebGLのIME入力
UnityのWebGL対応でIME入力はほぼ必要ですが
検索したら、大体以下の公式リポジトリにたどり着きます。
GitHub - unity3d-jp/WebGLNativeInputField: WebGLでIME入力を可能にします
実はこの対応はあまり好みではないです。
なぜなら
ブラウザのダイアログやオーバーレイなどにしちゃうと
ゲームから離れシステムっぽくなってしまうです。
フォントも選択できないしね。
それで、UnityのWebGL用IME入力プラグインを書きました。
サンプルページ
kou-yeung.mygamesonline.org
unitypackage
使い方
上記のunitypackageをimportし、
InputFieldのGameObjectにWebGLInputをAddComponentするだけです。
面倒な設定など必要ありません。
【javascript】function.bind()でハマった。
タイトル通り、javascriptの function.bind()でハマった。
gist.github.com
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ
function.bind() で、文字列を分岐しようとしていますが、
default に分岐してしまったのです。
原因は
thisArg として渡されるプリミティブ値はオブジェクトに変換されます
Function.prototype.bind() - JavaScript | MDN
それで、
switch文は厳密等価演算子 === を使用している比較する
ということは、
String( "STR" ) === "STR" のように比較するため、
defaultに分岐しました。
// 1. bind する時に パラメータとして渡して使うか func.bind(null, str)(); // 2. toString() を使う switch(this.toString()) {...}
で変更すれば正しく分岐されます。