Alpaca Tech Blog

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

【ffmpeg】 動画を連番の静止画にしたり、連番の静止画から動画を作成する

ffmpegを使用します

 

動画を静止画に分割する

ffmpeg -i src.mp4 -vcodec png "%04d.png"

src.mp4をpng形式で、0001.png〜 に分割する。

※ 出力先はフォルダ指定できるがフォルダが存在しないとエラー


連番静止画を動画にする

ffmpeg -r 30 -i %04d.png -vcodec libx264 -pix_fmt yuv420p out.mp4

秒間 30フレームで、 0001.png〜 を out.mp4 にする

 

2019年Unity活動とsomething

今年も振り返ります。KPTです。PDCAです。

振り返りは1年後とかに見ると色々思い出せてよいのです。  

 

2019年は、新しい職場1年目ということで仕事にウェイト多めでした。
Unityあんまやれてないかもなので新職で覚えたスキルも振り返らせていただきます。

 1月

# unity1week Meetup in Tokyo2019

meetup.unity3d.jp

おにぎり食べながらお酒飲んでみんなのゲームやってた記憶しか残ってない。
全員ゲームエンジニアで話が合うので超楽しいです。
私の作品を好きと言ってくれる人もいて生きててよかったです。


来年も行きます。
みんなも来るといいよ。

meetup.unity3d.jp

 

# 転職

去年の10月に会社が突然倒産していました。そのうちエントリー書きたい

ありがたいことに、倒産したけどすぐに紹介があり、次は間を置かずに決めることができました。

面接で、職歴とは別にunity1week等の作品を短い動画にまとめてポートフォリオしてたら良い評価だったので、学生さんは色々たくさん作っておくといいかも知らんね。

 

ということでUnity案件も色々あったのですが、

色々考えた結果、外資系?なAI会社に決めました。
理由は新しいものに触れることができそう、エンジニアのレベルが高い、開発環境もよいので選びました。あとお金。

 

2月

# 仕事で新スキル

前職、基本はWindows一本だったので覚えることたくさん楽しい。

超久しぶりに触ったLinuxiOS。時代は変わってた。

前職はメンバの学習コストを考えてSVN止まりだった。みんなでGit使えて嬉しいしGitHub Flow勉強できた。

短時間で終わるデイリースクラムや、Goodを含めたKPTを行ったサイクルがとてもやりやすい。デイリーで困ったことを言えるよい環境。

 アジャイルソフトウェア開発 - Wikipedia

 

3月

# unity1week つながる

 作ってみたかったやつ。Unityの物理演算は再現性がないので苦戦した。


# Android(Java + JNI)

仕事。殆どやってなかったJavaC#みたいなもんやろと思ってたら全然違った。
加えて初AndroidStudioだったが、超入門書を3時間で終わらせてなんとなく雰囲気わかった。Android開発未経験ならおすすめ。

 

その後は、iOSとかUnityやってたのもありはそんなに困ってない。
JNIも触ったけどC言語なので大丈夫。 

Java理解力上げるためにEffective読んでおきたい(読みかけ) 

 

4月

# AI-Expo

iOSでの展示デモ作ったり説明したりした。
お仕事でビッグサイト行ける日が来るとは。

 

5月

# Unity+ネイティブライブラリ

お仕事。7月にイベント展示あるらしいので、
弊社エンジンをUnityで動かす試みを始めた。ネイティブ呼び出し完全に理解した。

MaciOSまだやってないけど)


6月

# GitLab CI

仕事。Jenkins経験あるので、GitLabのCI構築任された。

GitLabは、GitHubと違ってCIも管理できるのいいね。
GitLab RunnerをインストールしたPCにジョブを任せられるので複数のOS一斉に対応できます。Linux/Android/Windows/iOS対応してる。

 継続的インテグレーション - Wikipedia

# Docker

Docker - Wikipedia

PC上で別のOS環境構築できるの。VMと違って早い。

dockerfileにインストールする物とかを記載できるので別PCでも環境を再現できるので超便利。
前から使ってたけどCIでも活躍。

 


7月

3つのイベントこなせたので満足な月。

今年のやる気のピーク。

 

# unity1week あつめる

ピクセルパーフェクト大好きで、作れたので満足。

 もこもこ


# 仕事xUnity

弊社のライブラリを使ったゲームを京大で発表したよ。
子供向けイベント特化で色々考えてたので大成功したと思う。
ノーベル賞の偉い先生もプレイした。

 

# 資格・G検定

DeepLearning協会 G検定合格。

www.jdla.org

AIな会社なので。幅広く知識増えたので受けてよかった。

 

8月

# Unityアドカレ・Gaia

アドカレブログ書いたよ。積んでたGaia使ってみた。
そのあとGaia Pro来てショック。

alpacatech.hateblo.jp

 

 

9月

# AndroidOS、Yocto、組み込み屋さん的なSomething

仕事。ここ前後から、数ヵ月やってる。
カスタマイズされたAndroidOSをビルドしたり、YoctoLinux 組み込んだり、なんやかんや。ドキュメントが英語アンド不親切で辛かった。

言語はC++/Java/Python


10月

# unity1week 探す

好きなピクセルパーフェクトとメトロイドヴァニアとアルパカ出来た。満足すぎる。

 仕事・育児忙しいのに1週間で出来るかたわけ案件。

11月

# (自分の中で)Python ブーム

色んなOS行き来するのでPythonを本格的に使い始める。
バージョン色々ありすぎてあれだけど便利。

# 電子工作

色々教わった。USB-IO2でLED光らせたり。
Pythonブーム来たのでPythonで実装。


12月

# 社内LT2回目

Unity+Androidネイティブ弊社ライブラリちょっと動かしたりなんやかんや。
LT楽しい。アマギフもらった。

 

# Unityアドカレ・VR

alpacatech.hateblo.jp

OculusQuestぽちったので、刀とVRで書いた。
アマギフもらった。Unityさんありがとう。

 

 

ふりかえり

色々覚えたし意外とUnity出来ました。

 

2018年Unity活動 の目標は、

  • UnityやAIの資格とりたい  ... 〇 G検定とれた。
  • 今度こそアプリ ... × 残り一日だけど厳しいね。
  • 完成癖をつけたい ... △unity1weekは完成した。他あんまり作ってない。
  • もっとアウトプット ... △あんまりできてません。
  • 来年は新しい職場の勉強とかでUnity率下がるかも ... 〇 意外とUnityできてた。

良いのでは。 

 

2020年目標

・Unityは、長編作れる気しないので短期間でとりあえずリリースしていきたい。過去の資産も出します。

・仕事。今年は手広くやったので、後はそれぞれの質をあげていきたい。

Linux系の資格やエンジニア歴長いので応用情報ぐらいは取っておきたい。

英語もいるよねー。

・何か副収入を得る仕組み。やりたい。

 

 


来年もUnityするのでよろしくお願いします。

alpacatech すし @mamesiva64

 

  

過去の振り返り

alpacatech.hateblo.jp

alpacatech.hateblo.jp

 

 

【Unity】斬属性アセット特集【日本刀】

セールで日本刀を購入してテンションが上がったので、日本刀でいろいろやってみたいと思います。 

 

※この記事は、Unity公式が開催している「Unityアセット冬のアドベントカレンダー 2019 Winter」の25日目の記事です。

 

 最終的にはこのような感じです。

 

 

開発環境

Unity 2019.2.16f

Windows10 Pro

OculusRift CV1

 

武器を選ぶ 

今回の日本刀はこちらの国宝級含む10本セット。

日本のパブリッシャー様です。

クオリティがとても高く、普段見えない所も作りこまれています。

↓ポストエフェクトなしでこのクオリティ

f:id:alpacatech:20191223040828p:plain

screenshot

太刀:
三日月宗近(国宝)[tachi01]
・江雪左文字(国宝)[tachi02]
獅子王[tachi00]

打刀/脇差:
・歌仙兼定[katana00]
・石田正宗[katana01]
・勢州桑名住村正[katana02]
・骨喰藤四郎[katana03]

短刀:
・謙信景光(国宝)[tantou00]
・物吉貞宗[tantou01]

大太刀:
・太郎太刀[ootachi00]

 

 

VR化する

綺麗な刀をVRで振り回してみました

VR内でも美しい……

 

使用アセット(VRコントローラ/ 背景) 

  

Unityは、設定をするだけで実行時にVR空間で動作します。

f:id:alpacatech:20191223224210p:plain

Project SettingsのXR Setingsを設定、今回はOculusなのでOculus追加。 

 

コントローラを使うにはAsset使ったほうが簡単です。 f:id:alpacatech:20191223223943p:plain

アセットは、各コントローラのモデルが利用できます。 

コントローラは、以下を参考にさせて頂きました。

framesynthesis.jp

OVRCameraRigを配置して、RightControllerAnchorの子に刀を設置するだけ

f:id:alpacatech:20191225000518p:plain



 

 

 

エフェクト(軌跡)をつける

刀といえば軌跡エフェクト。

 使用アセット

 

www.youtube.com

X-WeaponTrail を利用しました。

f:id:alpacatech:20191225000637p:plain

X-WeaponTrailを配置し、

EndPoint ... 剣先(青球)
StartPoint ... 剣元(赤球)

を指定するだけ。 

f:id:alpacatech:20191223215557p:plain

 X-WeaponTrailのパラメータで、更新フレーム数や色、シェーダーが変更できます。

 

エフェクト(パーティクル)も試してみる

軌跡以外のパーティクルなエフェクトもかっこいいです。

VRでエフェクトを置くとどうなるのか試してみました。 

 今の所ポストエフェクトがかかっていないのでブルームが足りずやや地味ですが、VRでは迫力あります。

 

使用アセット 

  

斬撃系に特化したパーティクルエフェクト。

www.youtube.com

今回はとりあえずボタンを押すとprefab配置するようにしただけです。

 移動ベクトルの変動を見て自動的に出したい。

 

果物を斬る(メッシュカッター)

刀なので物を斬りたい。リンゴを斬ってみました。

 使用アセット

安価なメッシュカッターアセットです。

スクリプトが少し必要です。

 

 

使い方

注意:Unity 2018.3以降だと古いPostEffectがありエラーが出ました。

Assets\SimpleMeshCutter\Demo\PostProcessing\Editor\PropertyDrawers\MinDrawer.cs(6,34): error CS0104: 'MinAttribute' is an ambiguous reference between 'UnityEngine.PostProcessing.MinAttribute' and 'UnityEngine.MinAttribute'

回避策はありますが、切断するのにPostEffectは必要ないので削除して問題ありません。

f:id:alpacatech:20191225001626p:plain

手順

1. 切断する側にCutterをセット

f:id:alpacatech:20191225003241p:plain

2. 切断される側にCutterTargetをセット。切断面のマテリアルを設定できます。

f:id:alpacatech:20191225003254p:plain

3. CutterのCutメソッドを呼び出すと、Cutterの向きでCutterTargetを切断できます。

4. 切断後は、Cutter.OnCutted に追加されたメソッドが呼び出されます。

_cutter.OnCutted += OnCuttedHandler;

 

ちょっとわかりにくい?

Assets/SimpleMeshCutter/Demo/Scenes/MeshCutSample と CutterTest.cs  が参考になります。

 

VRの刀では、 

  • 刀にCutterとCollider、果物にCutterTargetとCollisionとRigidbodyを追加。
  • OnTriggerEnterで、果物に対してCutメソッドを呼び出し
  • 切断後コールバック関数(OnCuttedHandler)では、それぞれのオブジェクトにRigidbodyをAddComponentしています。(切断後のメッシュオブジェクトは新規で作られるのでRigidbodyが無い)

という実装方法を行いました。

切断後のオブジェクトにCutterTargetをAddComponentすると無限に切断できます。

 

 

以上です。

 

ゲームを作ろうと思っていたのですが時間が捻出できませんでした。

そのうち作りたいです。(OculusQuestが届かない><) 

 

 

おまけ:アセットまとめ

武器

クオリティ高い刀をあつめました。脇差単体なら無料

 

 

背景

スケールがちょっと小さいような気がするので、畳の幅を90cm前後として考て1.8倍ぐらいに拡大して使いました。

  

軌跡

 

  背景ゆがみエフェクトもできます。

www.youtube.com

3D斬撃エフェクト

 

 

2Dゲーム向きの斬撃・打撃エフェクト

今回利用していませんが、2D向けの斬りや打撃のエフェクトです。スプライトアニメよりも派手になります。

 

メッシュカッター

 

 スクリプトが必要ですがローコストでメッシュ切断導入できました。

 

  果物

 

 VRならローポリが優しいですね。

 

 

何か斬る関連のアセットがあったら追加していきます。 

ありがとうございました。

 

 

【Unity】 floatを 00"00.00 な文字列に変換する 【C#】

RTAとかで表示するタイマーなテキストです。

※float は、1.0 で一秒とします。

 

Dateとかで出来そうだけどよくわからなかったのでキャストや割り算を駆使して実装

public static string getTimeString(float time)
{
    int sec = (int)time;
    int mm = sec / 60;
    int ss = sec % 60;
    int ms = (int)(time * 100.0f) % 100;
    return mm.ToString("D2") + "'" + ss.ToString("D2") + "." + ms.ToString("D2");
}

 

サンプル 

 

専用関数とかあったら教えてください

 

2021/10/19 タイマーの表現方法を変更

【Unity】Unity1Weekに参加しました【アルパカ探検隊】

f:id:alpacatech:20170905012756p:plain

今回も参加しました。

1週間でゲーム作るジャムです。

お題は「さがす」です。

 

作ったもの

メトロイドっぽいアクションです。1weekでは無謀でした。

 いろいろあって2week近くになってしまいました。猛省。

 

今回、得た知見や言い訳書いていきます。

 

時間かかりすぎた言い訳

  • メトロイドヴァニアなんて、マップ塗って敵配置で終わるじゃんと思ってました。舐めてました。ごめんなさい。
  • マップ作ったのにUnity落ちて全部消えた。
  • 1歳児がPCの電源ボタンを押せるようになった。成長したな。保存してなかったけど。

 

アクションゲームについて

  • そういや2Dアクション作ってなかった。初挑戦で風呂敷広げすぎた。
  • アクションゲームのキャラクタは摩擦係数0。壁に引っかからなくなる。
  • 左右振り向くようなゲームは、デフォルトは右向きが都合がよい。ベクトルとかの関係。
  • スプライトが振り向くのはFlipよりもrotation(0,180,0)が都合がよい。射出する弾のvelocityも自分のrotationかけ合わせればいいし。
  • カメラは、進行方向を見るなら自分が中心じゃないよ。中心用オブジェクトか調整あるといいね。
  • velocity.y>0の時は、地上判定しない。

 

マップ作り

  • TileMapのRuleのやつ便利すぎ。
  • 意味のない空白はやめる。

 

コンセプトについて

  • もっと重装備アルパカにしたかった。
  • 強化→行けるところ増やすをベースにしていたらボリュームすごい必要。これを無くすと強化のありがたみとバランス崩壊。
  • 同じ所行かせすぎた。
  • ラスボス適当。倒さなくていいよ。
  • 難易度抑えたつもりだけど高かったかも。

 

悩んだバグ

  • ランキングがtimeScale=0.0でロード終わらないとかどういうこと。(バグ直したい)

 

治らなかったバグ

  • WebGLだけ効果音が一部出ない。全部ではない。条件が不明。

 

覚えたこと

  • Tilemap
  • 2Dアクション
  • Chinemacine少し理解

 

覚えたいこと

  • 月下の夜想曲とかのカメラ制御(表示しないエリア、切り替え) エフェクト管理クラス完成させたい。

 

 反省

  • 次は無茶しない。

 

おまけ

  • 全体マップ

f:id:alpacatech:20191026061339p:plain

 

 

 

 

【Linux】 Ubuntu16.04でもUnityインストールできた 【Unity Hub】

 

簡単にインストールできたのでメモ。

※2019/08/20 時点の情報です。

環境

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

 

UnityHubをインストールし実行する

UnityHubは、Unityをインストールするツールです。複数バージョン管理出来ます。

UnityHubをダウンロード

Unity Hub v2.0.0 Release

https://forum.unity.com/threads/unity-hub-v2-0-0-release.677485/

で、Hub 2.0.0 for Linux  を選択

※2020/04/07 更新

 

公式ページからダウンロードできるようになっていました。

https://unity3d.com/jp/get-unity/download

Unity Hub をダウンロード をクリック。

UnityHub.AppImageがダウンロードされます。

 

ダウンロードしたUnityHubSetup.AppImageに実行権限をつけて実行

ダウンロードしたファイルのプロパティで実行権限をつける。

f:id:alpacatech:20190820112517p:plain

ダブルクリックで実行。

 ※ サイトに2.0.0 とありましたが、2.1.0(2019/08/20時点最新)がインストールされました。

 

UnityHubは起動すると、上のメニューに常駐します。

f:id:alpacatech:20190911165749p:plain


 

 

Unityをインストールする

現時点で、安定(長期サポート対応)したバージョンが良いならLTS(LongTermSupport)な2018.4.X を選択、

最新が使いたいなら2019

 

 

 

おまけ

Ubuntuは、Ubuntuソフトウェア(標準で付いているアプリストアみたいなもの)経由で

- Blender(3Dモデリングソフト)

- GIMP(画像処理ソフト。PhotoShopみたいな事が出来る)

- ASEPRITE(ドット絵ツール。バージョンは古いが保存も出来る。最新版は有料ソフト)

などゲーム制作に使えるツールが無料で手にはいります。

 

f:id:alpacatech:20190820113556p:plain

 

 

【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]