- 投稿日:2020-10-22T22:59:39+09:00
Unity:オブジェクトの表示・非表示のエラー
事象
GameOverメッセージを隠しておいて、ゲームオーバーになった時に表示したかったが、表示できなかった。
内容
まず、以下のコードをGameOverテキストを貼り付けたパネルにアタッチしたが、start()の非表示処理は動くのに、update()の表示処理が動かなかった
public class gameStateManager : MonoBehaviour { public static bool gameState = true; void Start() { this.gameObject.SetActive(false); } void Update() { Debug.Log("test"); if (gameState==false) { this.gameObject.SetActive(true); } } }デバッグ用にログを見たが、ログも出力されていない状態
原因
GameOverを表示するパネルが以下のスクリプトで非活性になり、update()が以後行われなくなっていることが原因だった。
void Start() { this.gameObject.SetActive(false); }例えば、数秒後に消えるオブジェクトなどはそれ自身が完全にメモリ上から消える必要があるので、this.gameObject.SetActive(false);で削除して良いが、今回のように表示、非表示を繰り返したい場合は、自身を削除するという処理をするとその後のupdate()が効かなくなる
対処
以下のコードをMainCameraにアタッチして表示非表示の切り替えをすることにした
public class gameStateManager : MonoBehaviour { public static bool gameState = true; public string gameOverObject = "GameOverPanel"; GameObject gameObject; void Start() { gameObject = GameObject.Find(gameOverObject); gameObject.SetActive(false); } void Update() { if (gameState==false) { gameObject.SetActive(true); } } }
- 投稿日:2020-10-22T21:51:25+09:00
Vufoliaを使用したアプリを作る場合の注意点
ARCoreより対応端末の多いVuforiaのARマーカーを使った簡単なARアプリを開発しようと考えており、アプリをリリースしてから更新予定はなかったので、ライセンス更新は必要ないと思いましたが念の為Slackで質問したところ、営業担当から返信があり契約更新の問題以前にVuforiaのライセンスにはかなり危険な部分が多いことが分かったので注意喚起のために投稿します。
まず契約ですが、年商によって金額が大きく変わるようです。
■コンシューマーフェイシングスタンダード
年商10億~年商1,000億円
¥3,707,000/年■コンシューマーフェイシングエンタープライズ
年商1,000億円以上
¥7,414,000/年
私が依頼されたクライアントは年商10億以下の会社からの案件だったので、$504/年のBasicライセンスで良いと思っていましたが、以下のような利用シーンではプロライセンスが必要と回答がありました。
利用シーン
- 社内従業員向けの業務用途としての利用されるアプリケーションへの使用
- 企業やサービスまたは製品に対するプロモーション/マーケティングを目的としたアプリケーションへの使用
- 自社サービスまたは開発ツールとしての外部向けサービスに対しての使用
- 物理製品にプリインストールしたアプリケーションへの使用
https://developer.vuforia.com/legal/vuforia-developer-agreement
え?これに適用されないアプリってなんてあります?
逆にBasicライセンスだとどのような使用用途があるのか教えてほしい…。
https://www.ptc.com/en/products/vuforia/vuforia-engine/pricing
結論
$504/年のBasicライセンスでできることは皆無。
(透かしを消すだけ?)売上が10億以下の会社でも高額なライセンス契約はほぼ必須。
リリース後アプリを更新しないとしてもそのアプリをユーザーが使い続けるのであればライセンス更新は必須。
しかしクラウドマーカーなどのネット接続が必要ないARアプリの場合、Vuforia側がライセンスの状態を把握する方法はないのでアプリストアから消してもアプリをダウンロードしたユーザーはアプリは使用し続けられる。Apple Developerと違い、リリース時に契約していれば、その後アプリをアップデートしない限りはユーザーが削除したり、OSのアップデートで使用できなくなることがない限り使用し続けることは可能だが、Vuforiaの契約はそうではない。
このあたりはかなり曖昧な気がする。アップデートの頻度も高く、新機能がどんどん追加され、高度な3Dモデルトラッキングなどが魅了のVuforiaですが、簡単なARマーカーアプリやクラウドマーカーを使ったアプリはほとんどの場合、高額なライセンス契約が必要だそうなので、みなさんもご注意ください。
Basicライセンスで問題ないと思いVuforiaを使ったARアプリを開発して配布していたら規約違反で高額な請求される事案が発生しそうです。
- 投稿日:2020-10-22T21:51:25+09:00
Vuforiaを使用したアプリを作る場合の注意点
ARCoreより対応端末の多いVuforiaのARマーカーを使った簡単なARアプリを開発しようと考えており、$504/年 のBasicライセンスで開発し、アプリをリリースしてから更新予定はなかったので、ライセンス更新は必要ないと思いましたが念の為Slackで質問したところ、営業担当から返信があり契約更新の問題以前にVuforiaのライセンスにはかなり危険な部分が多いことが分かったので注意喚起のために投稿します。
まず契約ですが、年商によって金額が大きく変わるようです。
■コンシューマーフェイシングスタンダード
年商10億~年商1,000億円
¥3,707,000/年■コンシューマーフェイシングエンタープライズ
年商1,000億円以上
¥7,414,000/年
私が依頼されたクライアントは年商10億以下の会社からの案件だったので、$504/年のBasicライセンスで良いと思っていましたが、以下のような利用シーンではプロライセンスが必要と回答がありました。
利用シーン
- 社内従業員向けの業務用途としての利用されるアプリケーションへの使用
- 企業やサービスまたは製品に対するプロモーション/マーケティングを目的としたアプリケーションへの使用
- 自社サービスまたは開発ツールとしての外部向けサービスに対しての使用
- 物理製品にプリインストールしたアプリケーションへの使用
https://developer.vuforia.com/legal/vuforia-developer-agreement
え?これに適用されないアプリってなんてあります?
逆にBasicライセンスだとどのような使用用途があるのか教えてほしい…。
https://www.ptc.com/en/products/vuforia/vuforia-engine/pricing
結論
$504/年のBasicライセンスでできることは皆無。
(透かしを消すだけ?)売上が10億以下の会社でも高額なライセンス契約はほぼ必須。
リリース後アプリを更新しないとしてもそのアプリをユーザーが使い続けるのであればライセンス更新は必須。
しかしクラウドマーカーなどのネット接続が必要ないARアプリの場合、Vuforia側がライセンスの状態を把握する方法はないのでアプリストアから消してもアプリをダウンロードしたユーザーはアプリは使用し続けられる。Apple Developerはリリース時に契約していれば、契約を更新しなくても、OSのアップデートで使用できなくなることがない限りアプリを使用し続けることは可能だが、Vuforiaの契約はそうではない。このあたりはVuforiaは管理できないのでかなり曖昧。
Vuforiaは開発者ライセンスは無料なのでお金を払うことなく開発でき、リリースのタイミングで$504/年 のライセンス購入すれば良いと思っていましたが、ほとんどの場合プロライセンスが必要でその金額がかなり高額だったので驚きました。
アップデートの頻度も高く、新機能がどんどん追加され、高度な3Dモデルトラッキングなどが魅了のVuforiaですが、簡単なARマーカーアプリやクラウドマーカーを使ったアプリでもほとんどの場合、高額なライセンス契約が必要そうなので、みなさんもご注意ください。
Basicライセンスで問題ないと思いVuforiaを使ったARアプリを開発して配布していたら規約違反で高額な請求される事案が発生しそうです。
このような高額ライセンスになったのはいつからなのか知りませんが、Vuforiaを使い名刺をARマーカーにしてARで自己紹介が出るようなアプリを作っている人がいましたけど、これもプロモーション用途だからBasicライセンスだと規約違反ですよね。
今はARKitやARCoreがあり、Vuforiaを使ってARアプリを作る人はあまり多くはないかもしれませんが、確かUnity 2017あたりではデフォルトでVuforiaが入っており、それで知名度が上がり色々ARアプリを作っていた人は多かったと思いますが、ライセンスの詳細を知っていた人ってどれだけいたんでしょうか。普通は$504/年 払ったら問題なく配布できると思いますよね。
追記:
上記のプロライセンスは委託された日本の代理店が管理していて、Basicライセンスは本国で管理されているようなので、情報が統一されていないとのことでした。
- 投稿日:2020-10-22T16:12:16+09:00
Unity - Timeline x Chinemachine
案件で、TimelinneとChinemachineを組み合わせたムービーシーンを作成したので、まとめておきます。
(基本的に備忘録なので、文章が汚いと思います…)1. Timeline
ゲーム内ムービーなどを作りたい時によく使うもので、3Dモデルのアニメーション制御やポジションなどを1つのタイムライン上でまとめて管理できるものです。
2. Chinemachine
カメラの切り替え、カメラワークの実装はこれを使うのが良さそうでした。
以前までは、カメラの切り替えは、ポジションを指定してカメラを移動させて実現してましたが、これを使えばより簡単に実装できました。
まず、カメラオブジェクトにChinemachine Brainコンポーネントを指定します。
空のGameobjectにChinemachine Virtual Cameraコンポーネントを指定します。
このオブジェクトが、ポジション,回転などから画角などまでカメラ情報を持つようになります。
他にもChinemachine Virtual Cameraコンポーネントを持つゲームオブジェクトを作成すれば、複数台カメラを設置できます。
あくまでもカメラ情報のみなので、実際にはChinemachine Brainコンポーネントをアタッチしたカメラオブジェクトを使いまわしてる感じです。カメラの切り替えには、Priorityプロパティーの数値を変更すれば切り替えることができます。また、Chinemachine BrainのCustom Blendsプロパティーで、カメラを切替時のアニメーションも指定できます。
3. Timeline x Chinemachine
Timelineでカメラやキャラクターの移動をさせるとき、タイムライン上でポジション情報を時間ごとに調整しておりました。より視覚的に調整するために、Chinemachine Smooth Pathというのを使うと、一連のパスとしてポジションを指定することができます。
Chinemachine Virtual CmaeraコンポーネントのBodyプロパティーにて、Tracked DollyとChinemachine Smooth Pathコンポーネントをアタッチしているゲームオブジェクトを指定します。あとは、Path PositionをTimeline上で変更してあげるだけです。
カメラ以外のオブジェクトを移動させる場合は、まずChinemachine Dolly Cartをアタッチしたゲームオブジェクトを用意します。このオブジェクトに、移動させたいものを子オブジェクトとしてアタッチします。あとは、PositionをTimeline上で変更してあげるだけです。
4. まとめ
今回、キャラクターの移動とカメラワークを同じタイムライン上で実装しました。カメラワークをCinemachineで実装することで、視覚的に位置調整はできましたが、カメラに主人公が映る位置やタイミングなどの細かい調整で、かなり時間がかかりました。よりChinemachineを使いこなせるとそういった調整もしやすいらしいので、いろいろ試したみたいです。
- 投稿日:2020-10-22T04:57:22+09:00
アプリ本体更新せずプログラム修正 InjectFix メモ
ソースコード
https://github.com/Tencent/InjectFix面白い仕組みだと思ったので、紹介します。
使う予定がなく、試していません。詳細な使い方はマニュアルを参照してください。InjectFixとは
Tencentのリポジトリにある。
Unityゲームについて、アプリ本体を更新せずプログラムを修正することができる。
あらかじめパッチを受け入れるための細工をする必要がある。3行で説明
IL2CPP以前に、パッチがあるかチェックするコードをメソッドに挿入
パッチはC#ソースコードからコンパイルして作る
InjectFixは仮想マシンを実装している流れ
C# でこのようなコードを書く。
void AddScore(int x) { _score += x; }? C#コンパイラでコンパイル
? DLL
? InjectFixにより、パッチチェック・実行用コードをメソッドに挿入
? IL2CPPしてビルド
? アプリの本体提出・リリース
? スコアが1000以上にしたらバグることがユーザーからの報告で判明 999でカンストするようにしたら直る
? パッチ用のコードを書く[Patch] void AddScore(int x) { _score += x; _score = Math.Min(_score,999); }? パッチファイルに変換。アップロード。アプリはパッチファイルをDL。完了。
パッチチェック・実行用コード挿入
パッチがあるか確認して実行するコードをメソッドに挿入します。
これはランタイムで行われるのではなくて、IL2CPPするより前に行います。void AddScore(int x) { // 処理を挿入(イメージ) if(IsPatched(12345/*メソッドを識別するために割り当てたID*/)){ CallPatchedMethod(12345, x) return; } //元のコード(パッチがなければ実行) _score += x; }例では戻り値なしですが、戻り値ありも対応しています。
CallPatchedMethod
で何をするかというと、仮想マシンでパッチ後のコードを実行します。
InjectFixには仮想マシンが実装されています。このような方法ではありません。Win32アプリでx86命令を直接実行させる
感想
良い C#でパッチが書ける。
良い アプリ本体を更新しない。
悪い パッチがあるかチェックするコストがかかる。
悪い パッチは仮想マシンで実行されるため、いくらかパフォーマンスが落ちる。バグがあるよりまし。