20210915のUnityに関する記事は2件です。

Unityでキーボードによるゲーム操作

Input.GetKey ほとんどのプログラミング例にはこのInput.GetKeyが使われてます。 たとえばこんな感じ。 float x = Input.GetAxis("Horizontal"); float y = Input.GetAxis("Vertical"); WASDと↑←↓→キー両方どちらの入力も取得してくれてます。 これはHorizontalが水平、つまり左右。 Verticalが上下の入力ですね。 問題点 2DSTGを作ろうとしてて気づいたのが、入力が貯まるということ。 テストプレイをして、自機が滑るような、あるいは慣性がついているような?キーを離したのにまだ少し動くという現象がありました。 Rigidbodyのせいかとも思ったのですが、最終的にRigidbodyを外してもやはり滑る。 そこでキー入力自体を検証していたら、キーボードの入力がある程度貯まるということに気が付きました。 キーボードを押しっぱなしにしている間に連射のように入力が蓄積されていくんですね。 解決 キーが下がった時とキーが上がった時をきちんと判定したら問題なく滑らなくなりました。 if((Input.GetKeyDown(KeyCode.A)) || (Input.GetKeyDown(KeyCode.LeftArrow))) { x1 = -1; } if ((Input.GetKeyDown(KeyCode.D)) || (Input.GetKeyDown(KeyCode.RightArrow))) { x2 = 1; } if ((Input.GetKeyDown(KeyCode.W)) || (Input.GetKeyDown(KeyCode.UpArrow))) { y1 = 1; } if ((Input.GetKeyDown(KeyCode.S)) || (Input.GetKeyDown(KeyCode.DownArrow))) { y2 = -1; } if ((Input.GetKeyUp(KeyCode.A)) || (Input.GetKeyUp(KeyCode.LeftArrow))) { x1 = 0; } if ((Input.GetKeyUp(KeyCode.D)) || (Input.GetKeyUp(KeyCode.RightArrow))) { x2 = 0; } if ((Input.GetKeyUp(KeyCode.W)) || (Input.GetKeyUp(KeyCode.UpArrow))) { y1 = 0; } if ((Input.GetKeyUp(KeyCode.S)) || (Input.GetKeyUp(KeyCode.DownArrow))) { y2 = 0; } float x = x1 + x2; float y = y1 + y2; もっとうまい書き方もあるかと思いますが、こういう理屈なのだということが参考になればと思います。 (移動の左右切り替えのときに引っかかるような感じがした(おそらく右キーを離すのと左キーを押すのがほぼ同時の時に判定がおかしくなる)ので、コードの例を修正しました。 )
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Genvid SDK&サンプル実行トラブルシューティング(随時更新)

Genvid SDKについて Genvidは、動画ストリーミングとブラウザを介したインタラクティブな体験を組み合わせた「大規模インタラクティブ・ライブ・イベント」(Massive Interactive Live Events)を実現するSDKです。 https://www.genvidtech.com/ja/mile%E3%81%A8%E3%81%AF%EF%BC%9F/ ゲーム技術をベースに、リアルタイムで進行する動画番組に対して、動画視聴者が能動的に参加できるシステムを提供します。 コンテンツ内のキャラクターが次に何をするかを投票で決めたり、ミニゲームをプレイしてポイントをため、特定のキャラクターを応援するなどの活動を経て、物語が変化していきます。 MILEは、Unityを使いFacebook上で配信されている「Rival Peak」と、Unreal Engine 4を使った「Project Raven」があります。 『RIVAL PEAK』が示す次世代の視聴者参加型デジタルエンタテインメント https://news.yahoo.co.jp/byline/onokenji/20210326-00229353 Genvid SDKの導入については、Genvidディベロッパーサイトの日本語マニュアルからご確認ください。 https://www.genvidtech.com/for-developers/ さて、GenvidのシステムはWindowsクラウドサーバーで様々なミドルウェアを動作させるというシステム上、ゲーム開発者には不慣れなツールの利用などもあります。 本投稿は普段ゲーム開発(フロントエンド開発、個人開発)をしている方向けに、Genvidを試そう・導入しようと思っているときの引っ掛かりポイントを書いていきます。 インストール時のポイント Genvid SDKにはさまざまなツールやライブラリが同梱されています。 Python 3.5.4 C++ Build Tools Node.js AWS Command Line Interface TightVNC そのため、すでにPCにインストールされているソフトウェア・ライブラリとかち合うことがあります。 Microsoft Visual C++ Build Toolsセットアップに失敗(エラー) その中には「Microsoft Visual C++ Build Tools」も含まれています。 しかし、¥PCに既に別のバージョンのMicrosoft Visual C++ Build ToolsやVisual Studio 2017, 2019などがインストールされている場合は、そのインストールプロセスに失敗したり、 再インストールのダイアログでエラーになる場合があります。 先に「Microsoft Visual C++ Build Tools」が入っている場合は、ダイアログで再インストールを聞かれたら「いいえ」を選択します。 詳しい情報はGenvid公式サイトのガイドがあります。 https://answers.genvidtech.com/articles/151/unable-to-install-microsoft-c-build-tools-with-sdk.html genvid-toolboxのインストール時にcryptographyライブラリがインストールできずに中断される genvid-toolboxのwheelsで指定されているCryptographyのバージョンが古く、pipの処理がうまく進まないことがありました。 pipの再インストールで治ります。 py -3.8 -m pip install -U pip 関連 https://github.com/pyca/cryptography/issues/5101 サンプルビルド時のポイント Genvid SDKのサンプル(Cube Sampleとよばれる四角が転がるもの)やGenvid Tanks Sampleのビルドと実行には、UnityやUE4をメインで使っている方には少々不慣れなコマンドでの操作が必要になります。 踏みがちなトラブルを見ていきましょう。 Unity EditorでMultiple versions of Newtonsoft.jsonエラー (またはMultiple precompiled assemblies with the same name Newtonsoft.Json.dllエラー) Genvid Unity SDKが同梱しているNewtonsoft.jsonライブラリがUnity Editor内に既にあり、競合しています。 ややこしいことにUnity 2020.3のどこかから、Unity Editorをインストールすると自動でUnity Package Managerが「Version Control package」をインストールする挙動になったのですが、これにNewtonsoft.Json.dllが含まれているためエラーの原因になっています。 Version Control(Plastic SCM)を使っていない場合はこのパッケージをアンインストールしましょう。 Genvid SDK側のNewtonsoft.Json.dllの削除でも構いません。 Project has invalid dependenciesエラー Genvid Tanksサンプル1.25をUnity Asset Storeからインストールしたときに、Unity Package Managerの依存設定が変(com.unity.package-manager-ui: Package [com.unity.package-manager-ui@2.2.0] cannot be foundエラー)となってインストールが正常に完了しないことがありました。 こちらは、サンプルのバージョンを上げれば問題ありません。 特定の理由で1.25を使う場合は、以下のダイアログが出た時に「Skip」とすれば進めます。 python.exe: can't open file 'Unity.py'(または 'Web.py')エラー 「そんなPythonスクリプトは無い」というメッセージです。現在のディレクトリまたは指定したパスに使用したいpyファイルがないということです。 Genvidのマニュアルでは、ディレクトリ移動のコマンドは(細かすぎるので)省いていることがあります。 よくあるのが、pyファイルがあるディレクトリが実は一段下だった(web.pyがフォルダwebの下にある)などによるディレクトリ指定忘れです。 ディレクトリに直接移動したり、適切なパスを指定します。 verification failed while extracting genvid-math@file:modules\genvid-math.tgz エラー Webのビルド時にこれが表示された場合は、そのWebサイトの動作に必要なライブラリのバージョンや依存関係がおかしくなっている可能性があります。 web用のデータ一式が入ってィるフォルダ内のnode_modulesフォルダとpackage-lock.jsonを消してから、再度Webのビルドコマンドを実行してみましょう。 npm WARN tar ENOENT no such file or directoryエラー こちらもpackage-lock.jsonが悪さをしている可能性が高いです。package-lock.jsonを削除して再実行しましょう。 また、npmのキャッシュが壊れている可能性もあるため、次のコマンドでキャッシュをクリアします。 npm cache verify それでも変な場合はcache clean npm cache clean --force [Errno 2] Cannot find executable in the path: 'Unity.exe' Genvidのビルドプロセス(unity.pyに含まれるスクリプトを利用)は、PCにインストールされているUnity Editorを自動的に探してきてビルドを行うスクリプトが含まれています。 が、何らかの理由でUnity Hubのjsonにアクセスできなかったり、そのフォールバックであるレジストリキーでのUnity.exeの位置情報が消えていたりすると、exeが見つからずこちらのエラーになります。 そんなときは、レジストリエディターで適切なデータを与えることでビルドが通るようになります。 具体的にはHKEY_CURRENT_USER\SOFTWARE\Unity Technologies\Installer\Unityの中に「Location x64」と「Version」キーを作ります。 「Location x64」にはUntiy.exeまでのフルパス、「Version」にはUnityバージョンを記入しておきます。 サンプル実行時のポイント Genvidのセットアップが一通り終わり、管理画面であるCluster UIでタスク「Services」「Unity」「web」が3つとも起動すればOKなのですが、設定や環境によって初回でうまくいかないことがあります。 よくある見落としポイントをおさらいしましょう。 タスクServicesが起動しない、存在しない Genvid Clusterの初期設定がロードされていない可能性があります。 初期設定をロードするコマンドを実行します。 genvid-sdk load-config-sdk タスクUnityが存在しない Unityのゲームインスタンス(Unityでビルドしたexe)を実行するための設定情報がロードされていません。 パスまたは設定情報が書かれたunity.nomad.tmplまたはgame.hclなどのファイルを個別にロードするか、サンプルの場合は以下のコマンドでロードされます。 py unity.py load タスクUnityが起動しない Genvid Clusterに読み込まれたゲームのexeファイルのパス情報がおかしい可能性があります。 サンプルの場合は、unity.nomad.tmplファイル内でexeまでのパスを書いてあります。 このファイルに正しいパスを記入してロードするか、Genvid Cluster UI内で直接書き換えます。 Settingsタブ内Jobsタブで、「unity」タスク設定のEditボタン(メモ帳みたいなアイコン)をクリックして設定編集ウィンドウを開きます。 ちょっと見づらいですが、Task ”Unity”内のConfig -> commandにexeの位置を指定する箇所があります。 タスクWebが起動しない Webサイトの実行に必要なビルドがされていない可能性があります。 py web.py buildコマンドを実行して、実効に必要なライブラリ群をダウンロードします。 py web.py build 今後のSDKバージョンアップに向けて Genvid SDKのバージョンアップは日々行われており、Unity / UE4も同様です。どうしても開発環境や併用しているアセット等の組み合わせがうまくいかないケースもありますので、 随時情報収集して更新していきます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む