20200621のUnityに関する記事は9件です。

Google Map APIとUnityでの“リアルワールドゲーム”開発用ツールがついに公式リリース

1_Google Map API と Unityとの連携

米Googleは2018年3月14日(現地時間)、ゲーム開発者に向けた、「Google Maps API」での「Googleマップ」のリアルタイムデータの提供とUnityのゲームエンジンとの統合を発表しました。

このニュースを報道したした記事には以下のようなものがあります。

「Google Map APIとUnityで“リアルワールドゲーム”開発が容易に」
http://www.itmedia.co.jp/news/articles/1803/15/news061.html

グーグルマップの地図データでゲーム開発 開発者が利用可能に
https://www.moguravr.com/google-map-apis/

記事の中身を読んでいただけるとわかるように、Unity側でGoogle Map APIをどう紐付けるのかは具体的に書かれていない。今すぐにでも使ってみたいのですが...

調べてみたところ、Googleが公式に公開しているものは以下の3つの動画しかなかった。(2019年2月21日時点)

Unityとの連携に関するGoogleの公式動画

2_Google Map のデータでゲーム開発をしたい場合は。。。

GoogleのSales部門に問い合わせをしないと使用できない。セールスチーム???

GoogleUnityContactSales.PNG

どんな会社でどんなプロジェクトで使用するのかを記入して申請する形になっています。
Googleにとってもメリットがあると考えられる大きなプロジェクトから、使用させてもらえそう.

以前,私が登壇しGoogle Map APIについて話した際にはこのような声が寄せられました.

ちょっと個人では無理そうですね。

というのが、2019/02/21(木)に書いた私の記事です。

そしてついに!この時が来ました。

3_Google Maps Platform gaming services ついに公式リリース、誰でも利用可能に!

動画の概要欄には、
Google Maps Platform gaming services is officially released and available to all game developers.
(Google Maps Platform gaming servicesが公式リリースされ、すべてのゲーム開発者が利用できます。)

なんと!!!

この動画が公開されたのが、2020年6月17日ですのでGoogle Map SDK for Unityもおそらく同じ日に公開されたようです。

4_Google Maps Platform gaming services を利用したゲームのデモ動画

こんな感じで3Dマップを使ったゲームがつくれちゃいます。

5_さっそくインストールしてみた

インストールの方法の動画もアップされていました。

以下のインストールページの「You can find the Maps SDK for Unity 2019 here」の部分を
クリックすると、ZIPファイルをダウンロードできました。
(Unity 2018の場合は、隣の「here」からZIPファイルをダウンロードしてください。)

SDKインストールサイト
https://developers.google.com/maps/documentation/gaming/install_sdk

MapSDKforUnity.PNG

【注意】Google Map API をまだ登録していない場合には、クレジットカードなどの登録画面に遷移します。
https://goo.gle/3cTLpQh  から事前に登録しておきましょう。
API登録.PNG

ZIPファイルをダウンロードできたとして、話を進めます。

ダウンロードしたZIPファイル
zipfile.PNG

ZIPファイルを展開しておきます。

ZIPファイルの中身
sdkfile.PNG

次にUnityを立ち上げ、「GoogleMaps.unitypackage」を読み込みます。
今回は Unity(バージョン 2019.4.1f1)を使いました。

 [Asset] → [Import Package] → [Custom Package]
install_custom_package.png

当該ファイル「GoogleMaps.unitypackage」を選択
googlemap_package.png

HelloWorldのシーンを選択
 
フォルダ構成.PNG

BasicExampleScript を選択
BasicExampleScript.PNG

LatLngに緯度,経度の順で表示したい地点の緯度経度を入力
API Key に 発行したGoogle Map API Keyを入力
LonLatiとAPI_black.png

6_Hello World のできた

二ューヨークの自由の女神

ここまで設定できたら、画面上部の再生ボタンを押しましょう。

デフォルトの緯度経度:40.6892199, -74.044601
自由の女神.png

渋谷駅

今度は緯度経度に渋谷駅の緯度経度を入力して再生してみます。

渋谷駅の緯度経度:35.6580339,139.7016358
渋谷.png

7_まとめ

これでひとまず、使えるようになりました。
本番はこれからですね。
なにかおもしろいゲーム作りたい!!!

備考:エラーの対処

実は最初に、Unityのバージョン 2019.1.0f2 と、2018.4.23f1 で SDKをインストールをしたところ、
以下のようなエラーが出ました。

error.PNG

そこで
2019.4.1f1 をインストールしたところ、うまくいきました。
あとエラーに関わっていそうなAndroid Build Supportをインストールしなかったので、
もしかしたらそれがよかったのかもしれないのですが。

もし同じようなエラーが出てみたら同様の手順でやってみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】ZenjectSceneLoaderをAddressables.LoadSceneAsync()に対応させる【Extenject】

はじめに

最近やっとAddressable Asset System(Addressables?正式名称わからず)を使い始め、シーンのロードにも対応していることに驚きました。

自分は Extenject 使いなので今後シーンのロードは Addressables + ZenjectSceneLoader でやろうと思ったのですが、ZenjectSceneLoaderAssetReference によるシーン読み込みに対応してなかったので、検証したり対応してみたりしました。

Extenject with Addressablesの状況

Unity Addressable Assets #8(Extenjectリポジトリのissue)

In terms of addressable assets, I'm not really sure. I haven't played with it yet. But we could certainly add it as an alternative to prefabs when it's ready

Addressablesからのプレハブのバインドに関するissueはあるっぽいのですが、シーンのロードに関してはなさそうでした。

そもそも対応しないとどうなる?

API ProjectContext Bindings Parent Bindings Self Bindings
Addressables.LoadSceneAsync(.. Single) -
Addressables.LoadSceneAsync(.. Additive)
Addressables.LoadSceneAsync(.. Additive) + Contract Names
ZenjectSceneLoader#LoadSceneAsync(.. Single) -
ZenjectSceneLoader#LoadSceneAsync(.. Additive, .. Child)
ZenjectSceneLoader#LoadSceneAsync(.. Additive) + Contract Names
  • ⭕,❌:そのままの状態のときの挙動
  • ✅:APIを足したことにより実現した挙動

検証してみたら Addressables.LoadSceneAsync(.. Additive) + Contract Names は普通に動いたので驚きましたが、 ZenjectSceneLoader を用いて動的にペアレンティングしたい場合は対応する必要がありそうでした。

対応させてみる

環境

  • macOS Catalina 10.15.5
  • Unity 2018.4.21f1
  • Extenject 8.0.1
  • Addressables 1.10.0
  • エディター上・スタンドアロンビルドで簡単な動作検証済み

動作検証用に簡単なプロジェクトを作ったので興味ある人はこちらのリポジトリをクローンして触ってみてください。

ExtenjectからAddressablesを参照できるようにする

それぞれAssembly DefinitionでDLLが区切られているので zenject.asmdef にAddressables関連の asmdef への参照を追加します。

zenject_asmdef.png

AssetReferenceSceneAssetを実装する

AssetReference をそのまま使ってもいいのですが、 SceneAsset 以外の参照を渡したときにコンパイルエラーにしたいので SceneAsset 専用の参照クラスを実装します。

参考:something like AssetReferenceT(Unityフォーラム)

AssetReferenceSceneAsset.cs
using System;
using UnityEngine.AddressableAssets;

[Serializable]
public class AssetReferenceSceneAsset : AssetReferenceT<
#if UNITY_EDITOR
    UnityEditor.SceneAsset
#else
    UnityEngine.Object
#endif
>
{
    public AssetReferenceSceneAsset(string guid) : base(guid)
    {
    }
}

このクラスをExtenjectから参照できるようにします。

  • Assets/Plugins/Zenject/Source とかの zenject.asmdef配下に置く
  • 自前の asmdef の配下に置いて先の手順のように zenject.asmdef に参照を足す

などプロジェクトに応じてよしなに設定します。

ZenjectSceneLoader にメソッドを追加する

以下を追加します。

ZenjectSceneLoader.cs
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;

...

public AsyncOperationHandle<SceneInstance> LoadSceneAsync(AssetReferenceSceneAsset sceneReference)
{
    return LoadSceneAsync(sceneReference, LoadSceneMode.Single);
}

public AsyncOperationHandle<SceneInstance> LoadSceneAsync(AssetReferenceSceneAsset sceneReference, LoadSceneMode loadMode)
{
    return LoadSceneAsync(sceneReference, loadMode, null);
}

public AsyncOperationHandle<SceneInstance> LoadSceneAsync(
    AssetReferenceSceneAsset sceneReference, LoadSceneMode loadMode, Action<DiContainer> extraBindings)
{
    return LoadSceneAsync(sceneReference, loadMode, extraBindings, LoadSceneRelationship.None);
}

public AsyncOperationHandle<SceneInstance> LoadSceneAsync(
    AssetReferenceSceneAsset sceneReference,
    LoadSceneMode loadMode,
    Action<DiContainer> extraBindings,
    LoadSceneRelationship containerMode)
{
    return LoadSceneAsync(
        sceneReference, loadMode, extraBindings, containerMode, null);
}

public AsyncOperationHandle<SceneInstance> LoadSceneAsync(
    AssetReferenceSceneAsset sceneReference,
    LoadSceneMode loadMode,
    Action<DiContainer> extraBindings,
    LoadSceneRelationship containerMode,
    Action<DiContainer> extraBindingsLate)
{
    PrepareForLoadScene(loadMode, extraBindings, extraBindingsLate, containerMode);

    return Addressables.LoadSceneAsync(sceneReference, loadMode);
}

ちなみにこれらはZenjectSceneLoader の既存の LoadSceneAsync() をコピペして

  • 返り値
  • 引数
  • SceneManager

をAddressables対応仕様に書き換えただけのものです。

これで ZenjectSceneLoader にシーンの参照を渡してロードしつつ、シーン内の [Inject] に適切にInjectされるようにできました。

Extenject_with_Addressables.gif
↑スタンドアロンビルドでの検証(gif)

感想

Addressablesを使ったバインディングのベストプラクティスが知りたい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

YouTube APIでSuperChatを取得してUnity上でお札を降らせる

YouTubeのスーパーチャットに反応してUnity上でお札が降るようにしてみます。
1から書くわけではなく、出来合いのものを組み合わせて完成させます。

※随分前に実装したので、記憶が曖昧です。間違ってたらすみません。

使用ツール

UnityでYoutube Liveのコメント・スパチャを取得できるツール

完成形

方法

今回使用するツールの使い方にも書いてありますが、YoutubeCommentのBeginGetComments()関数を呼ぶことでコメント取得を開始でき、OnCommentで新しいコメントがコールバックされ、OnSuperChatでスーパーチャット投稿時にコールバックが呼ばれます。その通りに実装しますが、今回はパーティクルを呼び出して紙幣を降らせることにします。

上記使用ツールをUnityにインポートしましたら、パーティクルを実装していきます。
私はこちらを参考にパーティクルを実装しました。

【Unity】パーティクルで紙ふぶきを散らす

実装後、使用ツールを説明に従って使用可能な状態にしておきます。

その後、スーパーチャットに反応してパーティクルを起動させるよう実装していくわけですが、インポートした使用ツールのExampleフォルダにcsファイルがありますので、こちらを改変していくのが簡単ですので、その前提で進めます。
image.png

まずクラスの開始時に「ParticleSystem particle;」などと宣言しておき、先程実装したパーティクルのGameObjectを代入しておきます。
particle = GameObject.Find("hogehoge").GetComponent();という感じでしょうか。updateの中ではFindしないみたいな話はここでは割愛します。

その後、Start内でparticle.Stop();として予め対象のパーティクルを止めておきます。うまいこと設定で止められるならそれでも良いです。

そして、OnSuperChatメソッド内でparticle.Play();(particleの部分は宣言した変数名)と書けば、スーパーチャットが飛ぶたびにパーティクルが実行されます。

YouTubeのAPIはすぐ使い切ってしまうため、そのあたりは調べるなり計算するなりで、自分が最大限使う時間を考慮して取得間隔を設定してください。
上記ツールのYouTube CommentスクリプトのGet Comment Intervalで設定して下さい(秒)。
ちなみに、24時間連続稼働の想定だと60秒に一回の取得です。

【参考】
YouTube Data APIの使用量上限について

よろしくおねがいします(酔っているのでこのへんで)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SSD換装でUnityの開発効率をアップする!

現在メインドライブが(128GB)という非常に少ない環境で開発していたのですが
容量不足でUnity開発でも不便が増えてきたため新しいものに交換することにしました。
今回は交換手順や開発環境にどのような変化を与えたのかなど、備忘録として残しておこうと思います。

続きはこちらです。
https://tedenglish.site/increasedefficiency-with-newssd/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

OculusGo 画面共有してみる

お疲れ様です。

日課が終わり、引き続きVR開発です。

https://note.com/nerd0geek1/n/n52f19c34245d

ここあたりをみて、

image.png

vysorをインストール

Android関連の開発でここあたりは既に確認済みでした。

結構簡単に画面共有できました。

これで何を見てるか共有できますね

image.png

image.png

はい、昨日につづき

Unityちゃんです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Oculus Goでユニティちゃんライブステージを動かす【Unity】【VR】【Oculus Go】

お疲れ様です。

かねてより懸案だった、

OculusGoでユニティちゃんライブステージを動かす

試してみました。

https://kan-kikuchi.hatenablog.com/entry/Oculus_Go_UnityChan

https://airmore.com/jp/install-apk-files-on-android.html

このあたりをやってみて

うまくいきました

image.png
f:id:jinsights:20180719004616j:plain

一番上に、UnityちゃんCRSがインストールされています。

動画は見せられませんが、うまくいきました!

Androidもいけそう!

image.png

ただ、公式のUnityちゃんライブステージ

出てたんですがね・・・

カメラが固定されていて結構見やすいものでした。

また、DMM.VRも試してみました。

これすげーよ!

是非試してみてください!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity × TensorFlow でDL

お疲れ様です。

色々試しています。

image.png

他人のブログ見ながら、

Unity × TensorFlow で深層学習。

これは、

12枚の板の上に、

黄色いボールが斜面に流れて落ちそうになり

始めは落ちたりもするんですが、

深層学習で、勉強していって、

落とさなくなる、

というのを試して見ました。

私のMacだとかなりつらい模様ですが、

GPUかなり乗せたPCなら、

スムーズにいけそうです。

色々試すと面白そうです。

2018.2.3追記

なんのことはありませんでした。

私が、見ていた映像は、

学習している動画でした。

正常に動作しました。

ちょっとUnityにも興味が出てきました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity2018】VuforiaでARを試す

おはようございます。

だいぶ前に検証したんですが、

更新し忘れていたので記載します。

image.png

ARマーカーを準備して

image.png

名前忘れたけど、

なんとかちゃん、

マーカーの上に。

簡単ですよ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Watson × Unity 初心者でもできる、VR 空間で Unity ちゃんとおしゃべりアプリ を試してみた

お疲れ様です。

かねてより懸案になっていた、

VRの開発やUnityの開発、諸々・・・

正直、ソリューションの設計関連やっていることもあって

勉強する時間がねー。

自宅に帰っても、家族のフォローが優先になってしまうので、

結構厳しい・・・・・

そこで、業務時間中の会議の合間にちょこちょこ開発研究することにしてみました。

https://www.ibm.com/developerworks/jp/cloud/library/unity/index.html

WatsonとUnityを一緒に学習できるということに・・・

あー、あと

これもやってみた・・

http://singularity-labo.com/feature/24

これもUnityちゃんなわけで・・・

こればっかやってると、

最近、〇〇さん変わってしまったね・・

って言われそうや…

最近抵抗がなくなってきたのは確かですが・・

まー面白そうな気もしますしね・・

んで、本題・・

Watsonは

3つのサービスを利用します。

Speechtotext

Texttospeech

coversation(現 Watoson Assistant )

これらを駆使して簡単にできました。

ちなみに、

coversation のところはひと手間かける必要あるので、

https://qiita.com/yamachan360/items/bcfa10b2d9bf62df8300

ここあたりが参考になります。

ということで、

VRアプリでも開発できて、

Watsonでも簡単にアプリ作成できました。

image.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む