2d-extrasの導入でつまずいた話
UnityのTilemap機能の公式拡張ライブラリに、「2d-extras」という、GitHubに公開されているものがあります。
標準機能のままでは作成できない、オートタイルやアニメーションタイルが作成できるものなのですが、これの導入でちょっとつまずいたので、解決法とともに記しておこうと思います。
なお、この記事では、Unity2019.4.24f1を使用しています。
2d-extrasの導入方法でググると、だいたい、
「Packages/package.jsonの、denpendencies内に次の文を追加してください」
的なことが書いてあります。
こんな文です。
"com.unity.2d.tilemap.extras": "https://github.com/Unity-Technologies/2d-extras.git#master"
実際にpackage.jsonに記述すると、こんな感じ。
しかし、この記述に従って導入を試してみると、以下のようなエラーが発生してしまいます。
このエラーの解決法がググってもわからなくて、なかなか難儀したのですが、以下の海外サイトに解決法が記されていました。
曰く、Unityのバージョンごとに、2d-extrasのブランチがあるから、末尾の#masterを環境に合わせたものにしてみてね、という感じです。
なるほど、冒頭の追加する文章の末尾にあった「#master」というのは、GitHubのブランチのことだったのか…と思いつつ、GitHubのページでブランチを覗いてみると、
あった!Unityのバージョンごとのブランチがある!
…というわけで、Unity2019.4.24f1の場合は、2019.4ブランチを使えばいいんじゃろ、ということで、package.jsonへの記述を以下のように変えてみたところ、無事に導入が完了しました。
どなたかの参考になれば幸いです。
iMac2019(27インチ)でVRカノジョを遊んでみた話
僕が所持しているiMac2019(27インチ)の最上位モデルは一応VRレディの性能を持っているので、そのうちVRで遊んでみたいなと思っていたのですが、実際にどの程度のクオリティで遊べるのか疑問もあったので、勢いでVR機器は買えないなあとも思っていました。
ネット上には、iMacでのVR体験談的なものはほとんどないですし。
そんな中、ふと思いついてネットを検索してみたら、やはりありました、VR機器のレンタルサービス!
サービスを提供している会社によって価格はマチマチですが、僕が狙っていたOculus Questの場合、2020年7月現在では一週間で約7000円というのが最安な感じっぽいでしょうか。
各社ともQuestはけっこう人気のようで、しばらく品切れ状態が続いていてたのですが、先日、ようやくレンタルすることができたので、その時の感想等を書いていきたいと思います。
ちなみに、今回利用したのはアストネスという会社のサービスです。
astoness.com
カメラを揺らしてもUGUIが揺れなくて困った話(と対処法)
Unityで制作中のゲームで、演出としてカメラを揺らそうと試みたところ、カメラは揺れるもののCanvas内のImageが揺れなくて困った…ということがあったので、備忘録として書いておきます。
なお、カメラを揺らすのはDoTweenのShakePositionを使用しています。
原因はCanvasの設定
原因は単純な話で、Canvasの設定を「Screen Space - Camera」にしていたせいでした。
(なお、「Screen Space - Overlay」にしている場合でも揺れません)
「Screen Space - Camera」にしていると、Render Cameraの位置とCanvasの位置が同期するので、UGUIの表示が揺れることはありません。
以下の画像では、Scene Viewではカメラごと豪快に揺れていますが、Game Viewでは何の変化もないので、ちょっと混乱してしまいますね。
同人ゲーム作家がiMac 2019(27インチ)を購入してみた
Unityの人気アセット「Dynamic Bone」をSpineのモデルに適用してみる
Unityアセットストアで人気のアセットに「Dynamic Bone」があります。
女性の胸や長い髪(ポニーテールとか)、動物の尻尾などの、いわゆる「揺れもの」の挙動を簡単に実装できるアセットです。
基本的には3Dモデルを動かすのを主目的としたアセットなのですが、Spine公式の海外フォーラムを見ていた時に、気になるスレッドを見つけました。
http://ja.esotericsoftware.com/forum/Dynamic-Bones-8392?p=38501
要約すると、「SpineのモデルにDynamic Boneを適用したいんだけど、うまくいかないんだ」「うーん、俺もなんだよね…あ、わかった!こういうコツがあったんだよ」「なるほどね!」みたいな内容のスレッドです。
考えてみると、Spineのモデルは、板ポリのメッシュにボーンとウェイトを設定して動かしているようなものなので、Dynamic Boneも動きそうです。
機会があれば試したいな…と思っていたところ、「Unity AssetStoreまとめ」さんのイベントでアセットストアのバウチャーを25$も頂いたので、早速購入し、実験してみました!(汗人柱さん、ありがとうございました!)
続きを読むNGUIのPopup Listのローカライズ
NGUIのLabelのローカライズは仕組みを覚えれば簡単なんですが、そのノウハウを元にしてPopup Listのローカライズをやろうと思うと、ちょっとハマるかもしれません。
NGUIでPopup Listを作る時、基本的にはUI Popup ListやらUI Spriteやらをアタッチしたオブジェクトの子にLabelを作成するかと思います。
こんな感じ。ここではシンプルに、Popup ListのOn Value Changeの箇所にLabelを追加して、Popup Listの選択内容をLabelに送っています。
さて、Labelのローカライズの時のノウハウを思い出すと、ここでもLabelに対してLocalizeコンポーネントを適用すればいいんじゃないか…と思いますが、これが罠です。
実際には、UI Popup Listの方をインスペクタでちょっといじるだけで完了です。とりあえず、ここではゲームに登場するマップ名をローカライズ対応するという目的のもと、Localization.csvに以下のような内容を記述しました。
Localization.csvをインポートしたら、UI Popup ListのOptions欄に、KEYを記入しちゃいます。そして、Localizedというチェックをオンにします。
これで、子のLabelにはローカライズされた文字列が送られます。
Key「forest」の日本語の時。
Key「forest」の英語の時。
NGUIでの文字列ローカライズ
NGUIで文字列(Label)のローカライズをしようとネットで検索をかけた時に、最近のバージョンの情報がなかったので、使い方をメモしておきます。
NGUIの使用バージョンは3.8.2、Unityは5.0.2です。
ここでは、こんな感じのボタンを作成したいとします。
日本語の時はこれ。
英語の時はこれ。
①翻訳ファイルの作成
まずは、ローカライズしたい内容を記入したtxtかcsvのファイルを用意します。
一番上の行に、「KEY,言語1,言語2…」というように使用したい言語を記入しておきます。
その後は下の画像のように、KEY列に任意の文字、各言語の列に入力したい文字列を記入します。
文字コードはShift-JISなんかだと日本語が正常に表示されないみたいなので、UTF-8にしておくのが無難なようです。
僕はGoogleスプレッドシートで作成したものをcsvとしてDLして使いました。
DLしたファイルは、「Localization.csv」とリネームしておきます。
②翻訳ファイルのインポート
csvを用意できたら、NGUIのExamplesフォルダにある「Localization.txt」を削除するか、違う名前に変更します。試してはいないですが、複数の設定ファイルがあるのも良くない気がしますので。
その後、先ほど用意したcsvを任意の場所に追加します。「Localization.txt」があったのと同じ場所でも別に問題はありません。
③翻訳ファイルの実装
ここまで来たら、ほぼ終わったも同然です。
NGUIでUI Labelを適当に作成し、「Add Component」から「Localize」を適用します。
適用された「UI Localize」の「Key」欄に、csvで入力したKEYの文字を入れると、Preview欄に設定した情報が表示されます。
Preview欄の言語設定の右のボックス(上の画像の「Close」や「閉じる」がある場所)をクリックすると、Scene、Gameウィンドウで表示が変わります。
あとは、ゲームの起動時にシステム言語設定を取得し、任意のローカライズ言語に処理を振り分ければ完了です。下記ではシステムが日本語なら日本語、それ以外なら英語に振り分けています。
void Start () {
if (Application.systemLanguage == SystemLanguage.Japanese) {
Localization.language = JP;
}else{
Localization.language = EN;
}
}
手順さえ覚えれば、わりと簡単に実装出来ます。