地方在住者による、CG系の雑記

何もない地方と、パソコン一台で何でも作れるCGとの相性は抜群であるというモットーをもとに、CG大好き管理人が勉強する様子を綴ったブログ

GalaxyにてUnityRemoteを試す際の注意点

※主にClaudeとの会話のメモになります。

 

はじめはUnityのプレイモードで自機のandroidを試そうとしたとき以下のエラーが出た事だった。

CommandInvokationFailure: Unity Remote requirements check failed C:\Program Files\Unity\Hub\Editor\????\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\adb.exe forward tcp:7201 tcp:7201

 

Claudeから提案された解決策は以下の通り。

1. USBデバッグの有効化を確認

Androidバイス側で:

  • 設定 → デバイス情報 → ビルド番号を7回タップして開発者モードを有効化
  • 設定 → 開発者向けオプション → USBデバッグを有効化

2. USB接続の確認

  • USBケーブルがデータ転送対応か確認(充電専用ケーブルでは動作しません)
  • USBポートを変えてみる
  • 接続時にデバイスに「USBデバッグを許可しますか?」のダイアログが出たら許可する

3. ADBの動作確認

コマンドプロンプトで以下を実行:

"C:\Program Files\Unity\Hub\Editor\使っているバージョン\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\adb.exe" devices

 

バイスが表示されれば接続成功です。表示されない場合は次へ。

4. ADBサーバーの再起動

"C:\Program Files\Unity\Hub\Editor\使っているバージョン\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\adb.exe" kill-server


"C:\Program Files\Unity\Hub\Editor\使っているバージョン\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\adb.exe" start-server

5. デバイスドライバの確認

  • バイスマネージャーを開く
  • Androidバイスが正しく認識されているか確認
  • 必要に応じてメーカー提供のUSBドライバをインストール

6. Unity Remote アプリのインストール確認

  • AndroidバイスGoogle Playから「Unity Remote 5」がインストールされているか確認
  • アプリを起動しておく

7. USB接続モードの変更

Androidバイス側で:

  • 通知バーを開く
  • 「USB接続の用途」または「USBの設定」をタップ
  • **「ファイル転送(MTP)」または「PTP」**を選択
  • 「充電のみ」になっている場合は認識されません

8. Unity Remote の設定

Unity Editor で:

  • Edit → Project Settings → Editor
  • Unity Remote のセクションで:
    • Device: Any Android Device を選択
    • Compression: Automatic
    • Resolution: Downsize

9. Windows用のGalaxyドライバーをインストールしてください。(使用スマホがGalaxyの場合のみ)

https://developer.samsung.com/android-usb-driver

インストール後、GalaxyとPCを再起動する。

 

-------------------------------------------------------------------------------------------

自分の場合その後も失敗し続けたので、

コマンドプロンプト

"C:\Program Files\Unity\Hub\Editor\使っているバージョン\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\adb.exe" devices

のList of devices attachedの下に自分のデバイスが表示されるまで

スマホとパソコンの接続を抜き差しする。

PCとスマホを再起動してみる。

開発者モードを一度無効化して再度有効化してみる。

 

設定 → 開発者向けオプション

「USBデバッグの認証を取り消す」をタップ

スマートフォンを一度PCから抜いて、再接続

PCからの接続を許可する

 

といった手段を試してみた。

 

時系列が前後するがコマンドプロンプトにて、

List of devices attached

unauthorized

と表記されるようになった。

この状態だとGalaxyがPCに認識されてはいるが許可されていないので、

作業としては完了していない。

 

最終的に以下のようになればOK。

"C:\Program Files\Unity\Hub\Editor\あなたのバージョン\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\platform-tools\adb.exe" devices

List of devices attached
R5CTB2F8ESD     device

 

 

 

 

Unityのタグ・レイヤーの数の上限をAIに聞いてみた

Unityでタグやレイヤーの数に上限はありますか
 
ChatGPT:

はい、Unityにはタグ(Tag)とレイヤー(Layer)それぞれに上限があります。以下のように定められています👇


🏷️ タグ(Tag)の上限

  • 最大:1000個まで
    Unityの内部的には1000個が上限とされています。
    ただし、Inspector上で編集できるタグは「Edit → Project Settings → Tags and Layers」から追加する方式なので、数百を超えると管理がかなり困難になります。

💡 実際には「大量のタグを使う設計」は推奨されていません。
代わりに以下の方法が推奨されます:


🧱 レイヤー(Layer)の上限

  • ユーザー定義レイヤーは 32 個まで(0〜31)

    • 0〜7 は Unityの内部予約レイヤー(例:Default、TransparentFX、UI など)

    • 8〜31ユーザー定義レイヤーとして利用可能(最大24個)

💡 Physics や Camera の Culling Mask など、レイヤーをビットマスクで扱う処理が多いので、
32個という制限は int(32bit) のビット数に由来しています。


🧩 まとめ

種類 上限数 備考
タグ (Tag) 約1000個 実質的には管理が大変なので数十個程度が現実的
レイヤー (Layer) 32個(うち8個は予約) 8〜31の範囲をユーザーが使用可能

もし「敵AI」「アイテム」「弾」など分類が多くなってきて、レイヤーやタグの上限に近づいている場合は、
Enum+ScriptableObject方式Dictionaryベースのカテゴリ管理を導入すると拡張性が高くなります。


希望があれば、
「タグ・レイヤーを使わずにオブジェクトを分類する仕組み(Enum/ScriptableObjectベース)」のサンプルコードも出せます。
作りたいゲームのジャンルに合わせて例を出しましょうか?

TripoAI Ultramodeを試してみる。

前から世話になってるtripoAIにultraモードとかいう新機能が解放されたらしい。

1回だけ無料で試せるというから、試してみた。

 

3D人様の紹介記事を載せておきます。

Tripo v3.0 Ultra Mode - 3D生成AIの高精細モデル生成可能なモードが正式リリース!

 

ネットで拾ってきたワンパンマンのムカデ長老の画像。

 

あんま期待してなかったけど、造形、テクスチャ共に前モデルよりよさげ。

ちなみに今回はリトポロジーとリギングはしていない。

 

正面。顔が潰れていたり、テクスチャが汚かったりする。

 

後ろから。見ての通り、途中から尻尾が太い方と細い方に分かれてしまってる。

入力した画像のアングルをAI君がそのまま解釈したともいえる。

 

テクスチャなしver

めっさよくない!?

俺がモデリングするより上手いし、10分くらいでここまでできるんだぜ。

クォリティーの面もここから修正していけばいいかと。

 

sketchfabにもアップロードしたので気になる人は是非ー

sketchfab.com

PirateMultiplayerGameTemplate(MMO)を買ってみた。

アセットのurl 

https://assetstore.unity.com/packages/templates/systems/pirate-multiplayer-game-template-mmo-308715

 

2025-10-6作業

2023のどのレンダーパイプラインも対応してるっぽいので、2023urpにて新規プロジェクト作ってインポート。

 

エラーばっかやんけ

 エラーにCinemachineコンポーネントが必要だよ!ってニュアンスが書いてあるので、Cinemachine入れてみる。

The type or namespace name 'Cinemachine' could not be found (are you missing a using directive or an assembly reference?)

MultiAimConstraintも必要だって書いてあるから、AnimationRiggingパッケージも入れねば。

The type or namespace name 'MultiAimConstraint' could not be found (are you missing a using directive or an assembly reference?)

 

以上のことやってもPlaceスクリプトが足りないだの、ネットワークエラーだの、

エラーが鳴りやまないので、打ち止め。

-----------------------------------------------------------------------------------------------

10-7更新

新しくプロジェクト作り直してインポートしようとしたら、

アセットのアップデートが入ってた。

アップデートしたら、大半の問題が解決してた。

大半と書いたのは、プレイするまでに問題がある故。

 

前提として、このアセット、MMOできるようにネットワークシステム込みのオールインワンパッケージなのだが、

通常であれば、ビルドする→ゲームできる だが、

このアセットは、

マスターサーバをビルドする→ゲームサーバーをビルドする→ビルドしたマスターサーバをrun(起動)する→ゲームサーバをrunする→クライエント(ゲーム本体)をrunする→アカウント登録する→ゲームできる

という面倒臭い工程を踏まねばならない。

まぁ、こういうシステムを1からコード書いて構築することと比べれば、大した労力ではない。

本日起きた問題はここで、

マスターサーバとゲームサーバをビルドしたはずが、プロジェクトファイル内にないのだ。

だからか、アカウント登録する時にサーバとの接続失敗しました。とメッセージ出る。

--------------------------------------------------------------------------------------------------

10-8更新

デベロッパーにメールで聞こうかな...と思ったらアプデ入ってた。

これ入れれば直るかな?

 

--------------------------------------------------------------------------------------------------

10-12更新

前回から日が空いたが、

あれからデベロッパーとメールで二回やりとりし、

ゲーム自体はプレイできるようになった。

ただ、中には入れるものの、MMO前提のため、ソロプレイじゃまともに遊べないし、何ならNPCの敵がいないから戦闘もできないから困っている。

 

 

クソゲーから学びを得てインディーゲームに反映する

どの世界でもそうだが、

先人の失敗というのは貴重だ。

それ無しに一からやろうとするのは車輪の再発明に他ならないと思う。

これをインディーゲームに適用すると、

過去あったクソゲーと呼ばれるゲームから学べることは多いと思う。勿論全てのゲームの失敗を反映にするのは無理だからある程度ピックアップした上ではあるが。

 

ファイナルソード

令和発売とは思えないグラフィックながらも、

ニンテンドーストアから4日で消されたという話題性、ツッコミどころ満載のギミック等、

愛すべきクソゲーとも呼ぶべき作品

学び:著作物のパクリをすべきでない、

プレイヤーに伝わるようなストーリーテリングの重要性、

効果音の大きさは耳障りにならない程度であること、

 

https://m.youtube.com/watch?v=Mo_FZLOo5AE&t=6988s&pp=ygUl44GL44KJ44GZ44G-IOODleOCoeOCpOODiuODq-OCveODvOODidIHCQn7CQGHKiGM7w%3D%3D

 

2代目ファイナルソードことGreen fields silver tree

エフェクトによる戦闘中の画面停止、何言ってるのか分かりづらいローカライズ、世界全体の見た目から溢れるunity味、敵を倒した後に敵の攻撃が発生する、セーブデータが消える、長時間プレイ後にクラッシュする

https://m.youtube.com/playlist?list=PL_RkFtrkEp5rlgmMRykhoR1lX4FP0yBLM

 

Sword Of Fortress

こちら一時期有名になった、Sword of fortress

敵にたどり着くまでのマラソンの長さ、

敵の体力が2倍に増えていくクソ仕様、

死ぬと最初からになるので、剣で戦うより攻撃力3/4になるものの遠くから弓でチクチクするのが安牌であること(剣を使うメリットがない)

https://m.youtube.com/watch?v=ZdRrnXTeq2s&pp=ygU144GL44KJ44GZ44G-IOOCveODvOODieOCquODluODleOCqeODvOODiOODrOOCuSDphY3kv6HSBwkJ-wkBhyohjO8%3D

 

これはクソゲーではないが、110円という値段の割に高クオリティという価格破壊を起こしているソウルライク。より多くの人に遊んでもらおうという気概を感じるし、創作に真正面から取り組んでいる姿勢が伝わる。

https://m.youtube.com/watch?v=mjtDna-NsWE&t=305s&pp=ygUW44GK44Gr44KEIOOCr-OCveOCsuODvA%3D%3D

 

Vietcong  ベトコング

Steamストアページと実際のプレイ画面が違うため、詐欺臭するし、内容も虚無だし、木が空中から生えてる。

https://m.youtube.com/watch?v=bw4NIJPPaXM

 

例え他と比べて見劣りしたり、ゲームとして体をなしていなくても、

ストリーマーや消費者が面白がってくれれば最終的に勝ちだとは思う。

ただ、人前に出す以上、最低限の作法というものはあるわけであって、クソゲーを反面教師とすることで同じようなミスは防げると思う。

 

3次元空間内での敵AIの挙動を作る

水中で格闘するゲームを個人で作りたいと言い始めてはや数年...

AI君にプログラムを書いてもらった。

※ChatGPTからのコピペです。

 

① 空のゲームオブジェクトを作る

  • Hierarchy で右クリック → Create Empty

  • 名前を「EnemySpawner」にする

スクリプトを作成

EnemySpawner.cs という名前で以下のように作成してください:


📄 EnemySpawner.cs

csharp
using UnityEngine; public class EnemySpawner : MonoBehaviour { public GameObject enemyPrefab; public Transform playerTransform; public int totalEnemies = 5; public float spawnRadius = 10f; void Start() { for (int i = 0; i < totalEnemies; i++) { // スポーン位置をランダムに円周上に配置 Vector3 spawnPos = transform.position + Random.onUnitSphere * spawnRadius; GameObject enemy = Instantiate(enemyPrefab, spawnPos, Quaternion.identity); var ai = enemy.GetComponent<EnemySurroundAI>(); ai.player = playerTransform; ai.index = i; ai.totalEnemies = totalEnemies; } } }
 
 
以下は敵AIに貼り付けるプログラム
using UnityEngine;
public class EnemySurroundAI : MonoBehaviour
{
    public Transform player;
    public int index = 0;               // この敵の番号(外部から設定)
    public int totalEnemies = 5;        // 総数(外部から設定)
    public float surroundRadius = 5f;   // プレイヤーを囲む円の半径
    public float moveSpeed = 2f;
    public float attackDistance = 1.5f;
    private Vector3 targetPosition;
    void Update()
    {
        if (player == null || totalEnemies == 0) return;
        // この敵が配置されるべき角度を計算(等間隔)
        float angle = (360f / totalEnemies) * index;
        float rad = angle * Mathf.Deg2Rad;
        // プレイヤー中心の円周上の目標位置
        //Vector3 offset = new Vector3(Mathf.Cos(rad), 0, Mathf.Sin(rad)) * surroundRadius;
        //3D水中向けの球状包囲にしたい場合
        float phi = Mathf.Acos(1 - 2 * (index + 0.5f) / totalEnemies);
        float theta = Mathf.PI * (1 + Mathf.Sqrt(5)) * index;
        float x = Mathf.Cos(theta) * Mathf.Sin(phi);
        float y = Mathf.Sin(theta) * Mathf.Sin(phi);
        float z = Mathf.Cos(phi);
        Vector3 offset = new Vector3(x, y, z) * surroundRadius;
        targetPosition = player.position + offset;
        // 移動
        if (Vector3.Distance(transform.position, targetPosition) > 0.2f)
        {
            transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
        }
        // プレイヤーを常に向く
        Vector3 dir = (player.position - transform.position).normalized;
        if (dir != Vector3.zero)
        {
            Quaternion rot = Quaternion.LookRotation(dir);
            transform.rotation = Quaternion.Slerp(transform.rotation, rot, Time.deltaTime * 5f);
        }
        // 攻撃条件(近づいたら)
        if (Vector3.Distance(transform.position, player.position) < attackDistance)
        {
            Attack();
        }
    }
    void Attack()
    {
        // 攻撃処理(実装次第)
        Debug.Log($"{gameObject.name} attacks!");
    }
}