ぴちてぶろぐ

ゲーム開発会社勤務のUnityエンジニアの情報発信場!!

【個人開発】iOSアプリ開発に必要なもの

この度個人製作初アプリリリースしました!

Don't drop it!!

Don't drop it!!

  • Tomoaki Baba
  • ゲーム
  • 無料
apps.apple.com
ハイパーカジュアルゲーム毎月一本リリースを目標に今後も制作進めていくつもりです。
ご興味のある方ぜひインストールしてレビュー頂ければと思います!

宣伝はこのくらいにしまして、iOSアプリをリリースを経て
必要なものやあると便利なものなどをまとめてみました。
今後制作を考えている方のためになればと思います。

iOSアプリ開発に必要なもの

  ipaの作成に使用します。
  証明書やAppStoreへのアップロード等もMacを通して行います。
  こういったツールもあるようなのですが
  証明書の登録等は最初に必要になるらしいのでMacは欠かせないようです。
  ※ツールを試したわけではないので不確かです。

  • iOS Developer Program 登録

  https://developer.apple.com/jp/programs/how-it-works/
  AppStoreへアプリを登録するためにAppleの開発者に登録する必要があります。
  こちらは年間1万1800円かかります。
  参考にさせて頂いたサイト
  i-app-tec.com

iOSアプリ開発にあるといいもの(使ったツール等)

  • プライバシーポリシー作成

  アプリを登録する際に知ったのですが、プライバシーポリシーの記載が必須になったそうです。
  サイト作って英文書いて、、、は流石に骨が折れるのでこちらを利用するとよいと思います。
  ベースとなる文章が用意されているので、参考に進めると楽に作成できます。
  こんな感じに作成できます。
  Don't drop it!! - Privacy Policy
  外部SDKを組み込んでいる場合は、それらリンクも入れておくと良いでしょう。

  • スクショ作成

  https://help.apple.com/app-store-connect/#/devd274dd925
  f:id:peachtea_tom:20200621234528p:plain
  比率違いのスクショを3つ作成する必要があります。
  画像をドロップすると作ってくれるサイトもあるようなのですが
  私はGIMPを使用して各サイズ用意するようにしました。
  画像を拡縮→キャンパスサイズ(比率)を変更で作成しました。

まとめ

以上がiOSアプリ開発に必要なものでした。
抜けがあったらすいません。。
気付き次第補完していきます。
良き制作ライフを!

【Jenkins】ipaを自動生成する③(mac/Jenkins/Unity/GitHub/DeployGate)

概要

Jenkinsビルド→ipa作成までを自動で行えるようにする
今回は、Xcodeプロジェクト→ipa作成まで
Jenkinsのセットアップ~Unityビルドは前回までの記事を参照
peachtea-tom.hatenablog.com
peachtea-tom.hatenablog.com

環境

Unity2019.3.13f1
Xcode 11.4.1

ExportOptions.plist作成

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>compileBitcode</key>
	<false/>
	<key>destination</key>
	<string>export</string>
	<key>method</key>
	<string>ad-hoc</string>
	<key>provisioningProfiles</key>
	<dict>
		<key>アプリのBundleID</key>
		<string>プロビジョニングファイルの名前</string>
	</dict>
	<key>signingCertificate</key>
	<string>証明書名</string>
	<key>signingStyle</key>
	<string>manual</string>
	<key>stripSwiftSymbols</key>
	<true/>
	<key>teamID</key>
	<string>チームID</string>
	<key>thinning</key>
	<string>&lt;none&gt;</string>
</dict>
</plist>

※バンドルIDやプロビジョニングの名前は適宜変更を。
BuildSettings/iOS/DevelopmentExportOptions.plist
に保存しておく。

Xcodeビルド(ipa生成)

前回作成したbuild.shに下記を追加します。

UNITY_APP_PATH="/Applications/Unity/Hub/Editor/2019.3.13f1/Unity.app/Contents/MacOS/Unity"
PROJECT_PATH=$WORKSPACE
UNITY_EDITOR_LOG_PATH=$WORKSPACE/build.log

$UNITY_APP_PATH -batchmode -username ここにユーザ名 -password ここにパスワード -quit -logFile $UNITY_EDITOR_LOG_PATH -projectPath $PROJECT_PATH -executeMethod BuildROM.BatchBuild 

cat $UNITY_EDITOR_LOG_PATH

#------ここからが追加分------------------
# Xcode Projectのパス
XCODE_PROJECT=$WORKSPACE/Product/Unity-iPhone.xcodeproj
# アーカイブ先
ARCHIVE_PATH=$WORKSPACE/Product/rom.xcarchive
# ipa配置場所
IPA_PATH=$WORKSPACE/Product/
# plistのパス
XCODE_EXPORT_OPTION_PLIST_PATH=${WORKSPACE}/BuildSettings/iOS/DevelopmentExportOptions.plist

# キーチェーンをアンロックしておく
security -v unlock-keychain -p MACのパスワード

#clean
xcodebuild clean -project $XCODE_PROJECT -target Unity-iPhone -configuration Release

#archive
xcodebuild -project $XCODE_PROJECT -scheme Unity-iPhone archive -archivePath $ARCHIVE_PATH -configuration Release

#export
xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath $IPA_PATH -exportOptionsPlist $XCODE_EXPORT_OPTION_PLIST_PATH

以上で、Xcodeプロジェクトからipa生成までが可能になります。

補足

cocoapodsを使用する場合は、xcodeprojではなくxcworkspaceを使うことになります。
Facebook SDKを導入する場合等はこちらのケースになります。
xcworkspaceを使用する場合、build.shを次のように変更する必要があります

# Unity-iPhone.xcodeproj => Unity-iPhone.xcworkspace
XCODE_PROJECT=$WORKSPACE/Product/Unity-iPhone.xcworkspace
# -project  => -workspace
xcodebuild clean -workspace $XCODE_PROJECT -target Unity-iPhone -configuration Release
# -project  => -workspace
xcodebuild -workspace $XCODE_PROJECT -scheme Unity-iPhone archive -archivePath $ARCHIVE_PATH -configuration Release

おまけ(DeployGate)

①~③までお付き合いありがとうございました。
これまでのことを一通り行うことで、Jenkinsビルド→ipa生成までが出来るようになります。
最後におまけで、DeployGateにアップするコマンドを記載しておきます。

curl \
  -H "Authorization: token アプリトークン" \
  -F "file=@${WORKSPACE}/Product/Unity-iPhone.ipa" \
  -F "message=jenkins upload" \
  "https://deploygate.com/api/users/ユーザ名/apps"

アプリトークンはDeployGateのアカウントページから確認してください。
f:id:peachtea_tom:20200615005638p:plain
こちらのシェルスクリプトをbuild.shの最後に追加 or Jenkinsのシェル実行に追加することで
ビルドされたipaをDeployGateにアップするまでを自動で行うことが出来ます。
f:id:peachtea_tom:20200615005909p:plain

ここまで設定しておけば、Jenkinsのビルドを押すだけでDeployGateにアップロードまでが自動化されるので端末確認までが非常に楽になると思います。

【Jenkins】ipaを自動生成する②(mac/Jenkins/Unity/GitHub/DeployGate)

概要

Jenkinsビルド→ipa作成までを自動で行えるようにする
今回は、Jenkinsビルド→Unityビルド(Xcode生成)まで
Jenkinsのセットアップは前回の記事
peachtea-tom.hatenablog.com
を参照

環境

Unity2019.3.13f1
Xcode 11.4.1

手順概要

  1. Unityビルド処理の作成:shellスクリプトからUnityビルドするC#スクリプトを作成
  2. ビルド呼び出し処理の作成:Unityのビルド関数を呼ぶshellスクリプトを作成
  3. Jenkinsの設定:Jenkinsから該当のshellスクリプトを実行

Unityビルド処理の作成

public class BuildROM {

	// ビルド対象とするシーン
	static readonly string[] BUILD_SCENES = {
		"./Assets/main.unity"
	};

	// 出力先
	static readonly string PRODUCT_PATH = "Product";
	// プロビジョニングファイルUUID
	static readonly string PROVISIONING_PROFILE_ADHOC = "11111111-2222-3333-4444-55555555555";
	static readonly string PROVISIONING_PROFILE_APPSTORE = "6666666-7777-8888-9999-0000000000";
	public static void BatchBuild(){

#if UNITY_IOS
		if( is_app_store_build ) {
			PlayerSettings.iOS.iOSManualProvisioningProfileID = PROVISIONING_PROFILE_APPSTORE;
		} else {
			PlayerSettings.iOS.iOSManualProvisioningProfileID = PROVISIONING_PROFILE_ADHOC;
		}
#endif
		// ビルド
		var report = BuildPipeline.BuildPlayer( BUILD_SCENES, PRODUCT_PATH, BuildTarget.iOS, BuildOptions.None );
		if( report.summary.result == UnityEditor.Build.Reporting.BuildResult.Succeeded ){
			Debug.Log("[BUILD SUCCESS]");
		}else{
			Debug.LogError("[BUILD FAILED]" + report.summary );
		}
	}
}

BUILD_SCENES
PROVISIONING_PROFILE_ADHOC
PROVISIONING_PROFILE_APPSTORE
これらは適宜自分のプロジェクトに合わせて変更してください。
プロビジョニングのUDIDは
hogehoge.mobileprovision
サクラエディタなりで開き、UUIDのkeyに設定されている文字列を指定します。

Unity PlayerSettingsの設定

f:id:peachtea_tom:20200607212716p:plain
Bundle Identifier:アプリのユニークなIDを設定(任意です)
Signing Team ID:プロビジョニングファイルに記載されているTeamIDを入力します。
Automatically Sign:チェックを外します。

シェルスクリプトからUnityビルド処理を実行

下記のシェルスクリプトをプロジェクトフォルダ内に入れておく。
今回はProjectフォルダのAssetsと同階層にBuildSettingsというフォルダを作成し
その中に、build.sh(下記シェルを記載したファイル)を作成

UNITY_APP_PATH="/Applications/Unity/Hub/Editor/2019.3.13f1/Unity.app/Contents/MacOS/Unity"
PROJECT_PATH=$WORKSPACE
UNITY_EDITOR_LOG_PATH=$WORKSPACE/build.log

$UNITY_APP_PATH -batchmode -username ここにユーザ名 -password ここにパスワード -quit -logFile $UNITY_EDITOR_LOG_PATH -projectPath $PROJECT_PATH -executeMethod BuildROM.BatchBuild 

cat $UNITY_EDITOR_LOG_PATH

Jenkinsからbuild.shを実行

今回はGitHubを使っているのでソースコード管理をGitに設定します。
f:id:peachtea_tom:20200607214734p:plain
リポジトリのURLやアカウントは適宜変更してください。

次にビルドの設定を行います。
f:id:peachtea_tom:20200607214852p:plain
ビルド → ビルド手順の追加 → シェルの実行を追加
画像のようにbuild.shを呼び出す処理を作成する。
jenkinsからbuild.shを呼び出す際に権限がないとエラーが出ることがあるので権限を追加しておく
> chmod 755 ${WORKSPACE}/BuildSettings/build.sh

まとめ

Jenkins → shell →Unityビルド → xcodeプロジェクト生成
までが出来るようになります。
次回はxcodeプロジェクトからipa作成までの流れを記載します。
乞うご期待!(2020/6/14作成予定)

【Jenkins】ipaを自動生成する①(mac/Jenkins/Unity/GitHub/DeployGate)

概要

Jenkinsビルド→ipa作成までを自動で行えるようにする
今回は、Jenkinsのセットアップまで。
Qiitaやブログを漁ってみたけれど、バージョンが違ったりで躓くことがあったので
一番手軽であろう手順を残しておきます。
(2020/05/31)

補足:細かい説明は省いているので、
とりあえずmacでJenkinsをセットアップしたい。
という方向けにやることだけをざっとまとめて書いていますのであしからず。。

Jenkinsセットアップ

今回はMacのパッケージマネージャ
Homebrew(ホームブルー)
を使う方法で進める

Homebrewのインストール

上記公式サイトにあるように下記のスクリプトをターミナルに貼り付けて実行するのみ。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

ちなみにターミナルは、
Applications/Utility/Terminal
※アプリケーション/ユーティリティ/ターミナル 
から実行できる。

OpenJDK8のインストール

Jenkinsに対応しているバージョンのJDKを入れる必要がある。
※2020/5月時点ではjdk8

$ brew tap adoptopenjdk/openjdk
$ brew cask install adoptopenjdk8

Jenkinsのインストール

$ brew install jenkins

Jenkinsの起動

$ brew services start jenkins

Jenkinsが軌道出来たら、safari等でURL欄に下記を入力
> localhost:8080
初期パスワードの入力を求められるので下記コマンドで確認

cat /Users/{アカウント名}/.jenkins/secrets/initialAdminPassword

入力後、プラグインのインストール画面の確認が出るので
左のデフォルトセット(Install suggested plugins)をクリック。
インストールが終わればJenkinsの画面が立ち上がる…はず。

まとめ

次回はJenkinsビルドからUnityビルド(XcodeProject生成)までの流れを記載します。
peachtea-tom.hatenablog.com

【Unity】Coroutine管理システム?作ってみた

github.com

概要

  • 全コルーチンの管理、制御が可能。

 自前で回しているので、何が動いているのかの確認も勿論可能ですし、一時停止といったことも可能になっています。
 f:id:peachtea_tom:20200524135401p:plain

  • 速い&即時実行。

 UnityのStartCoroutineと違い、フレームロスなく関数実行時に即実行されます。また処理速度も高速になっています。
 f:id:peachtea_tom:20200524135426p:plain
 f:id:peachtea_tom:20200524135433p:plain

  • Editorでもそのまま動く。

 Editorスクリプトからも処理を変えずにそのままコルーチンの実行が可能です。

詳細はReadmeを。

 Readme

CoTween(NEW)

CoroutineDispatcher依存のTween処理を追加しました。
iTweenDoTweenのようなものを標準装備にしておきたく、導入しました。
ポイントはCoroutineDispatcherの特性を活かし、Editor中(非PlayMode)でも動作確認ができるところです。
演出調節するたびに実行して確認という時間を省きたく。。
youtu.be
※見づらいですが、左上の実行モードがOFFなのが確認できると思います。

使い方の説明とかはいずれ…。

【Unity】UnityCollaborate 使い方

個人製作するときに楽なバージョン管理システムって何だろう。とふと思い。
今までは、Subversionを主に使ってました。gitはちょこっとだけ。
個人製作レベルのモノに対して、わざわざローカルにリポジトリ作ったり、仮想サーバー立てたりはちょっと手間だなあと思い、、
そういえばUnity Collaborateをちゃんと触ったことがなかったので、使ってみました。

Unity Collaborate

unity3d.com

  • Unity専用(特化した?)のバージョン管理システム
  • Unity上でコミットやRevertが可能。変更の可否もProjectビューで見れる
  • ただし無料ではチームメンバーは3人、ストレージは1GB

 ※ストレージ容量はユーザー単位になっているようなので、複数プロジェクト持っているとすぐ一杯になる懸念

  • Unity Cloud Buildと連携しているので、ライセンスがあればビルドまで楽にできる

Unity Collaborateの始め方

1. Unity Serviceのプロジェクト設定
 Unity上部メニューにある
 Window > General > Servicesを選択
 f:id:peachtea_tom:20200512224315p:plain
 ここでプロジェクトの作成 or 既存プロジェクトとの紐づけが出来ます。
 初めてであればプロジェクト名をつけて作成をします。

2.Unity Collaborateの設定
 Unityのメニュー内にCollaborateボタンが表示されるのでStartnow!を押下します。
 f:id:peachtea_tom:20200512224812p:plain
 これでUnityCollaborateが有効になります。
 初めて有効にしたときには、自動で初期設定等がパブリッシュ(コミット)されます。
 変更を加えた際には、こちらのボタンを押下することで変更内容をパブリッシュすることが出来ます。

3. Collaborateボタンが使えないとき
 プロジェクトを設定してもCollaborateボタンが使えないことがあるようでした。
 そんな時は改めて、Window > General > Servicesを選択し、各種サービスの設定を確認します。
 f:id:peachtea_tom:20200512225122p:plain
 CollaborateがOFFになっている可能性があるので、これをONにします。
 f:id:peachtea_tom:20200512225130p:plain
 ONにできないよ!と謎のエラーが出たことがありましたが、2,3回タブのONを繰り返したらONにできました。
 ※不思議

使ってみた所感

  • パブリッシュしながらも作業を進められるのは良い

 f:id:peachtea_tom:20200512225040p:plain
 こちらがパブリッシュ中の画面になります。
 バックグラウンドで処理されているので、アップしている最中もEditorで作業が出来ました。
 作業が止まらなくていいですね。

  • 変更履歴がEditor上で一目でわかる

 f:id:peachtea_tom:20200512225053p:plain
 自分がどこをいじったのかがEditor上ですぐ見れるのはいい点です。
 いじったつもりのないところはここで右クリック > Collaborate > Revertで戻すことも出来ます。
 まとめてパブリッシュするとうっかりあげちゃったパターンがあるので、逐一見えるのは大事ですね。

  • Unity立ち上げ時に更新チェックが走り時間がとられる

 プロジェクトを開いたときに"Cheking for Changing"というプログレスバーが表示される。
 これがまあまあ時間がかかりちょっと億劫でした。
 プロジェクトサイズが大きくなったらだいぶ時間かかるんじゃないかなあ…。

結論

 実際のプロジェクトで使うなら、ライセンスは購入したほうが良いと思う。
 世間一般の馴染みやすさでいうと、SubversionやGitを頼るのがベターかなと感じました。
 逆に個人製作でやるレベルであれば、1GB制限やチーム人数制限はそこまで大したことではないので
 気軽にバージョン管理するにはいいかもなと思いました。

 まだ触って間もないので、もう少し使い倒してみようと思います。
 実際競合した場合どうなるんだろう。とかは個人では測れないので難しいところですが。

【Unity】SoftBodyを作ってみた(NVIDIA Flex for Unity/ObiSoftBody)

柔らかいモノを作りたい

男たるもの誰しもが1度は考えるはずである。
ということで、UnityでSoftBodyを実装するにはどうすればいいのかを調べてみました。
今回はスマホをターゲットに検討

ざっと調べた感じの選択肢

  • NVIDIA Flex for Unityを使う
  • ObiSoftBodyを使う
  • Clothを使う
  • 自前で頑張る

今回はこの2つを触りました。
NVIDIA Flex for Unity/ObiSoftBody

NVIDIA Flex for Unity

NVIDIA FleX | NVIDIA Developer

  • 流体
  • 軟体

等の動きをランタイム上でシミュレーション出来るミドルウェア(無料!)
youtu.be

使い方は下記のサイトを参考にさせて頂きました。
めちゃ分かりやすかったです。ありがとうございます。
qiita.com

所感

だいぶいい感じ!これが無料なのか…と心躍りました。
が、、、Android/iOSに対応しておらず、自分の目的が果たせないことに実装してから気づきました。
よくよく見たら公式サイトにサポートプラットフォームはWindows/Macってありました。。

Obi SoftBody

assetstore.unity.com
youtu.be
有料ですが、半額セールの時に購入して試してみました。
使い方は公式ドキュメントを参照
Obi Physics for Unity - Rope Setup

所感

基本的な構成はNVIDIA Flexと似ているのでNVIDIA Flexを触った後だと入り込みやすかったです。
AssetStoreの紹介動画には柔らかいモノが載っていなかったので不安でしたが
サンプルシーンにはちゃんと入っていました。

f:id:peachtea_tom:20200510045409p:plain
Boll Pool
GalaxyS8での検証になりますが、数個球を出しても60FPSは維持できてたので処理負荷も最適化されていると思われます。
※全てCPUで処理をしているとのこと。
http://obi.virtualmethodstudio.com/tutorials/index.html

公式FAQ
Q.Does Obi run in the GPU?
A.No. The core physics solver runs 100% in the CPU. Only rendering is done using the GPU.

Q.Can Obi be regarded as a fast simulator, for CPU standards?
A.Yes. It is extremely well optimized. A task-based multithreading scheme is used to split workload into evenly sized chunks. All the math-heavy routines are SIMD accelerated.

iOSはまだ試せていないですが、せっかく購入したのでこれで色々やってみようと思います。
球をぶつけて物体を凹ませることも出来るのでゲームの表現幅が広がりますね。
youtu.be

その他

Obi SoftBodyの他にもObiシリーズが出ているようで

  • Obi Rope(ロープ表現)

 Obi Rope | Physics | Unity Asset Store

  • Obi Cloth(布表現)

 Obi Cloth | Physics | Unity Asset Store

  • Obi Fluid(流体表現)

 Obi Fluid | Physics | Unity Asset Store
といくつか出ているようです。
紹介動画を見る限りどれも面白そう!機会を見つけて触ってみようと思います。
アップデートも細かく行われているようなのでこの点も安心できました。