(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



Steamworksの初期化がSteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information.というエラーで失敗する時の対処法【Unity】【Steam】【トラブルシューティング】

この記事でのバージョン
Unity 2019.4.9f1


はじめに

UnityでSteam向けのゲームを作る際はSteamworks.NETを使うと楽にSteam対応が出来ます。



そのSteamworks.NETを使う際、最初に初期化が必要なのですが、

//SteamManager等を使うのに必要
using Steamworks;
//初期化
if (!SteamManager.Initialized) {
 Debug.LogWarning("SteamManagerの初期化に失敗しました");
  return;
}


この初期化時に以下のようなエラーが出る事があります。

f:id:kan_kikuchi:20200913121243j:plain

[Steamworks.NET] SteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information.

DeepL翻訳
SteamAPI_Init() に失敗しました。詳細については、Valve のドキュメントまたはこの行の上のコメントを参照してください。


エラー内容の通り、コメントに原因が色々書いてあるので、

// Initializes the Steamworks API.
// If this returns false then this indicates one of the following conditions:
// [*] The Steam client isn't running. A running Steam client is required to provide implementations of the various Steamworks interfaces.
// [*] The Steam client couldn't determine the App ID of game. If you're running your application from the executable or debugger directly then you must have a [code-inline]steam_appid.txt[/code-inline] in your game directory next to the executable, with your app ID in it and nothing else. Steam will look for this file in the current working directory. If you are running your executable from a different directory you may need to relocate the [code-inline]steam_appid.txt[/code-inline] file.
// [*] Your application is not running under the same OS user context as the Steam client, such as a different user or administration access level.
// [*] Ensure that you own a license for the App ID on the currently active Steam account. Your game must show up in your Steam library.
// [*] Your App ID is not completely set up, i.e. in Release State: Unavailable, or it's missing default packages.
// Valve's documentation for this is located here:
// https://partner.steamgames.com/doc/sdk/api#initialization_and_shutdown


今回はこれを一つずつ解説していこうという感じの記事です!


目次

  • はじめに
  • 目次
  • Steamが起動してない
  • steam_appid.txtが作成されていない
  • Steamのクライアントとゲームを実行しているユーザが違う
  • アカウントに権限がない
  • App IDの設定が間違っている



Steamが起動してない

続きを読む

VRモードと非VRモード両対応のSteam向けゲームをUnityで作る方法とモードの切り替え方【Unity】【Steam】【VR】

この記事でのバージョン
Unity 2019.4.9f1
SteamVR Unity Plugin - v2.3.2 (sdk 1.4.18)


はじめに

今回はVRと非VRの両方に対応したSteam用のゲームをUnityで開発する方法です。


なお、両対応や切り替えをどうやるかという話で、

簡単に両方に対応したゲームが作れるという話ではないのであしからず。


VRモードと非VRモード両対応

続きを読む

「Unityエディタを再生しているか」と「ビルド設定されているか」を気にせずにシーンをロード出来る拡張機能【Unity】【エディタ拡張】


この記事でのバージョン
Unity 2019.4.9f1


はじめに

UnityはSceneManager.LoadSceneEditorSceneManager.OpenScene等、

シーンを開く処理がいくつもありますが

エディタを再生しているかや、ビルドに設定しているかによって使える物が変わります。


という事で今回は、

「Unityエディタを再生しているかとビルド設定されているか問わずにシーンをロードする拡張機能」

を作ってみました!


イメージとしては以下のような感じで、

いつでも好きなシーンに切り替えられるので、テストプレイが捗ります。

f:id:kan_kikuchi:20200908073915g:plain


ちなみに以前似たような物を作りましたが、

この時は「エディタを再生している時のビルドに設定されていないシーン」に対応していませんでした。



なお、記事中では以下のアセットを使っています。

Clean & Minimalist GUI Pack | 2D GUI | Unity Asset Store



EditorSceneLoader

続きを読む

「縦笛なめなめVRをなぜ作ろうと思ったのか」「性的にどうなの?という意見にどう感じているのか」「表現の自由の問題についてどう考えているのか」という質問に開発者が答えました!【雑記】

はじめに

一ヶ月程前にSteamにVR用専用ゲーム「縦笛なめなめVR」をリリースしたのですが、



リリースしてすぐにVRカテゴリ売上(本数)ランキングで1位になったり、



好評価率90%とかなり良い評価を頂けていたりと、おかげさまで幸先の良いスタートを切れました。

f:id:kan_kikuchi:20200913150725j:plain


その「縦笛なめなめVR」がなんと「ABEMA的ニュースショー」という番組に取り上げて頂きました!

(19日ぐらいまでは誰でも無料で見れるはず)

1週間のニュースを総ざらい!日曜のお昼にABEMA初のニュースショーが誕生。 世間を騒がせ、話題となっているニュースをあえて「的外れ」な独自の取材と目線でお伝えすることで、世の中で言われている「的(マト)=正義」に疑問を投げかけます。そこから浮かび上がるのは時代の潮流かはたまた?「それ、ニュースと全然関係ないじゃん!」最初の印象は見終わって大きく変わるかもしれません!?鋭いツッコミに定評のある千原ジュニアが、一癖も二癖もあるコメンテーター陣と切り込みます。



実は番組で取り上げてもらえるという連絡は事前にあり、その時に以下のような質問も頂いていました。

  1. なぜこのゲームを作ろうと思ったのですか?どういうシチュエーションで閃いたのか、など具体的エピソードを含めお願いします。
  2. ネット上で「このゲームは性的にどうなのか?」と賛否の声がありますがどう感じていますか?
  3. こう言った作品をクリエーターが制作すると必ず出るのが「表現の自由」の問題ですがどうお考えでしょうか?


上記の通り結構センシティブな質問だったので、気合を入れて書いた所、

4000文字を超える暑苦しい返答になってしまい、さらに蛇足も多分に含んでいたので

一部しか使われないだろうなと思ったのですが、なんと放送では1文字も使われませんでした。


取り上げてはもらえたので、返答が使われなかった事自体は全然良いのですが、

さすがに3,4時間かけて書いた文章が全く使われないのはもったいないので、

今回はその返答をそのまま記事にして再利用しよう!という感じの記事です。

(地味に縦笛なめなめVRのネタバレも含みます)


ちなみに番組でプチ炎上と表現しているのは

以下ツイートにされているの引用RT辺りの事だと思われます。





目次

  • はじめに
  • 目次
  • 1.なぜこのゲームを作ろうと思ったのですか?どういうシチュエーションで閃いたのか、など具体的エピソードを含めお願いします。
  • 2.ネット上で「このゲームは性的にどうなのか?」と賛否の声がありますがどう感じていますか?
  • 3.こう言った作品をクリエーターが制作すると必ず出るのが「表現の自由」の問題ですがどうお考えでしょうか?
  • おわりに


1.なぜこのゲームを作ろうと思ったのですか?どういうシチュエーションで閃いたのか、など具体的エピソードを含めお願いします。

続きを読む

Unityのエディタ拡張時に非同期タスクの進捗状況を表示する Progress【Unity】【エディタ拡張】


この記事でのバージョン
Unity 2018.4.6f1


はじめに

Unityにはエディタ拡張時に進捗を表示するための

EditorUtility.Display(Cancelable)ProgressBarという物が用意されています。

f:id:kan_kikuchi:20200330091721g:plain



そしてUnity 2020.1から、これに似た機能である

エディタ拡張時に非同期処理の進捗を表示するためのProgressが追加されました。



今回はこれを試してみようという感じの記事です。

なお、イメージとしては以下のような感じ。

f:id:kan_kikuchi:20200902073739g:plain



Progress

続きを読む

Steam(works)へゲームのビルドをアップロードする手順やアップデート方法、非公開ベータテストのやり方【Steam】

はじめに

今回は完成したゲームのビルドをSteam(works)にアップロードする手順

アップデート方法の解説記事です!

ついでに非公開ベータテストのやり方についても書いています。


なお、Steamworksの登録は済んでいる前提で、OSがWindowsの場合なのであしからず。


ビルドをアップロードする手順とアップデート方法

続きを読む

エディタ拡張でUnityを再生していない時でもコルーチンを使い非同期処理が行える EditorCoroutineUtility【Unity】【エディタ拡張】


この記事でのバージョン
Unity 2019.4.5f1


はじめに

UnityはMonoBehaviourのStartCoroutineを使うことで、

簡単にコルーチンを実行し、非同期処理を行う事が可能ですが、

private void Start () {
  //StartCoroutineを使ってコルーチンを実行
  StartCoroutine(DelayLog());
}

//0.5秒待ってからログを表示
private IEnumerator DelayLog(){
  Debug.Log("待ち開始……");
  yield return new WaitForSeconds(0.5f);
  Debug.Log("待ち終了!");
}
f:id:kan_kikuchi:20171214073408g:plain


この方法はエディタ拡張時(Unityを再生していない時)には使えないため、

エディタ拡張でコルーチンを利用したい場合はUniRxを使うなど一工夫必要でした。


しかし、いつの間にかエディタ拡張でコルーチンを使うためのEditorCoroutine

という物が実装されていたので、今回はこれを使ってみようという感じの記事。


イメージとしては以下のような感じです。

f:id:kan_kikuchi:20200828080630g:plain



導入

続きを読む

Odinで拡張されたエディタウィンドウ OdinEditorWindow【Unity】【アセット】【Odin】【エディタ拡張】


この記事でのバージョン
Unity 2019.4.5f1
Odin 2.1.13


はじめに

色々な属性を追加して、Inspectorを使いやすくしたり、

f:id:kan_kikuchi:20171127084846j:plain


シーン内を検証し、Inspectorでの設定に問題のあるオブジェクトを見つけたりも出来るOdinですが、

f:id:kan_kikuchi:20180104073302j:plain


なんとエディタ拡張時に使うウィンドウ用クラス、

エディタウィンドウ(EditorWindow)の拡張も可能でした……!

f:id:kan_kikuchi:20200825093817j:plain


という事で今回はその方法についての記事です。

Odin - Inspector and Serializer | Utilities Tools | Unity Asset Store



OdinEditorWindow

続きを読む

ボタンなどのレイキャストの当たり判定(タッチ範囲)だけを変えられるRaycastPadding【Unity】【uGUI】

この記事でのバージョン
Unity 2020.1.0f1


はじめに

UIを作っていて、ボタンの当たり判定を見た目より大きくしたいなんて事はよくあります。


しかし、uGUIのボタン(というよりRaycast Target)は当たり判定==画像となっているため、

当たり判定だけを大きくするには一工夫必要でした。



しかしUnity2020.1からはRaycastPaddingというRaycastの判定だけを広げる設定が追加され、

簡単に当たり判定だけを変えられるようになったので、今回はそれを使ってみようという感じの記事。


イメージとしては以下のような感じ。

f:id:kan_kikuchi:20200820085512g:plain


なお、記事中では以下のアセットを使っています。

Clean & Minimalist GUI Pack | 2D GUI | Unity Asset Store



RaycastPadding

続きを読む

メニューをプログラムから実行する EditorApplication.ExecuteMenuItem【Unity】【エディタ拡張】

この記事でのバージョン
Unity 2019.4.2f1


UnityはMenuItemを使うことで簡単に独自の処理をするメニューを追加出来ます。


//ただログを出す
[MenuItem("Tools/ShowLog")]
private static void ShowLog() {
  Debug.Log("ログ");
}
f:id:kan_kikuchi:20200710064607j:plain


そしてこのメニューは、

EditorApplication.ExecuteMenuItemを使う事でプログラムから実行する事も可能というのが今回の話。

//メニューが設定されているパスを指定し、実行
EditorApplication.ExecuteMenuItem("Tools/ShowLog");


もちろんUnityに最初からあるメニューを実行する事も可能です。

f:id:kan_kikuchi:20200710064859j:plain
//エディタの再生を開始する
EditorApplication.ExecuteMenuItem("Edit/Play");


なお、指定したパスにメニューが無ければ以下のようなエラーが出ます。

ExecuteMenuItem failed because there is no menu named 'Tools/ShowLog3'
UnityEditor.EditorApplication:ExecuteMenuItem(String)
NewBehaviourScript:ShowLog2() (at Assets/Scenes/NewBehaviourScript.cs:15)
f:id:kan_kikuchi:20200710065408j:plain