忍者ブログ

BlenderLog

Blender x Unity x AviUtl で蒼き鋼のアルペジオのオリジナルアニメやゲーム頑張って作ってみます。 開発記録を掲載します。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


UNETの使い方2

前回は UNET を使って、LAN外からアクセスできるオンラインゲームが作れることを確認しました。
HUDに頼らずにゲームを起動すると
PC側はサーバーとして待受け、Android側は繋がるまでFindし続ける作りにしたいと思います。

ちょっと自分もわからないので調べます。

似たようなキーワードが見つかったのは
NetworkMatch
なんですが、これを使っているという記事を探してみます。

Unity5.1 ネットワークシステム Matchmaker

Unity 5.1 から導入された新しいネットワーク機能の UNET について詳しく調べてみた
にありますね。

特に後者はサンプルプログラムまで書かれています。
さすが凹みさんとこの記事ですね。

起動した環境が Android なのか、PCなのか Editor なのかで切り分けることにしてみます。
マクロを見たことがあるのですが

プラットフォーム毎の Define

ここっすね。
両方起動すると繋がる、やってみましょう。

下記コードで起動するとサーバー開始、クライアント接続ができることを確認しました。


using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.Networking.Match;

[RequireComponent(typeof(NetworkManager))]
public class NetworkConnector : MonoBehaviour {

public string MatchName = "UnetTest";
public string RoomPass = "B35Fwh3";
public uint MatchSize = 4U;

private NetworkManager _manager;
private NetworkMatch _match;

// Use this for initialization
void Start () {
_manager = GetComponent<NetworkManager>();
_manager.StartMatchMaker();
_manager.matchName = MatchName;
_manager.matchSize = MatchSize;
_match = _manager.matchMaker;

if (Application.platform == RuntimePlatform.WindowsPlayer
|| Application.platform == RuntimePlatform.WindowsEditor)
{
_match.CreateMatch(_manager.matchName, _manager.matchSize, true, RoomPass, _manager.OnMatchCreate);
}
else if (Application.platform == RuntimePlatform.Android)
{
_match.ListMatches(0, 20, MatchName, _manager.OnMatchList);
StartCoroutine(JoinMatch());
}
}

private IEnumerator JoinMatch()
{
yield return new WaitForSeconds(3);
var desc = _manager.matches[0]; // join first room
_match.JoinMatch(desc.networkId, RoomPass, _manager.OnMatchJoined);
yield return 0;
}
}
PR

UNETの使い方

Unityでネットワークゲームを作ってみます。

前回のuGUIボタンが一個あるだけのシーンに
PlayerObject と NetworkManager という名前の空のオブジェクトを追加しました。

PlayerObject オブジェクトには Network Transform コンポーネントを追加します。
NetrowkManager オブジェクトには NetworkManager と NetworkManagerHUD を追加します。

さて、この状態でゲームを実行すると
HUDによるボタンが現れます。

 

今回は家の外からの通信で、待ち受けている自宅PCで実行中のゲームのオブジェクトを動かしたいと思います。
それを行う場合は LAN の外となるので Enable Match Maker を選びます。

さて、この機能を有効にするにはですね、事前登録が必要になります。
Unity Connect でプロジェクトと Multiplayer の設定を行います。

自分のUnityアカウントを持っていれば可能ですね。
あとはエディタの雲ボタンを押すと、プロジェクトを選べたり
Multiplayer の状態を調べたりできます。


この雲ボタンを押すというのが、なんとも見つけにくい操作方法でした。
なにはともあれ、実行して
Enable Match Maker ボタンを押して Create Internet Match ボタンを押して
次の状態になれば待受完了です。
 

Android 用にビルドして Android にも入れてみましょう。

あれ、Find しても先に進まないぞ

AndroidManifest.xml を見てみるとインターネット接続についての設定がなかった
これを付けます。

Unity の Player Settings から設定可能でした。
Internet Access の項目を Require にすると、インターネットアクセスを要求するようになります。

ここだけ変えてビルドしたものを Android 上で動かすことで
接続に成功することを確認しました。

Enable Match Maker ボタンを押して Find Internet Match ボタンを押して Join します。
 
証拠画像がこちら
これで自宅外の環境からいつでもアクセスが可能なオンラインゲームが作れます。

Unity 神っすね、こういうことするためにどれだけの知識と労力が必要なことか!
ボタンをポチポチしてできる時代が今ここに!

Android 用アプリ開発

スマートフォンに買い換えて半年ほど経ちます。
こちらに Unity で開発したゲームを入れてみましょう。

ゲームは先ほど作った PC 用と同じものです。

Build Setting で Android を選んでビルドするだけ

ビルドに失敗する場合はビルド設定を見なおして
会社名やアプリ独自の名前の設定などが抜けていると思うので設定してください。
Build Identifier がそれです。
今回は com.BlenderLog.UnetTest としました。
ビルドに成功すると .apk ファイルが作成されます。

インストールのために、お使いの Android 端末のUSBデバッグ機能を有効にします。
ビルド番号を7回連続でタップするとか、意味不明な方法で開発者版の機能を解放したりします。
端末によって異なりそうなので、この辺のキーワードを頼りに調べると良いかな

あとは Android 開発用に SDK を別途開発環境に入れないといけません。
これも一冊本を買ってみるのが良いかな?
USBドライバーの設定ファイルの書き換えとかとっても面倒ですよ。

とにかく、すべての準備作業を終えると
cmd より adb devices コマンドを打つと
デバイスIDが表示されます。

この状態で
adb install UNETTest.apk
とか打つと、Android端末にインストールされます。

どこにインストールされたのか探してしまいました。
設定でアプリ一覧にいると思います。


Android 端末で動きました。
証拠画像を添付

ボタンちっさいので押しづらいですが、ボタン押下によってUIテキストも切り替わっています。




Windows用アプリの開発

さっそくWindows PCで遊べるゲームを作ってみましょう。

シーン操作はマニュアルを一通り読むと覚えられると思います。
結構な量ですし、すべて覚えるのに時間がかかってしまいます。
そんな時は、実際に触るところだけを知り動かしてみるのが一番。
次のブログ記事を定期的に読むと、素早く動作確認までもっていけるようになります。

テラシュールブログ

今日はもっと単純なところからやりたいと思います。

uGUI のボタンを画面中央に配置して、押すと
表示されている数字がインクリメントされるというものを作ってみました。

uGUIボタン配置は
【uGUI】Buttonの使い方
を読むと良いでしょう。
要点だけを適切に説明している良い資料でした。

さっそくゲームを作ってみました。

Unityエディタでは正常に動作しています。
こちらを Windows PC用にビルドしてみます。



dekimasen
tyotto
nihonngo nyuuryokumo dekinakunatteiru nndakedo?

ということで、お困りのあなたに解決方法を示してあげましょう。

Unity Archiveページからお使いのバージョンに合った UnityInstaller を入手します。

そこで Windows PC用のビルドアセットと、Android 用のアセットを選び
C:\Program Files (x86)\Unity にインストールします。

…あれ、Unity.exe の配置に失敗し
インストール後に PlaybackEngines にフォルダが足されていませんね。

PC再起動してもう一度!

駄目だ

---------------------------
Unity 5.3.0f4 Windows Support Setup
---------------------------
Failed to locate Unity.exe!
---------------------------
OK  
---------------------------

が出る。
で調べてみると、64bit版のexeを先に入れないとだめとのこと
確かに64bit版を入れてからならこのエラーは解決できました。

私の環境は 32bit エディタなので、C:\Program Files (x86)\Unity  パスが正解です。
誤ってディフォルト設定で進めても 32bit エディタを使っている場合は、何も変化が生まれませんので気をつけましょう。
複数のバージョンのUnityをお使いの方もこの辺は注意が必要です。

インストールを終えると Build Setting メニューより Switch Platform ができるようになりま

せんね

おえぇ
吐き気を催す邪悪

もしかして 32bit 版では正常インストールで事を進められない?

仕方ない、手動で設定します。
とりあえず 64bit 版ですべて用意してから
C:\Program Files\Unity\Editor\Data\PlaybackEngines
にあるフォルダを
C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines
へ移動します。

Build Setting メニューより Switch Platform ができるようになりました。(まったく!公式しっかりして!)
あとは Build ボタンを押すと現在のシーンがメインとなる PC用ゲームが完成します。


動きました。
証拠画像を添付

Unity入門

Unityを仕事で使うことも多いので
初心者、初学者に向けて簡単に解説したいと思います。

一番最初にやるのは次のようなフォルダを掘る作業
この後色々なプラグインが入るのですが、まずは自分が作ったファイルがどれなのか
すぐに分かるようにフォルダをこのように掘ることが大事

これに気付いた多くのプラグイン提供者は、これにならった形で作っています。
Assets直下に Scripts を掘る行為はかなり罪深いことになっているので
気をつけましょう。

最終的に使わなくなったプラグインを削除したい時などに
ファイルの判別が不可能となり、ユーザーを困らせてしまいます。
(プラグインのインポート機能はあっても、抜く機能が用意されていないのも問題です。)


        
  • 1
  • 2