Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【勉強会レポ】: yokohama.unity mini #7

勉強会のレポート(メモ)です。
参加したのはこちら「yokohama.unity mini #7」
会場はClusterさんです。

meetup.unity3d.jp

ハッシュタグ : #yokohamaunity

 

動画アーカイブ


yokohama.unity mini #7 新年はユルク横浜辺りから。

 

一度変な状態で記事が公開されました。申し訳ありません。

 

yokohama.unityとは

イベントページから引用

はじめての方はこちらをご覧ください。

yokohama.unity参加者・登壇者ガイドライン(過去の様子なども見れますー。)

  • 横浜を中心活動するUnityエンジニア、学生向けの勉強会です。
  • LT登壇を積極的に募集します!「これ大丈夫かな...」と思っても大丈夫!
  • Unityに興味がある人であれば、どなたでもご気軽にご参加いただけます!
  • これからUnityを触りたい人、Unityに触り始めた人、大歓迎!
  • 横浜市外にお住まいの方も参加可能です(開催中は横浜の方角を向いて参加ください

こんな人におすすめ!

  • Unityを使っている仲間を増やしたい
  • 趣味 or 業務に関わらず技術や知見を共有したい
  • とにもかくにもUnityデビューしたい!!
  • 自分が作ったものをいろんな人に見てもらいたい

 

 

#1 自動生成を作りたかった!

ダンジョンの自動生成にチャレンジしたお話。

 

区画を分割しつづけることで生成するアルゴリズムを使いました。
1.大きな四角い区画を用意しランダムで分割
2.区画に部屋を作成
3.部屋同士を通路でつなぐ

こちらを参考にしました。

qiita.com

改善したい点として、部屋同士が一直線にしかつながっていないので一つの区画が複数の区画につながるようにしたい。

 

 

 

#2 初めてUniRx使ってみた

もともと勉強会やTwitterでUniRxを聞いたことはあったが、仕事のプロジェクトで使い始めました。

 

参考資料

 

使用例

武器で斬りつける時、勢いよく切りつけないとダメージにならないようにしたい場合、
武器の位置を比較して移動量を取得し武器の勢いを算出して攻撃力としています。

 

Riderを使えばオペレータ間で扱うメッセージを強調表示してくれるためとても便利です。

 

 

 

 

#3 「スキャンデータを使ったリッチなVFXを軽率に作ろう」

 特定の形状の上をパーティクルが這うようなVFXを作るときのお話。

 

Unite Tokyo 2019の高橋 啓治郎のセッションから影響を受けています。

learning.unity3d.jp

サンプルプロジェクトはこちら

github.com

実現したいことは、形状にそって動かすため形状の法線ベクトルが必要になる。
かつ形状以外の物体から遠ざかる方向のベクトルが必要。

使うツールと手順

1.自分のスキャンデータをAzure Kinectで撮る

KinectFusionでスキャン

medium.com

2.HoudiniでSDFを作成

SDFには点からオブジェクトへの距離と遠ざかる方向のベクトルの2つのデータがまとまっています。
VFX Toolboxを使用しています

github.com

3.VFX Graphに取り込んで演出を作る

まとめ

VFX GraphでSDFを使うとリッチな表現ができる

 

 

 

#4 LEGOMicroGameで弾幕を作ってみたお話 

UnityHubで登場したLEGOMicroGameをさわってみた時のお話。何かのきっかけになってくれれば。


最近の作品は「回転」と「弾幕」をテーマに作成しています。
LEGO MicroGameを使ったゲームコンテスト「BUILD YOUR OWN GAME」とUnity1Weekを合わせて作った作品の紹介をします。

LEGO IDEAS - Build your own game!

note.com

 

動画が多いのでアーカイブをご覧ください。

www.youtube.com

 

 

 

 

おわり

最後はいつもの記念撮影で終わりです。

f:id:Raspberly:20210305202617p:plain

 

 

 

他の感想ブログとかまとめとか

togetter.com

note.com

 

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【アセット紹介】Roslyn C# - Runtime Compiler でScriptをランタイム実行する【Unity】

今回はアセットの紹介をしていきます。
紹介するのは「Roslyn C# - Runtime Compiler」。
ランタイムでC# Scriptをコンパイルし実行するアセットです。

 

 

お得なバンドル情報!

現在アセットストアでは、旧正月を記念したメガバンドルが発売中です!終了しました
厳選されたツール系アセットとアート系アセットが超お得に手に入るチャンス
今回紹介するRoslyn C# - Runtime Compilerも対象アセットです。
詳しくは下のバナーリンクからどうぞ。

f:id:Raspberly:20210209005108p:plain

 

どんなアセット?

ランタイムでC# Scriptをコンパイルし実行するアセットです。

#では、Roslynコンパイラを使用してアセンブリとC#スクリプトをランタイムで読み込むことができるため、プロジェクトにモッディングサポートやゲーム内プログラミングを簡単に追加できます。さらに、Roslyn C#には、コードのセキュリティ検証も含まれています。これにより、ロードされたコードが準拠しなければならないセキュリティ制限の数を指定できます。これには、不正な名前空間やタイプが含まれます。これにより、不明なソースからサードパーティのコードをロードする方がはるかに安全になります。

方向の意思決定を実行するコードを書くことによって迷路からマウスをナビゲートすることを目的とする小さなプログラミングベースのゲームが含まれています。

 

ドキュメントはこちら
コンピュータサイエンスの知識がある程度ないと厳しいのかも

 

 

開発環境

Unity 2020.1.17f1

Roslyn C# - Runtime Compiler ver1.4.2

 

 

インポートの確認

アセットインポート完了時はこんな感じです。
ドキュメントとしてUserGuid.PDFとScriptingReferenceがついています。

f:id:Raspberly:20210227033923p:plain

 

 

 

サンプルシーンの確認

Assets/RoslynCSharp/Examplesにサンプルシーンがあります。
ネズミさんの挙動をプログラミングし、ゴールまで導いてあげるゲームです。

f:id:Raspberly:20210227040826p:plain

左上に4つボタンがあり、プログラムの実行、停止、再実行、編集が行えます。

編集ボタンを押すとInputFieldが出てくるのでここにプログラムを入力します。
Example Scriptボタンを押すと実行可能な完成済みのプログラムを読み込みます。

 

 

 

クイックスタート

ドキュメントに従ってクイックスタートをやってみます。

パッケージのインポート

unitypackageをインポートします。
Unity 2018.1.0f2以降ならそのままインポートして問題ありません。
他バージョンの場合、PlayerSettingsのScriptingRuntimeVersion「.Net4.xEquivalent」になっていることを確認してください。

 

Exampleスクリプトの作成

以下のScriptを作成し、シーン内の適当なGameObjectにアタッチします。

using UnityEngine;
using RoslynCSharp;

public class Example : MonoBehaviour
{
        private ScriptDomain m_domain = null;

        //ロードするC#ソースコード
        private string m_source =
        "using UnityEngine;" +
        "class TestCode : MonoBehaviour" +
        "{" +
        " void SayHello()" +
        " {" +
        " Debug.Log(\"Hello World\");" +
        " }" +
        "}";

        void Start()
        {
               //ドメインの作成
                m_domain = ScriptDomain.CreateDomain("MyDomain", true);
               ////ソースコードをコンパイルしてロードします
                ScriptType type = m_domain.CompileAndLoadMainSource(m_source);

                //Testは継承するためgameObjectを渡す必要がある
                ScriptProxy proxy = type.CreateInstance(gameObject);

                proxy.Call("SayHello");
        }
}

 

「CompileAndLoadMainSource」はマネージアセンブリを生成するRoslynコンパイラを呼び出します。
その主なTypeAssembleが自動的に選択されScriptTypeとして返されます。
他のAPIの概要についてはスクリプトリファレンスを参照してください。

コンパイルと実行

Start時にTestCodeを実行し、SayHelloメソッドを呼び出します。

f:id:Raspberly:20210227041133p:plain
"Hello World"と表示され、ランタイムでC#Scriptが実行されているのが確認できました。

 

 

 

実際に試してみる

せっかくなので、InputFIeldを用意しプログラミングを書いて実行できる簡単なゲームもどきを作ってみます。

Sceneの作成

PlaneとCubeを置いておきます。

f:id:Raspberly:20210227031817p:plain

UIを配置します。
C#Scriptを記述するためのInputFIeldとScritp実行用のButtonを配置します。

f:id:Raspberly:20210227031847p:plain

Playerの作成

事前にPlayerとなるGameObjectを作成します。
今回はSD UnityChanを使用します。ColliderとAnimatorをいい感じに設定しておきます。

f:id:Raspberly:20210227032155p:plain

 

Scriptの作成

以下の「ScriptTester」Scriptを作成し適当なGameObjectにアタッチします。

using UnityEngine;
using RoslynCSharp;
using TMPro;

public class ScriptTester : MonoBehaviour
{
    public TextAsset m_templateSourceText;
    public TMP_InputField m_textField;
    private string m_source;
    private ScriptDomain m_domain = null;
    private ScriptType m_type;
    private ScriptProxy m_proxy;

    void Start()
    {
        m_textField.text = m_templateSourceText.text;
        m_domain = ScriptDomain.CreateDomain("MyDomain", true);
    }

    public void SourceExecute()
    {
        m_source = m_textField.text;
        m_type = m_domain.CompileAndLoadMainSource(m_source);
        m_proxy = m_type.CreateInstance(gameObject);
        m_proxy.Call("Execute");
    }
}

 

次に、テキストファイルを作成し以下のCodeTemplateを書いておきます。
ファイル名はScriptTemplateとかにしておきます。

using UnityEngine;

class CodeTemplate : MonoBehaviour
{
	void Execute()
	{
	}

}

 

コンポーネントの設定

先ほど作成したScriptTesterに他のオブジェクトを紐づけていきます。
TemplateSourceTextに、同じく作成したテキストファイルを紐づけます。
TextFieldにInputFieldを紐づけます。

f:id:Raspberly:20210227032404p:plain

 

ButtonのOnClickにはScriptTesterのSourceExecute関数を実行するようにします。

f:id:Raspberly:20210227032749p:plain

これで準備は完了です。

 

コードを書いて実行してみる

InputFieldにはテキストファイルに記述したテンプレートが最初から挿入されています。
ここにコードを書いてExecuteボタンを押すと、プログラム内のExecute関数が実行されます。

f:id:Raspberly:20210227033000p:plain

 

このようにResourcesのプレハブをInstantiateして、コンポーネントをアタッチするようなこともできます。

f:id:Raspberly:20210227040251g:plain

(はてなブログの容量制限のため画質を落としています)

 

 

「あなたもUnityはじめてみませんか?」のように
ゲーム内でプログラムを実行させるような作品が作れちゃうかもしれませんね!

www.youtube.com

 

 

 

まとめ

・Roslyn C# - Runtime Compilerを使うと、ランタイムでC#Scriptを実行できる

ScriptReferenceを見るといろいろなことができそうな予感

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【勉強会レポ】: Roppongi.unity #8

勉強会のレポート(メモ)です。
参加したのはこちら「Roppongi.unity #8」
会場はClusterです。

roppongiunity.connpass.com

ハッシュタグ#roppongiunity

 

動画アーカイブはこちら 


Roppongi.unity #8 in YouTube Live

 

 

 

Roppongi.unityとは

イベントページから引用

概要

六本木発のUnity開発者向け勉強会です。(ref. Gotanda.unity)

Unityに興味がある人であれば、どなたでもご気軽にご参加いただけます!

発表者一覧

タイトル 発表者
unitypackageのリリース作業をCIで自動化した話 @sansuke05_vr
MRのカーレース作成にチャレンジした @sbubu12
フィットネスバイクでVR空間を乗り回す話 @zawazawatw
AR開発高速化!「CFA」作りました! @okprogramming
休憩 -
MLAPIでマルチゲームを作ってみた @xrdnk
オンラインでもVRの体験をしてもらいたい!!Unityで360度動画を録画してYoutubeで上げるまで @nanaki_pg
初心者向け自作Humanoidモーションの作り方 @yunoda_3DCG
ゲームで上がるフィットネスモチベーション @ichgv

 

 

 

#1 unitypackageのリリース作業をCIで自動化した話

 

趣味でアバターのクリエイター向けUnityエディタ拡張作っています

sansuke05.booth.pm

こういうエディタ拡張は定期的にアップデートをかけますがunitypackageの更新が結構しんどい。
なのでCIで自動化しました。その時のお話。

CIの概要

GitでTAGをつけGithubにPush、PushされるとGithub Actionsが走る構成になっています。
Github Actionsでは、Unityのアクティベート後unitypackageを作成しリリースします。

Github Actions

Github上で使えるビルドやリリースを自動化できるCI。Unity Actionsが使える。

Unity Actions

UnityのテストやビルドをCIで実行できるパッケージ

CIの構築手順

1.Unityのアクティベートファイルを作成

 Unity - Request Activation Fileを使ってアクティベートファイルを作成

github.com

2.アクティベートファイルを使ってライセンスを取得

Unity - Activationにアクセスし、ライセンスファイルを取得

3.ライセンスをリポジトリのシークレットに登録

 リポジトリのシークレット(環境変数みたいなもの)に登録

4.ワークフローを実際に書いてCIを回していく

 unitypackageをリリースするワークフローを書く。

github.com

まとめ

個人開発でもどんどんリリース自動化していきましょう

 

ClusterではUnityエンジニア募集しているのでお声がけください

www.wantedly.com

 

 

 

#2 MRのカーレース作成にチャレンジした

Mixed Realityデバイス HoloLens2で作成したゲームの紹介と、
技術的な知見としてホログラムにタッチした時にメソッドを発動する方法を紹介します。

作成したゲーム

www.youtube.com

ホログラムにTouchしたらメソッドを発動する方法

MRTKを使用します。
ColliderInteractable.csNearInteractionTachable.csを使用します。

NearInteractionTachableはホログラムをさわったり掴んだりする設定をする時に必要です。
Interactableはどういう挙動をするかをカスタマイズできる。

 

 

MRTKはOculusQuestでも使えるので遊んでみてください。

 

 

 

#3 フィットネスバイクでVR空間を乗り回す話

今とっても運動不足。なので家でも運動できるようフィットネスバイクを買いました。
それについてきたオーディオプラグっぽい端子にESP32という基盤をくっつけてWifiとかBluetoochで情報を飛ばせばUnityやVRでおもしろいことができるんじゃねという緩い発想で始めたときのお話。

 

ESP32をフィットネスバイクに取り付け

Arduinoの制御ライブラリはArduinoOSCを使い、ペダルの回転にかかった時間をUnityに送信。
Unity側はuOSCというライブラリを使用しました。

tips.hecomi.com

 

VRChatに持ち込んで空中サイクリングしてみよう

SpaceDragVMTTrackingOverrideを組み合わせて実装しました

SpaceDrag:コントローラーで空間を掴んで移動できる機能

VMT:SteamVRに仮想トラッカーを追加登録できる

TrackingOverride:HMDやコントローラの既存のトラッカーの位置を上書きする機能

セルフフィードバック

ペダルをこぐ行為と映像が一致しているため酔わなかった。
簡単に高所に行けてしまうため3D空間が安っぽくなってしまった。

→頑張ってこげばこぐほど上にいくようにした

 

Steam VRでは動作したが、VRChatだと一瞬しか動かなかった。

 

 

 

 

#4 AR開発高速化!「CFA」作りました!

マーカーレス型ビジョンベースARの問題点、CFAとCFA実装で得た知見についてのお話。

マーカーレス型ビジョンベースARの問題点

・見た目の確認修正が何度もできない
・絵コンテではイメージしずらい
・モック制作に時間をかけられない

そこでCFAをつくりました

CFAって何

Contents Formatter for AR
マーカーレス型ビジョンベースARの問題点を解決し、ARコンテンツの開発を加速させる内製ツールです。

配置ツールで空間アンカーを元に配置データを作成し、作成ツールで配置データを受け取りARコンテンツを配置し、ビューワーアプリで動作確認を行います。

CFAの実装で得た知見と工夫

Azure Spatial Anchorについて

SpatialAnchorManagerクラスが空間アンカーに関する処理の中心だったため、CFA用に使いやすくしました。
UniRxを利用し、各機能にアンカーの状態を通知するようにしました。

Boltでノードを自作

非エンジニアでも作成に参加でき、処理をパーツとして使えるため制作が高速化できる

HoloLens2対応

CFAは3つのプラットフォームに対応しています。
対応させるためにインターフェースを継承したクラスとして実装し、単機能をモジュール化。

 

CFAについてはこちら

cfa.upft.jp

 

 

 

#5 MLAPIでマルチゲームを作ってみた

MLAPIの説明

Unityが買収した(もともとOSS)GameObject向けネットワークソリューション

blogs.unity3d.com

 

問題点

・ドキュメントが充実してない
・サンプルがほぼ皆無

現在改修中

MLAPIの機能

MLAPIの動作検証は動画をご覧ください

 

おわりに

・新しいドキュメントがでました

mp-docs.dlt.it.unity3d.com

・現時点でMLAPIをふれるのはつらい
・素直にドキュメントやサンプルが整ってから触れよう
・しばらくマルチゲームを作る時はPhotonかMirrorに触れてマルチゲームの仕組みに慣れよう

参考資料

www.youtube.com

www.youtube.com

 

 

 

 

#6 オンラインでもVRの体験をしてもらいたい!!Unityで360度動画を録画してYoutubeで上げるまで

オンラインイベントが多くなったため展示する機会する機会がなくなってしまった。
そこでスマホでもHMDでも見れるYoutubeに360度動画をアップロードすることにしました。

録画に便利なアセット

・UnityRecoder(UPMからインストール)

VR Panorama 360 PRO Renderer (有料アセット)

アップロード

アップロードする前にメタデータを仕込みます

github.com

動画はこちら

www.youtube.com

備考

 エンコードした動画した動画はDeoVRを使いOculus Questで確認しました

www.oculus.com

軽量化はこちらのアセットを使用しました

 

 

 

 

#7 初心者向け自作Humanoidモーションの作り方

Unityで使うアニメーションをBlenderで作成するお話。

Rigify

Blender公式アドオンRigifyを使っています。

3dcg-school.pro

ボタン1つで人体のリグコントローラを作成できる(IKとFKを一発で作れる)
Unityでも使える少しボーンを入れ替える必要がある

 

もう少し詳しい記事を公開予定です。

まとめ

・アニメの工数はめちゃくちゃ重たい
アニメーションを自作する前に、必要なのか?ストアで見つからないのか?代用できないのか考えよう。
・Unityだけでのモーション制作はおすすめしない
モデリングできなくてもアニメは作れる
Blender楽しいぜ

 

 

 

#8 ゲームで上がるフィットネスモチベーション

ゲームとフィットネスを掛け合わせた作品の紹介と、制作方法とコツについてのお話。

作品紹介

しゃくとりっぷ

ストレッチチューブをゲームに取り入れる

ぽよころあどべんちゃー

バランスボールで操作

制作方法

ストレッチチューブの伸び縮みはWebカメラを用いた画像処理(Open CV)で取得
バランスボールの傾きは3軸加速度センサを取り付けることで取得

制作のコツ

ノイズ、ブレが絶対発生する
しきい値を設定して連続的な値をそのまま使用しないようにする。
どれくらいの値から変化するかを設定することで見栄えがよくなる。

まとめ

Webカメラやセンサを使えばコントローラの可能性が広がる
ゲームと何か掛け合わせると面白いものがどんどんできる

 

 

 

協賛企業紹介

Cluster

バーチャルプラットフォームClusterを作っています。
詳しくはSpeakerDeckの資料をご覧ください。

クラスター会社紹介資料 / We are hiring - Speaker Deck

 

特徴として体験入社というものをしています。
評価ではなく、一緒に働けるかをお互いに判断するためにしています。

ご応募お待ちしています。

www.wantedly.com

 

 

ハシラス

テクノロジーと五感をだますテクニックを駆使することで高臨場感を作ることをミッションとしています。
(実は経営陣の創業メンバーが全員元マジシャンです)

 

感染症流行後は、マルチプレーフリーローム技術をビジネス活用しています。
商談・プレゼン用ですがめちゃめちゃ面白いので、状況がマシになったら何か面白いものを作ろうと狙っています。

 

現在ソフトウェアエンジニアを募集中です

hashilus.co.jp

 

会社紹介を行うオープンデイをやっています。
情勢が情勢ですので今回はクローズドなオープンデイをします。
お気軽にDMやメンションをください。お待ちしています。 

 

 

 

終わり

次回開催について

・2か月に1回開催を予定しています。
しばらくはオンライン開催の予定です。一か月前をめどに告知予定です。

・登壇側での参加もお待ちしています。
初心者も大歓迎

その他勉強会紹介

meetup.unity3d.jp

yokohamaunity.connpass.com

vrm.connpass.com

 

 

 

 

感想

今回も参加しましたRonnpongi.unity。

LT 7番目を担当したyunodaさんは、過去にUnity内でモーションを作成できるアセットUMotion Proの紹介LTをされていました。
当時はUnity内でのモーション作成を推していましたがいったい何があったんだ・・・

raspberly.hateblo.jp私はVery Animationを使ってUnity内でモーション作成をしたことがありますが、
多機能なアセットは使いこなすのが本当に難しいため、Blenderで作るのも手かもしれません。


 

ハシラスさんの紹介でもありましたハシラスオープンデイですが、過去に参加したことがあります。
いろいろなコンテンツを体験できるのでオススメです。
当時はハードウェアエンジニアのみ募集していましたが、現在はソフトウェアエンジニアを募集中!

raspberly.hateblo.jp

 

 

 

過去のRoppongi.unityのレポはこちら

raspberly.hateblo.jp

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【勉強会レポ】: CA.unity #1

勉強会のレポート(メモ)です。
参加したのはこちら「CA.unity #1」

meetup.unity3d.jpハッシュタグ : #CA_Unity

 

後日動画アーカイブやログミーの書き起こしが公開されるようです。

www.youtube.comこのレポでは大まかな内容のみメモしているので、詳しい内容はそちらをどうぞ。
また一部のLTはUnityLearningMaterialsに公開されます。公開されました。

CA.Unity | 検索結果: | Unity Learning Materials

 

3月15日追記 イベントレポートも公開されました

developers.cyberagent.co.jp

 

CA.unityとは

以下イベントページより引用

● CA.unityとは
CA.unityはサイバーエージェントが運営するUnityをテーマにした勉強会です。

サイバーエージェントのサービス開発者と社外の開発者を交えて、Unityに関する知見を共有する場となります。

● イベント概要
Unityエンジニア、学生向けのオンラインLT勉強会です。

LT発表者はZoomで発表を行い、その様子がYoutubeで限定配信されます。

初回である今回の企業枠はユニティ・テクノロジーズ・ジャパン様とサイバーエージェントが登壇いたします。

一般枠のLT発表者も積極的に募集しております。お気軽にご参加ください!

 

 

サイバーエージェント会社説明

サイバーエージェントのゲーム事業はCygamesSGEの2つあります。
今回、このCA.unityを運営しているのはSGEになります。
12の子会社があり、それぞれ得意分野があります。

技術の面

クライアント開発はUnityがメイン。
幅広い分野の開発がありノウハウが蓄積されています。
アウトプットも積極的に行っています

creator.game.cyberagent.co.jp

 

 

 

企業LT#1 「Cinemachineで見下ろし視点のカメラを作る」

www.youtube.comCinemachineとはカメラを制御するツールです。UPMからインストールできます。
追跡する対象や、どう追跡するかなどを設定しカメラをいい感じにしてくれます。
他にも、いくつかのカメラを用意して状況に応じて切り替えていきます。

 

今回はこれで見下ろし型カメラの作り方を紹介します。
FramingTransposerを使います。
これはもともと2D向けの機能ですが、カメラの回転が必要ない見下ろし方のゲームにマッチします。

Framing Transposer | Cinemachine | 2.6.0

 

質疑応答

Q.場にキャラが複数いて、追尾するキャラを切り替えるときは、follow,lookatの対象を変えるのではなく、バーチャルカメラを複数移したい対象ごとに作ってバーチャルカメラを切り替えるほうが使い方イメージとしてとしてはあってるのでしょうか。

 

A. どちらでもいいですが、Cinemachineの考え方としてはカメラを切り替えたほうがいい。
フォロワーを切り替えると座標がいきなり大きく変わってしまうかもしれないため。

 

 

 

企業LT#2 Burstを使ってSHA-256のハッシュ計算を高速に行う話

www.youtube.com本日扱うソースコードはこちらにあります

github.com

去年のcedecで講演したのがあります、細かい話はこちらをどうぞ。

learning.unity3d.jp


burstは早いがいろいろ使えないものも多い。
そこで今回はBurstでファイル入力をする話をします。
Job System向けにAsyncReadManagerというファイル読み込みをする仕組みがあります。

おまけ

SHA-256の逆変換をBurstでやる場合、計算してみるとおよそ1000那由他年かかります。

crowdworks.jp



 

 

一般LT#1 「Addressables の Catalog 外部読込を試してみた」

プロジェクトをAddressables Assets Systemを使って分割した時のお話。

 

プロジェクト側でビルドしたcatalogをLoadContentCatalogAsyncで読み込むだけ
UniTask.Addressablesを参照しておくと便利。
思いのほかすんなりいけましたが、製品版としてリリースしているわけではないので注意。

 

 

 

 

 

一般LT#2 「Unityにおける設計のパターン」

 

 

最近本を出しました

www.kadokawa.co.jp

 

設計アーキテクチャについてのお話
発表はだいぶ端折っていきます。公開している資料はフルバージョンです。

設計とは

どう作るかという指針のこと、これを俯瞰してみたのがアーキテクチャ
開発・運用コストを最小限にするのが目的

設計レベル

Unityにおける設計レベルを(勝手に)決めました。
レベルを上げると長期開発におけるコストが下がっていく、ただし開発者に対する負担が上がる。
どのレベルにするかはバランスを見てください。

まとめ

完璧なアーキテクチャは存在しない。
クリーンアーキテクチャになっていなかったり密結合でも、それがやりやすいならそれが良い。
ただし設計しなくていいというわけではない。

参考資料

www.nuits.jp

www.nikkeibp.co.jp

www.kadokawa.co.jp

 

 

 

 

企業LT#3 「A quick tour of the Cysharp OSS

Cysharpが提供しているOSSの紹介です。

MagicOnion

C#のサーバーサイドフレームワーク。採用実績がけっこうあります。

GitHub - Cysharp/MagicOnion: Unified Realtime/API framework for .NET platform and Unity.

UniTask

unityでasync/awairをゼロアロケーションで実現できるライブラリ 激おすすめ

GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.

MasterMemory

クッソ早いデータベース

GitHub - Cysharp/MasterMemory: Embedded Typed Readonly In-Memory Document Database for .NET Core and Unity.

ZString

文字列生成を最適化 余計なごみを出さない

GitHub - Cysharp/ZString: Zero Allocation StringBuilder for .NET Core and Unity.

Ulid

ソート可能なGUIDの高速なC#実装

SlnMerge

Unityの.slnとサーバーの.slnを合成してくれる

 

 

 

企業LT#4 「NieR Re[in]carnationの開発」

NieR Re[in]carnationの開発について

nierreincarnation.jp

・ノードベースのツールを作成しました

・アウトゲームの作り方
UIにこだわりたかったため、Rapid開発という独自の開発をしました
photoshop to Unity Prefabツールを作成

・設計はMVPパターンに沿った実装

・UIアニメーションはUnityのAnimator+AnimationClipで実装、エンジニアはAnimationを指定

・アセット管理はPerforceを使用

・通信回り:通信はgRPCのUnary方式

デバッグ回り:SRDebuggerを使用(これにバグ報告機能を組み込んでいます)

 

 

2月24日追記 アプリボット技術ブログTechbotにて、
「NieR Re[in]carnation」のアウトゲーム開発フローと開発に用いたツールの紹介記事が投稿されました。

blog.applibot.co.jp

 

 

 

 

 

一般LT#3 「XR Interaction Toolkit 1.0.0-pre で VR 開発してみよう」

XR Interaction Toolkitとは

Unityが提供するツールキットです、Oculus Integrationみたいなやつ
2019年に公開され、2020に新機能が公開、リリース目前になっています。
今回はVR側の機能の紹介を行います。

質問

Q. OculusI ntegrationと比べた時のメリットは何?


A. XR Interaction ToolkitはUPMでインストールされます。Assets配下に置かれないためリポジトリの容量が増えない。

 

 

 

一般LT#4 「Unityでチャットに使えるモバイルキーボードを実現する」

モバイルキーボードを気持ちよく実装する方法についてのお話

キーボードの高さを取得し、RectTransformのBottomに反映させたり、解像度の調整など。

(Androidの場合はこちら)

baba-s.hatenablog.com

 

 

サンプルはこちらで公開しています。

github.com

 

来週Roppongi.unityを開催しますのでよろしくお願いします

roppongiunity.connpass.com

 

  

 

おわり

新しい○○.unity勉強会が誕生しました。
今回主催運営をしているのはサイバーエージェントさんです。
実は過去にごたゆにの会場提供をされていたこともあります。

raspberly.hateblo.jp

第一回目の開催にも関わらずなんと参加者が700人超え!
Unite 2019の会場グランドニッコーでは、1ルームの収容人数が400人ほどなので実質Uniteと言っても過言ではない?

 

 

企業LT#1で紹介されていた、ChinemachineのFramingTransposerは
Unityショートセッション勉強会でとと様が2Dで使用していました。
こちらも合わせてチェック

raspberly.hateblo.jp

 

 

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。

【アセット紹介】Loading Screenでロード画面を簡単に実装する【Unity】

今回はアセットの紹介をしていきます。
紹介するのは「Loading Screen」。
ロード画面を簡単に実装できるアセットです。

 

f:id:Raspberly:20210209015423g:plain

 

アセットの使用感をチェックしたい方は実際に試してみる までスキップ!

 

お得なバンドル情報!

現在アセットストアでは、旧正月を記念したメガバンドルが発売中です!終了しました
厳選されたツール系アセットとアート系アセットが超お得に手に入るチャンス
今回紹介するLoading Screenも対象アセットです。
詳しくは下のバナーリンクからどうぞ。

f:id:Raspberly:20210209005108p:plain

 

 

どんなアセット?

プレハブをドラッグアンドドロップするだけで簡単にロード画面を実装できるアセットです。
ロード画面の呼び出しもボタンに紐づけるか、スクリプトに1行追加するだけ!

特徴:
◆完全なUGUIシステム。
◆シーン間のスムーズな移行。
◆非同期および偽の読み込み。
◆バックグラウンド遷移。
◆ゲームのヒントシステム。
◆フェード効果のあるバックグラウンドサウンド
スクリプトで使用する1行のコード。
プログレスバーの読み込み。
◆進行状況テキストの読み込み。
◆進行状況が塗りつぶされた画像の読み込み。
◆シーンの説明を表示します。
◆シーンカストン名を表示します。
ドラッグアンドドロップシステム。
◆完全かつ簡単にカスタマイズ可能。
◆簡単に拡張できます。
◆15個の既製のプレハブを使用できます。
◆組み込みのドキュメント。

 

 

 

開発環境

Unity2020.1.17f1

Loading Screen ver1.4.5

 

 

 

インポートとドキュメントの確認

アセットインポート完了時はこんな感じです。
ドキュメントを勧めてくるウインドウが表示されます。

f:id:Raspberly:20210207182656p:plain


このウインドウはWindow/LOSでも表示できますし、
ドキュメントはWindow/Loading Screen/Documentationからも参照できます。

f:id:Raspberly:20210207182956p:plain

 

ドキュメントはこんな感じ、動画や画像も使われていてとてもわかりやすく解説されています。

f:id:Raspberly:20210207184449p:plain

ドキュメントがエディター拡張で作られてるのってあまりないので、このコードだけでもかなり価値がありそう。
 

ドキュメントの中身については次項以降で説明します。

 

 

 

ロードシーンの確認

ロードシーンはLoading Screen/Example/Scenesから確認できます。

f:id:Raspberly:20210207200312p:plain

Example xという名前のシーンがロード画面のシーンです。
LoadExampleシーンはロード後に遷移するシーンです。

 

Example xシーンを再生するとロード画面の挙動確認が行えます。
デフォルトではロード画面からLoadExampleシーンに遷移するので、
Build SettingsからLoadExampleシーンをビルドに含めるようにしましょう。

f:id:Raspberly:20210207203352p:plain

f:id:Raspberly:20210207203515p:plain

 

 

Example シーン一覧

数が多いため小さく表示しています。
プログレスバーが違ったり、ゲームのTipsが表示されたり、ロード完了後ボタンを押すよう促したりと様々。

f:id:Raspberly:20210208032211g:plain   f:id:Raspberly:20210208032241g:plain

f:id:Raspberly:20210208032305g:plain   f:id:Raspberly:20210208032329g:plain

f:id:Raspberly:20210208032401g:plain   f:id:Raspberly:20210208032429g:plain

f:id:Raspberly:20210208032451g:plain   f:id:Raspberly:20210208032516g:plain

f:id:Raspberly:20210208032549g:plain   f:id:Raspberly:20210208032615g:plain

f:id:Raspberly:20210208032715g:plain   f:id:Raspberly:20210208032740g:plain

f:id:Raspberly:20210208032843g:plain   f:id:Raspberly:20210208032945g:plain

f:id:Raspberly:20210208033025g:plain   f:id:Raspberly:20210208033131g:plain

 

ロードシーンのエラー解決

Example 3シーンにて、プログレスバーの横にあるテキストが表示されない不具合があります。

f:id:Raspberly:20210207211637p:plain

Canvas/UI (Example)/SceneLoader 3/Loader UI/LoaderRoot/LoadingBar/BarSlider/LoadingTextのTextで、
Fontを別のもの(Rajdhani-Boldなど)に変更し、Horizontal OverflowとVertical OverflowをOverflowに変えると解決します。

 

 

ドキュメント解説

ここから本題、ドキュメントの内容を解説していきます(機械翻訳を含む)

クイックスタート

1. UnityのトップメニューからWindow/Loadiong Screen/Add Levelsをクリック

f:id:Raspberly:20210208225946p:plain

 

2. SceneLoaderManagerにシーンの情報を入力する

Add Levelsをクリックすると、SceneLoaderManagerがInspectorで表示される。
同時に、Build Settingsに登録してあるシーンが自動でSceneLoaderManagerに追加される。

f:id:Raspberly:20210208230852p:plain

 

3. ロード画面に移行したいシーンのCanvasScene Loaderプレハブを配置する

Loading Screen/Content/Prefabs/SceneLoadersにあるSceneLoaderプレハブをシーンのCanvas内に配置する

f:id:Raspberly:20210208231721p:plain

f:id:Raspberly:20210208234138p:plain

 

4. ボタンやコードでシーンをロードする

SceneLoaderプレハブにあるbl_SceneLoaderコンポーネントのLoadLevel関数をボタンやコードから呼ぶ
引数として遷移先のシーン名を渡す

f:id:Raspberly:20210208234405p:plain

 

これで完成、ボタンを押すとロード画面が挟まりシーン遷移します。

f:id:Raspberly:20210209015338g:plain



 

ここからは細かく見ていきます。

ロード先のシーンを追加する方法

シーンをロードするには、2つのことが必要です。

1. シーンがBuild Settingsに登録されていること
2. シーンがSceneLoadingManagerに登録されていること

 

SceneLoaderManagerは、このアセットで使用されるシーンの情報が保存されているScriptableObjectです。
Resoucesフォルダにあります。

f:id:Raspberly:20210208224248p:plain

 

Loading Screen/Add Levelsからプロジェクトのシーンを追加するのが初めての場合、
Build Settingsに登録されているシーンがSceneLoaderManagerに自動的に追加されます。

f:id:Raspberly:20210208225946p:plain

 

また、Add LevelsはSceneLoaderManagerをInspectorに表示します。
ここからシーンの様々な設定ができます。

f:id:Raspberly:20210209001122p:plain



ボタンからロードする方法

ボタンからロードするには2つの方法があります。

1. ボタンにbl_ButtonSceneLoadコンポーネントをアタッチしてシーン名を指定する

2. ボタンのOnClickにnl_ButtonSceneLoadコンポーネントを追加し、LoadLevel関数を呼ぶようにする

f:id:Raspberly:20210208234405p:plain



コードからロードする方法

Unity標準のLoadScene関数を置き換えるだけです。

//Unity標準の関数
SceneManager.LoadScene("SCENE_NAME");

これをこうじゃ

//LoadingScreenの関数
bl_SceneLoaderUtils.GetLoader.LoadLevel("SCENE_NAME");

ドキュメントで紹介している最もシンプルな実装例はこんな感じです

using UnityEngine;

public class LoadSceneScript : MonoBehaviour
{
        public string SceneName = "LoadExample";

        public void LoadMyScene()
        {
                bl_SceneLoaderUtils.GetLoader.LoadLevel(SceneName);
        }
}

 

 

ロードタイプ

シーンのロードタイプは2つあります。
ロードタイプはSceneLoaderManagerからシーンごとに選択できます。

f:id:Raspberly:20210209002949p:plain

Async

非同期でシーンをロードし、ロードが終わり次第ロード画面を終了します。

Fake

シーンの読み込み状況に関わらず、指定の時間分ロード画面を表示します
すぐにロードが終わる小さなシーンで便利ですが、ロードの遅い大容量のシーンには不向きです。
ロード時間はFakeLoadingTimeで設定できます。

f:id:Raspberly:20210209003311p:plain

 

 

ロード画面を編集する方法

ロード画面のデザインをカスタマイズするには、既存のプレハブを改造していく必要があります。

Assets/Loading Screen/Content/Prefabs/SceneLoadersにあるプレハブをOpenPrefabで開いたり、
適当なシーンのCanvasに置いて編集するのがオススメです。

 

SceneLoaderのLoaderRootオブジェクトをアクティブにしてから修正を開始します。

f:id:Raspberly:20210209004726p:plain

注意点として、最初から用意されているロード画面プレハブは全てuGUIのTextで構成されています。
必要に応じてText Mesh Proに置き換えていきましょう。

 

 

 

 

実際に試してみる

ドキュメントに従って実際にロード画面を作ってみます。
ここだけ見れば大体の雰囲気はつかめるかも!

 

シーンを準備

ロード画面を呼び出すメニュー画面のシーンと、
ロード画面から遷移するゲーム画面のシーンの2つを用意します。

 

メニュー画面の方はTitleシーン

f:id:Raspberly:20210209012516p:plain 

 

ゲーム画面の方はGameシーンとします

f:id:Raspberly:20210209012727p:plain

 

Gameシーンのセッティング

GameシーンをBuild Settingに登録し、

f:id:Raspberly:20210209012416p:plain

 

Window/Loading Screen/Add LevelsでSceneLoaderManagerに登録します。

f:id:Raspberly:20210208225946p:plain

 

 

シーンの設定をします。
Gameシーンであることを確認しパラメータを変えていきます。

f:id:Raspberly:20210209012019p:plain

Skip Type:Any Keyに変更。ロード終了後何かキーが押されるとロード画面が終了するようになります。

Loading Type:Fakeに変更。ロード状況に関わらず最低5秒ロード画面を表示するようにします。

Background:適当なユニティちゃんのスプライトを設定します。

 

 

SceneLoaderの配置と編集

TitleシーンのCanvas内にSceneLoaderプレハブを配置します。
プレハブはLoading Screen/Content/Prefab/SceneLoadersにあります。

f:id:Raspberly:20210209012945p:plain

 

このプレハブがロード画面なので、このデザインを調整していきます。

f:id:Raspberly:20210209013113p:plain

テキストの削除、円形プログレスバーの拡大、最下部のプログレスバーのサイズ調整などをしていきます。

 

ボタンを押したらロード画面に進むようにする

TitleシーンのボタンのOn Clickに先ほど配置したSceneLoaderプレハブのLoadLevel関数を紐づけ、
引数として遷移先のシーン名を渡します。今回はGameシーンに行きたいのでGameを選びます。

f:id:Raspberly:20210209013330p:plain

 

 

完成!

これで終わりです。
Titleシーンをプレイし、STARTボタンを押すことでロード画面を挟みながらGameシーンに遷移します。

f:id:Raspberly:20210209015423g:plain

 

 

まとめ

・Loading Screenアセットを使うと簡単にロード画面を実装できる
・シーンの登録をし、付属のプレハブを配置してシーンをロードするだけ!

 

以上です。
現在開催中のメガバンドルを購入すると他にもお得なアセットがついてくるのでオススメ! 

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

※本記事にはAssetStoreアフィリエイトリンクが含まれています。
※この記事はユニティちゃんライセンスの提供でお送りしています。
© Unity Technologies Japan/UCL

 

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

【小技】Soft Particleでオブジェクトにフォグをかける【Unity】

今回はTwitterネタをやっていきます。
TwitterでおもしろいUnityTipsを見かけました。

なかなか使いどころがありそうなTipsです。今回はこれを実際に試して掘り下げていきます。
シェーダーを書くことなくすぐにフォグをかけたい場合にオススメの方法です。
部分的にフォグをかけたり、建物の入り口を隠したい時に活用できます。

f:id:Raspberly:20210202013214g:plain

f:id:Raspberly:20210202013330p:plain

 

開発環境

Unity 2020.1.17f1

URP ver8.3.1

 

 

Built-inプロジェクトの場合

基本的な流れとしてはMaterialを作成し適当なオブジェクトにアタッチするだけです

Materialの作成

フォグを表現するMaterialを作成します
作成したMaterialのシェーダーをParticle/Standard Unlitに変更

f:id:Raspberly:20210201173332p:plain

Rendering ModeをFadeに変更

f:id:Raspberly:20210201174025p:plain 

Soft Particleをオン

f:id:Raspberly:20210201174124p:plain

Soft Particleはデプスバッファに書き込まれたオブジェクトの表面に近づくとフェードアウトする機能です。
フェードアウトの設定はパラメータで行います。

Near fade : フェードアウトするまでの最短距離
Far fade : フェードアウトするまでの最長距離

Near fadeは0のまま、Far fadeは1~1.5くらいがよさそうです。
Far fadeをあまりにも大きくするとほとんどスケスケの状態になります。

 

暗い場所を表現するため色は真っ黒にしますがお好みで

f:id:Raspberly:20210201195639p:plain

これでマテリアルは完成です。

f:id:Raspberly:20210201200957p:plain

 

オブジェクトにMaterialをアタッチする

適当なBoxやSphereなどのオブジェクトにアタッチすれば完成です。
ついでにCast ShadowsをOffにして影を無効化しておきます。

f:id:Raspberly:20210201205034p:plain

 

他オブジェクトが近づくとフォグに飲み込まれるようにフェードアウトします。

f:id:Raspberly:20210201205404g:plain

 

Soft Particlesを描画する

Soft Particleがうまく機能しない場合があります。その場合はProject Settingsを見直しましょう。

ProjectSettings/QualityからSoft Particlesを有効にします。

f:id:Raspberly:20210201201834p:plain

警告が出ています。
Rendering ModeをDeferredにするか、CameraのDepthTextureを有効にする必要があります。
(どちらか片方だけでいい)

Rendering Modeを変える場合

CameraのRendering PathをDeferredに変更する

f:id:Raspberly:20210202005813p:plain

CameraではなくProjectSettings/Graphicsから現在使っているLevelのRendering PathをDeferredに変更してもよい

f:id:Raspberly:20210201203839p:plain

DepthTextureを有効にする場合

CameraのDepthTextureModeを有効にします。これはInspectorから変更できません。
テラシュールブログで紹介されているスクリプトをCameraにアタッチする方法がオススメ。
デプスオン!デプスオン!デプスオン!

 

このスクリプトをCameraにアタッチすると、InspectorビューからDepthTextureが有効になっていることが確認できます。

f:id:Raspberly:20210201204818p:plain

 

 

 

 

 

URPプロジェクトの場合

Built-inと同様にMaterialを作成し、適当なオブジェクトにアタッチするだけです

Materialの作成

URPの場合は使うシェーダーが違います。
MaterialのシェーダーをUniversal Render Pipeline/Particles/Unlitシェーダーに変更

f:id:Raspberly:20210130000142p:plain

Surface TypeをTransparent

f:id:Raspberly:20210130000431p:plain

Advancedを展開し、Soft Particlesにチェックを入れます

f:id:Raspberly:20210130001106p:plain

最終的にこうなります、色はお好みで

f:id:Raspberly:20210130001250p:plain

 

Soft Particlesを描画する

URPでもDepth Textureを有効にする必要があります

Cameraの設定をする場合

InspectorからDepth Textureを有効にします。Built-inとは違いスクリプトは必要ありません。

f:id:Raspberly:20210202004427p:plain

URPアセットを設定する場合

Project Setting/GraphicsからURPアセットをダブルクリックすると、Inspectorから編集ができるようになるので、
GeneralのDepthTextureを有効にする

f:id:Raspberly:20210202004921p:plain



これで設定は終わりです。
作ったMaterialを適当なCubeやSphereにアタッチすれば完成。
オブジェクトがFogに飲み込まれるようにフェードアウトします。

f:id:Raspberly:20210202013000g:plain

 

以上です。

 

まとめ

・Soft particleを使ったMaterialをオブジェクトにアタッチすることで、フォグのような演出を作ることができる
・MaterialはUnity標準のParticles/Standard Unlitシェーダーを使う
・URPの場合はUniversal Render Pipeline/Particles/Unlitシェーダーを使う
・MaterialのSoft Particlesを有効にする
・CameraのDepthTextureを有効にする

 

手っ取り早くフォグっぽいものを実装したい時に便利!

f:id:Raspberly:20210202013214g:plain





 

元ネタツイート

 

参考資料

tsubakit1.hateblo.jp

tips.hecomi.com

docs.unity3d.com

docs.unity3d.com

 

 

 

ブログ内のデモではユニティちゃん(URP)モデルを使用しています。

raspberly.hateblo.jp

【勉強会レポ】: 📣 unity1week online共有会 #3

勉強会のレポート(メモ)です。
参加したのはこちら「📣 unity1week online共有会 #3」

meetup.unity3d.jp

ハッシュタグ : #u1w共有会

アーカイブはこちら

www.youtube.com

 

 

前回はこちら

raspberly.hateblo.jp



 

 

unity1week共有会って何?

unity1weekでいろんなゲームを遊んでいると
「どういう実装をしているんだろう」「どんな人が作っているのか」など気になることがいっぱい!

それら気になることを直接聞けばいいじゃん!というのがunity1week共有会の始まりで、
みんなで学んで成長することが趣旨です。

 

unity1weekについてはこちら

Unity 1週間ゲームジャム | フリーゲーム投稿サイト unityroom

 

 

今回は10人の発表者にトークしていただきます。
後半はチーム開発に関するテーマが多いのが特徴です。

 

#1 ハードルは潜るもの完成を目指さなかったUnity1Week

技術的な話ではなく、参加するうえでのモチベーションや目標設定のお話。

作ったゲーム : 【未完成】ゲートを開け | フリーゲーム投稿サイト unityroom

完成できてないゲームですが、完成できてないことは悪くはない。悪いのは参加しなくなること

参加できない理由はいろいろあると思いますが、自分でコントロールできないことを目標にしているからです。

目標の立て方

キーワードはKGIとKSFとKPIです。
KGI : 最終的な目標
KSF : 目標を満たすための要因
KPI : 要因を満たすための指標

目標設定することで、成果が出せなくてもうまくいかなかった理由がわかる
→次に活かせる

まとめ

自分さえ納得できればよい。次回は目標を立てて参加してみてはいかがでしょうか?

 

 

 

#2 ゴルフボールで山登ってみた話&全プレイ配信した中での話

作る側の話と、遊ぶ側の話をします。

作ったゲーム : Time to GOLF | フリーゲーム投稿サイト unityroom

作った時の話

登山ゲームを遊んでいていつか作ってみたいと思ったのでu1wで挑戦しました。
・登山ゲー自体がu1wを遊んでいる人のニーズに合ってない。(想定時間2時間以上)
・登山ゲー界隈に補足され
・みんなも登山ゲーを作ろう!

全作品遊んだ中での気づき

全作品プレイ配信をしました

www.youtube.com

遊んだ中での気づきを共有します。

一目でゲーム性がわかることは強み
 ゲーム画面のみで「どう遊べばいいのか」がわかるとストレスなく遊べる

パズルゲームは遊びやすく面白い
 とっつきやく、ゲームサイクルも短め
ゲームプレイに支障をきたすよくある3点の共有
 ・Update文の中でなにか動かす時に、速度にTime.deltaTimeをかけてない
 ・解像度の違いでUIが崩れる
 ・特殊な操作キー設定は、理由があるとき以外は避けよう

最後に

面白い作品が本当に多いのでみんなも1回プレイしよう

 

 

 

#3 仕事をしながらのUnity1Week

作ったゲーム : HAYABEN | フリーゲーム投稿サイト unityroom

今回最初に行ったのは前回の振り返り
→評価が一番低かったサウンドを今回自作しようと決めました

開催前

・開催前にサウンドの自作を行いました。Unity上で鳴らしたり、処理の練習もしました。
・ドット絵の練習もしました。10分ドット絵に参加してアウトプットも行いました。

本番(平日)

・どこまでできたら投稿するかを決めました。
・モックの作成

本番(休日)

・素材と処理の作成(ステージ、UI、BGMなど)
前作のキャラクターを出すなど遊び心にも挑戦しました。

開発結果

合計38.5時間で作成しました。前回より速度が上がりました。

 

 

 

#4 ShaderGraphで作るSci-Fi表現

今回のゲームで作ったエフェクトの作り方に関するお話。

作ったゲーム : 空中キックボール | フリーゲーム投稿サイト unityroom

・・・

図解が豊富なので、ぜひ動画を見てください。

・・・

 

 

#5 失敗から学ぶゲーム制作

作ったゲーム : シムアクト | フリーゲーム投稿サイト unityroom

過去に参加したu1wの失敗を踏まえ対策を対策を考えていきます。

8月の1wに出したゲーム

農場娘は5秒ごとに増殖する | フリーゲーム投稿サイト unityroom

評価結果を見ると悪くなさそうだが、プレイ数はとても低かった。→多くの人に楽しんでもらえていない。

失敗の原因と対策

・よくあるシューティングゲームで新しい体験を提供できていなかった。
 そもそもシューティングゲームしか作れなかったので、次回にむけ作れるゲームを増やしました。

・企画の考え方を見直す
 ジャンルからではなく体験から入るようにした。
 →ジャンルに囚われないユニークなアイデアから、新しい体験を求めているプレイヤーに刺さるのでは

シムアクト投稿後の話

遅刻はしたがプレイ数は伸び悩んだ。
そもそも自分が他の人のゲームを遊んだり評価していなかった→次第にプレイ数が伸び始めたので遊ぶのが大事だった

 

結果

・プレイ数を上げるには遅刻しない、みんなのゲームを遊ぶ
・操作性、楽しさはテストプレイの時間を多くとる
・体験を強調することを意識したい→面白いと思った体験を増やす

終わりに

失敗したということは、次の目標課題が明確になったことで、
失敗はネガティブではなくポジティブな言葉です。

 

 

 

#6 チーム開発をした話

作ったゲーム : Demon's Holiday | フリーゲーム投稿サイト unityroom

チーム開発どうだったか

最高でした

メリット
・自分のできない所を補い合うことができる
・完成速度、クオリティの向上

デメリット
・1週間で役割をまとめるのが大変
・誰も改修できないタスクがあるとしんどい

楽しく作れた要因

募集:各役割1名と限定して募集した。(できない所を補い合うため)

ニンゲン性:褒めるのがうまい。他メンバーへのリスペクトがあり。やりとりの快適だった。

コミュニケーションの切り離し:会話の方が伝わりやすい、文字の方がよい部分を切り離す。

メリハリ:寝る時や仕事する時などチームだと遠慮しがちだが、共通認識にしておく。

まとめ

・メンバー集めは競合しないようにする
・他メンバーを信用して進める
・寝る
・全員のマインドセット(気持ち)を揃える

 

 

 

 

#7 u1wチーム開発におけるプログラマー間での分業

作ったゲーム : すきすきスキマん | フリーゲーム投稿サイト unityroom

プログラマの分業に関するお話。

2か月間準備してきました:unity1weekにチームで参戦するために2monthかけて準備した話 - kugi's notebook

分業するポイント

・タスクを分業できるタスク(独立して機能して依存しないスクリプト)に分解する。
・タスク管理はgithubのisuueを使いました。ここの内容を実装していく。
・実装したものはprefab(シーンに置けば独立して動作するもの)として共有する。

タスクの作り方 インターフェースの利用

・リードプログラマがインターフェースを定義
・同時に最低限のプログラムを用意しておく
・issueを作成されるまで作業待ちが発生してしまう

タスクの作り方 SilCilSystemの利用

変数やイベントをアセットとして扱うシステム。他のスクリプトに依存せず値を参照できる。
詳細:SilCilSystem | UnityTeamDevTemplate

チュートリアルSilCilSystemを使って「玉転がし」(Roll a ball)を作る | GSD ONLINE | 広島大学ゲーム制作同好会

まとめと感想

・複数人プログラマによるチーム開発に挑戦した
・90個のissueを実装したが、誰かに偏ることもなくプログラマの待ち時間も全くなかった。

1weekでもプログラマの共同制作ができる

 

 

 

#8 チームで楽しく制作するためのコミュニケーション術

作ったゲーム : 5秒間の黒子さん | フリーゲーム投稿サイト unityroom/

チーム全員が楽しく制作するためにはどういうことを考えればいいかについてのお話。

楽しく制作するために重要なこと

リーダー:意図とゴール(どう考えてどうしたいか)を伝えてどう作るかはおまかせする

メンバー:どういうものを作るかは守るが、悪ノリ(こうした方が面白いんじゃないか)は積極的にする。

悪ノリを自由できるのが楽しい制作。
ただし、どこまでおまかせできるのか、意図とゴールを明確にし伝える能力が必要。
メンバーも意図やゴールがわからなかったら聞くコミュニケーション能力も大事。

なぜチーム開発をするのか

専門性の高いメンバーによって、品質が高いゲームが作れる。
リーダーが全部考えるのではなく、各メンバーが面白さを考えてゲームに入れていく方が、いろんな発見がある楽しいゲームになる。どんどん自分なりの面白さを入れていける制作になるので作るのも楽しい。

 

 

 

#9 絶対にリリースできる!?勝手に作るチーム制作

作ったゲーム : 鳴らせ!除夜の鐘 | フリーゲーム投稿サイト unityroom

完成させるために意識したこと

事前準備を怠らない
 ゲームロジックに依存しない部分は事前に用意しておく

チームで作る、勝手に作る
 チームとして動く場合、連絡を密に取り、時間を決め進捗や情報を共有する
 勝手に作る場合、タスクと内容は自分で決める

最小から考える
 まずは遊べるものを作り、ブラッシュアップを繰り返し、できているものを完成品とする
 どんどん機能を追加するよりデザインを盛ることを意識した

リリース後

スコアランキングやTwitter投稿機能などを追加(評価を高めるため)
せっかくなのでAndroidリリース

振り返って

無事完成しランクインもできた
次は面白さも追及したい

 

 

 

 

 

#10 始めよければ全てよし、な話

これからunity1weekに参加しようと考えている方に向けたお話です。

作ったゲーム : いわとをあけて | フリーゲーム投稿サイト unityroom

ゲーム制作時の課題(ゆるすぎたスタート)

ゲーム画面、ルール、クリア条件しか決まっていない状態で実装をお願いしてしまった。
リソースの洗い出しが荒かった。

結果として、実装側が企画側に確認してもらわなければならなかった。
リソース作成の進捗が見えず見通しが立たなかった。

決めておくとよい具体的な項目

・ゲーム流れもしくは遷移図
・クリア条件
・必要な演出
・登場するキャラクターの挙動に関する仕様
・ランキング仕様
・必要なリソースの洗い出し

ゲームの全体像がつかめ、規模感が判断できる。
全体的な工数の把握(スケジュールの組み立て優先度が立てられる)
ゲーム開発初期の時点で全体像がわかることはとても重要

まとめ

「終わりよければ全てよし」というが、ゲーム開発においては始めが肝心

 

 

 

 

 

 

 

以上です。
発表者のみなさんお疲れさまでした。👏👏👏

 

 

他の方の感想ブログ

jupiterthundar.hatenablog.com

 

 

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。