Alpaca Tech Blog

ゲーム作る系 草食動物の備忘録

【Unity】Gaiaを使って簡単マップ作成。ついでに空と海も作成してみた。

これは、

Unity アセット真夏のアドベントカレンダー 2019 Summer! の27日目の記事です。

 

※2019/10/26 追記

本記事は Gaia の説明となります。 現在、Gaiaは、Gaia 2にバージョンアップされており、またPro版も出ています。2やProは、記事と互換性が無い可能性があります。ご了承ください。

   

紹介するAsset

概要

Terrainベースで地形を簡単に作れ、草木や建物を自動で配置出来るアセットです。

空や海やポストエフェクトもいい感じにしてくれます。

20秒ぐらいのダイジェスト動画作りました。


【Unity】Gaiaを20秒で紹介する

 

環境構築(インストール)

  1. いつも通り AssetStoreからインポート。
  2. メニューからGaiaManagerを開きます。その前に初回時は色々出ます。

f:id:alpacatech:20190825220739p:plain

 2-1.PostProcessing V2がない場合は、ダイアログが出ます。

f:id:alpacatech:20190825223742p:plain

勝手にインストールしてくれました。

2-2. 木などのアセットも追加が必要です。

f:id:alpacatech:20190825224442p:plain

Import画面が出ます。

f:id:alpacatech:20190825224533p:plain

Gaia Dependenciesディレクトリに収まってます。
インポートします。

 

これでGaiaManagerが表示されるようになります。

  

Gaia Manager(メインメニュー)

ショートカットキー Ctrl+G(Windows) でも出ます。 f:id:alpacatech:20190825224335p:plain

情報が多いですが、上の部分は環境の設定(世界の広さや描画方法、ダミープレイヤー等)下は、生成の手順です。機能の説明を書くと以下の通り。 

f:id:alpacatech:20190826014309p:plain

  

0. Set Linear Deferred(ライティング設定)

ライティング設定をLinearにします。

参考:リニアのワークフローとガンマのワークフロー - Unity マニュアル

 

1. Create Terrain & Show Stamper(地形生成)

Gaia/Gaia Enviromentが生成されます。

f:id:alpacatech:20190826012421p:plain

地形は、様々なスタンプを押して地形を編集します。

今回は、ランダム生成+手動スタンプ配置で島を追加をやってみます。

 

ランダムで地形生成する方法

f:id:alpacatech:20190827002754p:plain

  1. Session Managerを選択
  2. Add Stampsを追加
  3. Operationsにランダムオペレーションが10個追加される
  4. Play Sessionを押してしばらく待つ

f:id:alpacatech:20190827002906p:plain

それっぽいのができました。

 

手動で地形を追加する方法f:id:alpacatech:20190827003802p:plain
  1. Stamperを選択します。(鍵マークでロックするとよいかも)
  2. スタンプ画像を選びます。Gaiaには豊富なスタンプがあります。
  3. 座標や拡大率、角度などを設定し
  4. Stampボタンで追加。
  5. いい感じになるまで1~4を繰り返しやります。

 

1A. Enhance Terrain(地形補正処理)

地形に追加処理をあてます。今回は使わず2へ進みました。

 

2. Create Spawers(自動でテクスチャや草、木、建物追加)

これを選択すると、

テクスチャ、草、木、岩や建物等を自動的に配置してくれる5種類のSpwanが追加されます。

f:id:alpacatech:20190827005057p:plain

今回は、デフォルト設定でそれぞれのSpawnを押していきます。

 

3. Create Player, Post Fx, Screenshotter, Skies, Water & Wind(プレイヤー、空、海、風配置)

ポストエフェクト、空、海、風を作りプレイヤーを配置します。

押すだけで一気にリアルになりました。

 before

f:id:alpacatech:20190827005547p:plain

after 

 

f:id:alpacatech:20190827005615p:plain


実行

実行すると指定したControllerで操作できます。

f:id:alpacatech:20190827010232p:plain

今回は、Third Person を選んでいたので三人称視点で歩けます。 

自由だー!

f:id:alpacatech:20190827013204g:plain

 

水の中に入ると水の中専用のカメラ演出に切り替わったりします。

f:id:alpacatech:20190827013244p:plain

すごい。 

 

4. Bake Lighiting

ライティング焼きこみ。時間がかかるので今回は割愛します。

 

GX(Gaia eXtension 拡張機能

Gaia eXtension 拡張機能です。

サードパーティー製品は、ここにメニューが増えるかも(未確認)

 

デフォルト機能に、時刻に合わせた空や環境に切り替えができます。

  1. ☆GXタブを選ぶ
  2. SkiesのNightを選択

f:id:alpacatech:20190827005732p:plain

夜になります。音も追加される模様。

  

 

今回は、以上です。

サードパーティーの海や空のアセットを紹介しようと思ったのですが、Gaia1.9が予想以上に色々できたので終わりとします。

 

Gaia関連のアセット紹介

砂漠関連のスタンプやオブジェクト。ここのメーカーは低価格でGaiaのスタンプを数種類販売しています。

 

今回追加しようと思っていた水アセット。水中時や水から出た時のエフェクトよかった。

 

ボリューメトリックライトで光が差し込んだリアルな表現アセット。

 

最後に

細かい設定等は、公式ドキュメントやQuickStartGuide(30分もある)が充実しているのでそれを見ていくといいと思います。

公式ドキュメント GAIA | Procedural Worlds

Gaia 1.9 Quick Start Guide - Procedural Terrain Generation For Unity 3D

youtu.be

 

 開発環境

Unity2018.4.5f1 Personal 

Gaia(1.9.5-c1)

Microsoft Windows [Version 10.0.17763.678]

 

 

【Android】 何も接続していないのにemulator-5554 offlineがリストに出る

問題

Androidバイスを接続していないのにadb devicesコマンドで、

emulator-5554 offlineがリストアップされていました。

 

$ adb devices
List of devices attached
emulator-5554 offline

 

 

解決できなかった対処方法

ネットを見ると、

$ adb emu kill

$ adb adb kill-server

のコマンドで解決するとありましたが、どれも解決できませんでした。

 

停止しようとしても、「error: could not connect to TCP port 5554」と出ます。

 

原因

 

ポート 5555を利用しているプログラムがsystemdで存在し、ポート5555を既に利用していました。

今回は、そのプログラムを停止させることでリストから消えました。

 

$ adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

 

 

 

【Unity】Unity1Weekに参加しました【ひつじ】

f:id:alpacatech:20170905012756p:plain

 Unity1Weekとは

https://unityroom.com/unity1weeks/13

月曜日0:00にお題が出て、1週間でゲーム作るイベントです。

今回のお題は「あつめる」

もう何回目かわからない参加です。

 

ここ最近は、新しい職場についた(良い環境だけど忙しすぎ)のとか、1歳のお子様の成長が楽しいとか、G検定の事は忘れた。いろいろ忙しくてTwitterすらもあんまりできてなかったです。

そんな状況なので参加できないかと思ったけど何とか作れました。

今回作ったもの

毛玉を集めてかわいいヒツジを作るゲームのはずです。

 

こんな感じの何かが作られます。

 

作り始めはこんな感じ。

 

後日、勢いで変なもの作ってしまい、これどうやってゲームにするの?

と半分あきらめてたけどアクションパズルみたいな感じで収まりました。

もうちょいステージ数増やしたい。

  

 

今回得たもの

何気にたくさん新しい事覚えたような気がします。

PixelPerfectCameraの使い方

ドット絵を変な比率で拡大しないようにするカメラです。

解像度指定できるので、なめらかなオブジェクトもドットになったりとかします。

tsubakit1.hateblo.jp

 

 

画像投稿ツイート

画面スクリーンショットをimgurにアップロードしてツイートするやつです。

GitHub - ttyyamada/TweetWithScreenShotInWebGL: WebGLでサムネイル付き画像ツイートをするサンプルです

この方のTweetWithScreenShot.unitypackageを導入して

imgurのClient ID取得して、設定して1行で実装できました。ありがたや。

 

手順を後で記事にしようと思ったら、まとめている方がいたので紹介。

unity-senpai.hatenablog.com

  

naichiさんの複数ランキング対応版ランキング

ゆによんくの時は、改造してキーをいじってたのですが、

今回はnaichiさんが複数ランキング対応してくれていたので使ってみました。

blog.naichilab.com

簡単に実装完了。ありがたや。

 

ロゴの画像比率を正しく表示させる方法 

スプラッシュスクリーンのロゴの比率がおかしかったのですが、

設定変更で行けました。

f:id:alpacatech:20190707234001p:plain

MeshTypeを、TightからFullRectに変更するだけです。
 

Tightにするとテクスチャの色情報ある部分だけ切り取られてたみたいです。 

 

自分で絵を描いた

いつもアセット任せだけど、今回はタイトルとキャラクタ書きました。時間無いから雑。

背景はアセットです。

画像解像度の高さ180なので、それより高解像度は手を加える必要あります。

  

入れたかった物

トランジションのフェードインアウト

画面切り替えの演出無いので入れたかった。

 

  

最後に

私のunity1weekルールでは、

  • 優勝:完成して投稿できた。
  • 準優勝:完成できなかったけど参加した。
  • 3位:参加しようと思った。

 なので、優勝です。

 

- [Good] やりたかったピクセルパーフェクト出来たので満足。  

- [Keep] まあまあシンプルにできたので音を選ぶ余裕があった。

- [Try] まあまあシンプルだったけど、もっと簡素にしたい。

 

【メモ】メソッドの戻り値を使ってメソッドを呼ぶ奴の名前

Unityだと、DoTween等で見る形式、

 

new TweenParams().SetEase ( Ease.Linear ).SetRelative();

このように、戻り値のクラスでメソッドを呼び、

その戻り値のクラスでメソッドを呼び

その戻り値のクラスでメソッドを呼び...… 

 

Method chaining、メソッドチェーン、メソッド連鎖とかで呼ぶみたいです。

https://en.wikipedia.org/wiki/Method_chaining

 

 

定期的に名前忘れるのでメモ

【c++】「version」ファイルがあるとエラーが出る。

 

C++20 で

#include <version> が出来ました。

https://cpprefjp.github.io/reference/version.html

 

これにより、

include のパスに、

「version」ファイルや

「VERSION」ファイル(大文字/小文字を区別しないOSや設定*1)

があると、

優先順位によってはC++20でない「version」がincludeされて、

内容によってはエラーが出ます。

 

 

versionファイルの管理場所や、

includeパスの優先順位、

includeパスの位置

等を変えて対応してください。

 

 

*1

f:id:alpacatech:20190327114726p:plain

 

 

2018年Unity活動

今年も振り返ります

2017年Unity活動まとめ - AlpacaTech Blog ← 去年

 

今年の漢字は「災」でしたがそんな感じ。お許しください。

 

 

1月

Unityで年賀状作りました

f:id:alpacatech:20181231163944p:plain

公式イベントに参加しました。

http://assetstore.info/eventandcontest/themechallenge/newyearcard2018/

大賞もらえましたありがとうございます。

 

Unity1週間ゲームジャム Meetup in Tokyo #1 参加

lycoris102.hatenablog.com

 Unity1週間ゲームジャム Meetup in Tokyo #1 

開催してもらいました。

ありがたや。

 

直接出会えて、

開発のやり方、開発期間、ゲーム性の意見交換とか色々

話すことが出来て超楽しかったです。

関西から来てよかった。

来年も参加します!

 


2月

#unity1week 断念 

作りかけてたのですが
眼帯必須レベルで片目が真っ赤になり、

安静にするため断念。原因や病名よくわからないまま完治。

健康って、とても幸せなこと

 

3月

ゆるふわインベーダー

ドットシューティング作ろうとしてたみたい

twitter.com

自前で当たり判定とかプールとか最適化してたシューティングシステム構築。

今最適化するならECSとかもいるかな。

システムに手を出しすぎて中身作る前にエターなってた。

きちんと作りたい。


4月

#UnityAssetEvent 3人勇者

UnityAssetStoreまとめさんのイベントで「3」をテーマに作りました。

twitter.com

オクトパストラベラーのCM見て

ドットと3Dエフェクト組み合わせたのいいなーと思って作ったやつです。

スプライトシェーダーだと反転や影が対応していないので、

StandardShaderのカリング無し版作って描画してたと思う。

 

www.asset-sale.net

Unity AssetStoreさん3周年おめでとうございます。

 

5月

子供生まれた

UniteTokyoの日に
息子氏が生まれました。
将来有望!

 

OculusGO買った

安価で気軽にVRできるデバイス。優秀。

とりあえず何か作る。 

twitter.com

 

 

6月

#unity1week お題 ギリギリ「ゆによんく」

こういうのやりたかったので作りました。お題はこじつけ

 

 今までで1番評判良かったです。

 

入院

腸が悪いみたいなやつで10日ほど入院。
病院でゆによんくのコースエディタ作ってた気がする。

健康って、とても幸せなこと。

 


7月

OculusGoの開発したり

ARKit試したり

Unity関係ないけどファミコンのプログラムやってたり

nVidiaFlexいじったり。

 

8月

itch.io - WaterSandpit

www.youtube.com

 nVidiaFlexの水で砂場シミュレーター作ってみたかったので作った。

itch.ioで発表しました。
alpacatech.itch.io

動的にメッシュ動かすと当たり判定がおかしくなる癖があったのを、

ごまかすのに苦労しました。

高さが変わっても表現できる砂シェーダーやりたかったけどよくわからないので

テクスチャはりつけ

 

 9月

#unity1week お題 あつい「鍛冶伝説」

twitter.com

鍛冶屋さんになるゲーム作りたかったのに、

武器メッシュいじって格ゲーするわけのわからない方向に。

 

スマホ版はタイトル名で絶賛悩み中。

 

10月

積みアセットでレースゲーム作ってたと思う。

 

13年務めた会社が倒産

朝、会社に来たらフロアに社員全員集まって全員無職ににに。

ヤフーニュースに載った。

 

その後ストレス?で左耳周辺に帯状疱疹が出来てからの

ハント症候群で顔半分が麻痺する状態になりました。
全力で安静にしてたので今では回復出来ました。超危ない。

麻痺系は早めに対処しないと危ないらしいです。(完治できない、後遺症残るとか)

気になったら何もかも投げ捨ててすぐに病院へ!

健康って、とても幸せなこと。

 

11月

#unity1week 断念

こういう精神状態なので断念。
10本足のイカで何かしたかった。
スクショのみ

 f:id:alpacatech:20181231170450p:plain

 

転職?就職活動

unityroom作品等をポートフォリオにしました。
経歴にプラスされて評判良かったです。たぶん。
やってて良かった #unity1week

他にもUnityVR案件あったので面接前日に即席で作ったりしてました。

 

    最終的にはUnity関係ない所を選んでしまいましたが。

(職務経歴はC++おじさん)

 

プログラマではない同僚も色んな所でUnity出来る?とか聞かれたらしいので、

みんなUnityやっとくといいかもしれない。

やろう。

 


12月

プレステミニでグラディウス外伝してたら

シューティングやりたくなったのでスペースイワシに手をつけてる。

 


まとめ

健康って、とても幸せなことです。

元気なうちにやりたい事やっておきましょう。

 

反省 

スマホアプリデビュー予定でしたが結局出来ずじまい。

マネタイズとかやりこみ考えるとわけわからなくなるよね。

今後は既存の物を完成に向けて風呂敷広げすぎずにやりたい。

itch.ioで作品公開できたのはよかった。

 

目標 

・UnityやAIの資格とりたい

・今度こそアプリ

・完成癖をつけたい

・もっとアウトプットを

 来年は新しい職場の勉強とかでUnity率下がるかもしれないけど

それでも何か作っていきたいと思います。

 

 

それではよいお年を!

 

【Unity】ローカルビルドは通るのにCloubBuildで失敗した対応

 

経緯

Unity2017(細かいバージョン忘れた)作ったものを
Unity2018.3.0f2 にアップグレードしました。

ローカルでのビルドは成功するのですが、
CloudBuildで失敗しました。

CloudBuildは、ローカルと違って利用していないシーンやシェーダー見るのかな。よくわかりません。

 

以下がエラーです

f:id:alpacatech:20181222172235p:plain

Unity(10477,0x7fff8f4e0380) malloc: *** error for object 0x11613c970: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
[Unity] WARNING: RGB Compressed PVRTC 4BPP UNorm format is not supported, decompressing texture
[Unity] WARNING: RGBA Compressed PVRTC 4BPP UNorm format is not supported, decompressing texture
[Unity] WARNING: RGBA Compressed PVRTC 4BPP UNorm format is not supported, decompressing texture
[Unity] WARNING: RGBA Compressed PVRTC 4BPP UNorm format is not supported, decompressing texture
[Unity] ERROR: 0:17: 'varying' : syntax error: syntax error
[Unity] ERROR: 0:17: 'varying' : syntax error: syntax error
error: attach failed: unable to attach
a fatal error in the mono runtime or one of the native libraries

 

malloc: *** error for object 0x11613c970~ を調べてもUnityCloud関係なく
xcode等のエラーでした。

 

よくわからないので、
[Unity] ERROR: 0:17: 'varying' : syntax error: syntax error
https://stackoverflow.com/questions/23456739/syntaxerror-varying-in-glslを調べたら

stackoverflow.com

Why am I not allowed to use varying variables?

Because they have been replaced by the more generic in/out variable concept since GLSL 1.30.

 

varying 使えないみたいです。

 

今回の対応

シェーダーコードでvaryingを利用している所を削除。
varying mediump vec2 uv;

mediump vec2 uv;


まとめ

テストプロジェクト作ったりと数日かかりました

(CloudBuild1回試すのに時間がかかる)

エラー内容の最初の行から解決するのでなく、全体を見るべきでした。