メモ帳(Net) - TejimaTuyoshi/returnread GitHub Wiki
API =>Application Programming Interface
簡単に言えば、情報をネット上で管理すること。
API自体をどうこうすることは少ないが、ネット上にて情報の管理をする役割があることを知っているだけでよい。
APIは技術をつなげる役割もある。
また、自分だけでは用意できなかったものを用意することが可能に。
APIは「考え方」にもなるので、一種の企画選定に使われることがあるそう。
いろんなところにAPIは存在するので調べてみると良い。
API=>HTTPによって「ほとんど」できている。(ほとんどなのでたまに違うものも。)
Unityは「いろんなことができる」あまり、使えきれないというのが現実。
なので「外の世界」を知って、その技術をUnityに連携して使うことが良い。
ネットワークでは「情報の管理」がされているのが基本。
サーバ上では、それぞれのクライアントにつながるように「接続」をしている。
本来はサーバは「javascript」で使用されている。
HTTP=>リクエストを飛ばすことで、サーバに開かせることが可能。
HTTPはサーバから結果をもらうが、「失敗=>エラー」と「成功=>検索結果」のようになっているのでちょっと独特。
Getリクエスト=>Space上からも確認可能。
Postリクエスト=>Web上では確認が不可能。
UnityWebRequest.Get(urlGitHub)=>urlGitHubの中のHTTP リクエスト(URL)を取得することが可能に。
using System.Text;
//今回の Encoding のための参照のために追加されています。
UnityWebRequest request = new UnityWebRequest(urlGitHub, "POST");
//HTTP リクエストする(POST メソッド) UnityWebRequest を呼び出し
//アクセスする URL は変数 urlGitHub で設定
byte[] bodyRaw = Encoding.UTF8.GetBytes("dummy");
//空ではやりとりできないので、今回は仮の dummy 文字を用意
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
//アップロード(Unity→サーバ)のハンドラを作成
request.downloadHandler = new DownloadHandlerBuffer();
//ダウンロード(サーバ→Unity)のハンドラを作成
//リクエスト後の結果待ちの処理は GET リクエストの時と同じ
Getはあまりやらない方がいいが、Postは行うことが多い。
Getを行う際、Keyを作ることで通常では閲覧をすることができないがpublicではあるので参照(Post)することができるような状況にすることが可能。
Unity上で行うと時間がかかるものをサーバ上で行うことで見やすさや実行時のラグなどを減らすことが可能。
ネットワーク上では、計算を伴う要素はUnityで編集を行うとマズイ。
その場合、サーバ上で行えばすぐに行うことが可能になる。
デバッグログを行う際にUnityで行うと二度手間となるが、サーバ上で行えばデバッグログの返信自体が共有されるのでやりやすい。
VR(XR)開発を行う際、デバッグは現実の物を見ないと確認しずらい物。
そんな時、サーバ上に[温度]や[エラー]を送ることで、「いつどんな時にどんな状態になったか」をリアルに確認することが可能に。
サーバのSDKを使用することもあるが、多少の理解をする必要がある。
Webで行っているため、型がふわふわしていて決まっていない場合もあり得るので大分危険。
msgでは一時的なデータの保持のため、保存は不可能だがflowでは保存をすることが可能。
stringでもintでも保存は可能になっている。
UnityWebRequestTexture.GetTexture(urlGitHub);これで、UnityにWeb上の画像を取得してTexture型に収納する。
ゲーム制作の場合、基本は「世界中の人々と遊ぶ(オンライン)」が普通になるためそれを可能にするために必要になってくるのがAPIだったりする。
この場合、パスキーが必要になることがある。
外部でのAPIの場合、いくつかの「条件」がある。(自分たちで作ったものではないため、入出力にある程度の型が決められている。)
各 API では
- Auth
使うために認証が必要かないものは特別のユーザー登録が必要なく柴犬画像 API のような使いやすいリクエスト GET リクエストでアクセスできたりする
- HTTPS
セキュアな通信でつながるか
- CORS
クロスドメイン制約(ドメインの違うところからのアクセスに関する制約)がないかという項目で、使い方がザっと把握できます。
クロスドメイン制約が無いと=>どこからでもそのサイトを見ることが可能に。
(制限がないため、見られてはいけない情報を絞ることが不可能。)
以下の点を注目しておくと使いやすいものを探せるでしょう。
Auth
No のものは特別のユーザー登録が必要なく柴犬画像 API のような使いやすいリクエスト GET リクエストでアクセスできたりする
CORS
ブラウザでのクロスドメイン制約(ドメインの違うところからのアクセスに関する制約)がないか。 ないとアクセスしやすい。Unity 単体でのアクセスであれば気にしなくてよい。
APIの出力の一部を取得することが可能なため、textだけを表示させることが可能。
APIにはURLから探して画像を取得する2段式と、直接画像を取得する方法がある。
LINE Notify=>ヘッダーで Bearer のあとに API トークンを入れる。
実際にヘッダーで Bearer を使用するケースは多い。
GitHubCodespace=自分で制限を決められる。(自由) ≠ 通常のAPI(他人が作ったものがあるため制限がある)
APIを展開すると使用者に落とされる可能性がある。
カジュアル(簡単)にやるなら「Getリクエスト」で行うと良い。
⓵簡単につなぎやすい。
⓶URLがあっていれば使用することができる。
OAuthは使用制限が行われており、少し不便な点があるがそれでも信用度があるため良い。
自分の仕組みにとりあえず加えていくのを試したいのであれば、ゲームポイントのサンプルのように内部のデータを外部に送ってみることを試してみる。
実際にはどのAPIにつなげてもOK
外部 API にどういうデータを送ったかを把握しづらい問題は [httpbin](httpbin https://httpbin.org/) という サービスを使ってもよい。
ブラウザ上で確認できる上に、パラメータの変更・確認をすることが可能のため良し。
また、VSCode の拡張機能で様々なデータの送り方が試せる REST Client 機能拡張というのがある。
少し難しい部分ではあるものの、確認には簡単なため使ってみるとよし。
いろんな種類に対応しているので、ログに近い形で使用することが可能になる。
Jsonデータを確認することも可能なためhttpbinで確認することが不可能になるものもこちらで確認してみるのもいい。
Node-Redを使用するのもいいが、はっきり言って覚えることが少し増えるため面倒になる。
PolySpatial=>Apple Vision Proのタッチやスワイプに対応したものを使用させることが可能。
Unityで使用できるものであれば別のVRデバイスで行うことが可能になる。
=ネット上の挙動をApple Vision Proで行うことが可能になる。
外のサーバーにデータを保存してやり取りする。=>データベース()
SQLなどもデータベースに一部であり、単に「保存する」だけではない。
SQL=>データを取り出しやすくする言語
基本的にはロックがものすごく硬く作られているため、自分だけでは管理できない=>データベース管理システムが存在する。
RDS(リレーショナルデータベース)=> データの入れ物を用意し(テーブル)、テーブルにデータのルール定義(カラム)をして、データ検索やデータ蓄積を行う。
カラム=>列。数学での列とは違いがあまりないが、ジャンルで分けられるので計算できるものが必ず入るわけではない。
ストレージ=>記録装置全般。特に定義がない。
ファイルサーバー=>ファイルパスや URL などでデータが取得できる仕組み。
「静的」な情報であれば使用することが多い。
データベースサーバー=>データのルールを定義してデータ検索やデータ蓄積をしやすくする仕組み。
ゲーム自体のデータの管理やユーザーごとのデータ管理をすることに向いている。
post => start,put => update と覚えると良い。
本来サーバーを使う上では5つだが、「試す」ぐらいなら2つ(get)(post)のみでok.
表 (データベース) =>データ要素(値)の集合を垂直な列と水平の行のモデルで構成したもの。
表には所定の個数の列があるが、行数は不定である。各行は特定の列の値で識別され、それを候補キーと呼ぶ。
データベースを管理する上で、単にコードだけで管理することは難しい。
データを管理する際、初めから配列を受け取るとUnityがエラーを出すことがある。
listにした際、そのデータのタイトルがあっていれば取得、使用が可能になる。
サーバー => Unity 情報共有(コード使用)それぞれ変動可能。ただし、「翻訳」(それぞれ言語が異なるため、合わせるようにしなければならない。)
ChatGPTでAPIを取得することが可能。ただし、お金がかかる。
これを使う上で、必要な変数が多くなるのでよく見てやらないと分からない。(公式のページにやり方が「英語」で書かれているので注意!)
また、仕様書がネットに乗っているのでそれを見るのもアリ(古いのもあるので注意)
ユーザーがAPIの設定を変更させることが可能、十分なものが作れる。
Whisper API で文字起こししてChatGPT API とやり取りするをすることが可能。(Unityで音声入力可能)
ちなみに、音声入力時にその行動を実行させると入力しながら実行させることが可能になる。
APIでは接続時にエラーが起こりやすいので、さまざまな種類のエラー用ログを残しておくと良い。
Line Notify でUnityのスクリーンショットをLineに送ることができる。
GitHub Pages を使用すると、素材サーバーとして使用することが可能。
ただし、リポジトリ自体が非公開でもPagesにすると公開データとして扱われるので使用しない方が良い。
URL自体も少し変更されるため、もしあるか確認したい場合は間違えることもあるので注意。
画像ファイル自体は特に問わずにImageとして使用できる。
CodeSpaceで作業するとき、別のサーバーでそのままにしてしまうのはNG。
...APIって使うときサーバーの管理をしているのでお金がかかるのは分かるが、大体クレジットなのがキツイ。
API自体は「技術をつなげる」ためにあるので、発展先はいくらでもある。
API(OpenAI)自体は自治体の情報にいろいろあるので、探して活用してみると良い。
国土交通省も出しているので、「Plateau」という地形を取れるものがある。
これによってVRに入れ込むことも可能。(実は材質も再現されている。)
Unityに再現すると、「テクスチャ」も再現されていることがマテリアル上で分かる。
JsonUtilityやTextureについてはより一層深く知ることが大事。
技術に限らずに触れてみることが「アイデアの作り方」の本をお勧めする。
つなげる上で「自分なり」を見つけよう。APIはつなげることを続けるので大事。
自分の「経験」が乗ったつなぎ方をすると尚よい。【オリジナリティ】がある。
何かがあった際の「助け」を作っておくと良い。
Unityでの「外の世界」とのつなぎ方は無限大。
CodeSpaceをやってみる。(サーバーの立て方を知る。)OpenAIを使ってみる。(AI=>APIやVR技術にかかわる。)