Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[Unity] よーし、パパ Cinemachineを2Dプロジェクトに適応して遊んじゃうぞー...
Search
lycoris102
July 20, 2019
Technology
0
7.1k
[Unity] よーし、パパ Cinemachineを2Dプロジェクトに適応して遊んじゃうぞー / Adapt cinemchine to 2D project
Unity++ 〜ショートセッション勉強会 presented by Unity部〜
https://meetup.unity3d.jp/jp/events/1112
lycoris102
July 20, 2019
Tweet
Share
More Decks by lycoris102
See All by lycoris102
コンプリボドゲ2024 ジグザグザクザク 遊び方
lycoris102
0
100
イラレの生成AI + Unity (VectorGraphics) で遊びたい! / Illustrator Generative AI and Unity Vector Graphics
lycoris102
0
500
⌨️ a Key is Landmine 💣のデザイン / Design of "a Key is Landmine"
lycoris102
0
150
[Unity] プレビュー版 Cinemachine 3.0 紹介
lycoris102
1
1.5k
Unityとキャリアとコミュニティの話 / Unity, Carrier, Community
lycoris102
1
170
GOOLF!のデザイン⛳️ / Design of GOOLF!
lycoris102
0
620
[Unity] Mobile3D(2D)テンプレートとモバイル向けパッケージ紹介 / Mobile templates and packages for mobile
lycoris102
0
9.1k
期待値と言語化の話 / Verbalize Expectations
lycoris102
1
4.7k
Sweet^2 Honey Hive
lycoris102
2
1.4k
Other Decks in Technology
See All in Technology
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
110
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
180
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
160
AI時代のデータセンターネットワーク
lycorptech_jp
PRO
1
280
Oracle Cloud Infrastructure:2024年12月度サービス・アップデート
oracle4engineer
PRO
0
160
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
180
Turing × atmaCup #18 - 1st Place Solution
hakubishin3
0
470
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
160
C++26 エラー性動作
faithandbrave
2
690
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
280
podman_update_2024-12
orimanabu
1
260
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
95
5.2k
Speed Design
sergeychernyshev
25
670
The Cost Of JavaScript in 2023
addyosmani
45
7k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
A better future with KSS
kneath
238
17k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Transcript
Unity++ ショートセッション勉強会 presented by Unity部 よーし、パパ 青木とと@lycoris102 Cinemachineを 2Dプロジェクトに 適応して遊んじゃうぞー
2 このスライドはgifが多用されていますが SpeakerDeckでは再生されません 諸注意 後日 UnityLearningMaterials にて 動画が公開される予定です またQiitaに同一の内容の掲載も考えております \ごめんなさい/
だれ? 3 @lycoris102 青木とと ねんれい:29 しごと: 株式会社キッズスター かぞく: 妻と3歳の息子 ・Unityアンバサダー
・Gotanda.unity ・UnityDesigner’sCafe ・勉強会主催/サポート ・ゆるふわゲームクリエイター
だれ? 4 #unity1week でゲームを作るのも好きです https://unityroom.com/users/lycoris102
5 2Dプラットフォーマー 前提 今日のお題
6 このアセットのサンプルプロジェクトを使います 元々はインク効果/飛沫表現を実現するためのアセット 前提
7 本来はこういうことができるアセット 前提 Qiitaで紹介してます: [Unity] StainSystemを使用してオブジェクトにインク効果を適用する
8 突然ですが…… 「カメラをプレイヤーに追従させる処理」 どう実装しますか? カメラをプレイヤーに追従させる
9 カメラとプレイヤーを親子関係にする カメラをプレイヤーに追従させる
10 (Fixed)Updateでtransform.positionを 追従させる もしくは カメラをプレイヤーに追従させる
11 ParentConstrainを使う もしくは カメラをプレイヤーに追従させる 指定したTransformに追従する / 任意のオフセットも設定可能で親子関係にしたくないときに使う
12 どれも 「カメラをプレイヤーに追従させる」 という要件を満たす!! やったー カメラをプレイヤーに追従させる
13 どれも 「カメラをプレイヤーに追従させる」 という要件を満たす!! うーん…… もっといい感じに 動かしてほしいですね 上司 …… カメラをプレイヤーに追従させる
14 「いい感じ」とは? いい感じなカメラワーク
15 「いい感じ」の一例 「遅延移動したりプレイヤーの先読みしたい」 「特定の範囲から外を見せたくない」 「ステージ間の移動に対応してほしい」 「複数のターゲットを画面に収めてほしい」 「カメラを揺らしたい」 ……etc いい感じなカメラワーク よくばりセット
16 「いい感じ」の一例 「遅延移動したりプレイヤーの先読みしたい」 「特定の範囲から外を見せたくない」 「ステージ間の移動に対応してほしい」 「複数のターゲットを画面に収めてほしい」 「カメラを揺らしたい」 ……etc Cinemachineを 使って
立ち向かっていくぞ! いい感じなカメラワーク
17 Cinemachineとは? Cinemachineについて
18 https://unity.com/ja/unity/features/editor/art-and-design/cinemachine Unity2017にてリリースされた 新しいカメラシステム Cinemachineについて
19 現在はPackageManager経由で インストールする Cinemachineについて
20 いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい いい感じ(1) 遅延移動したり プレイヤーの先読みをしたい Cinemachine/Bodyの設定で解決する
21 “VirtualCamera”というコンポーネントで カメラを操作する GameObject Cameraコンポーネント VirtualCameraコンポーネント 座標や角度/拡縮を操作 いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
22 Cinemachine -> Create 2D Camera で2D用の設定を適応した VirtualCameraを追加する VirtualCameraの設定のプリセットが色々用意されています いい感じ(1)
遅延移動したりプレイヤーの先読みをしたい
23 ChinemachineVirtualCameraでは どういう風にカメラを動かすかを設定できる いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい Follow どのオブジェクトを追従対象とするか Body カメラをどのように移動させるか
24 2D用の設定では BodyがFraming Transposerに設定 Do nothing カメラの移動は行わない Framing Transposer 2D用にXY平面での移動に特化した設定
Hard Lock To Target Tragetの座標と完全に同期する Orbital Transposer ターゲティング+入力によるカメラ移動 Tracked Dolly 指定したパスに沿ってカメラ移動する Transposer Tragetに追従する いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
25 OrthographicSizeを調整して Followにオブジェクトを追加することで もういい感じにカメラ追従ができる 完全にプレイヤーに同期せず、ちょっと遅延追従している感じがそれっぽい いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
26 Framing Transposerは設定できる項目が 多く細かい調整が可能 Lookahead ターゲットの動きに基づく先読み移動の設定 Damping カメラの反応/数字が大きいほど反応が遅い ScreenX/Y どの位置にターゲットを配置するか
DeadZone 範囲内にターゲットがいる時カメラ移動しない SoftZone 徐々にカメラ移動させる範囲 https://docs.unity3d.com/Packages/
[email protected]
/manual/ CinemachineBodyFramingTransposer.html いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
27 Lookahead ターゲットの動きに基づく先読み移動の設定 Time: 0(sec) 先読みをしていない状態 いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
28 Lookahead ターゲットの動きに基づく先読み移動の設定 Time: 1(sec) Smooth: 3(Min) 1秒後にいるであろう位置を先読みして移動 いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
29 Lookahead ターゲットの動きに基づく先読み移動の設定 Time: 1(sec) Smooth: 30(Max) 滑らかな動きになるが 予測が遅れる TimeとSmooth小さい値からすこしずつ調整する
いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
30 ScreenX/Y どの位置にターゲットを配置するか いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
31 Damping カメラの反応/数字が大きいほど反応が遅い 次に紹介するSoftZoneに侵入した時のカメラの移動に影響 いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
32 DeadZone 範囲内にターゲットがいる時カメラ移動しない SoftZone 徐々にカメラ移動させる範囲 4PGU;POF %FBE;POF ΧϝϥҠಈ ͠ͳ͍ λʔήοτΛऩΊΔํʹঃʑʹै
͜ͷൣғΑΓ֎ʹग़Α͏ͱ͢Δͱແ༻ͰΧϝϥै SoftZoneにおけるカメラの移動スピードはDumpingの設定に依存する いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
33 2Dに特化したカメラ追従機能 FramingTransposerの設定を調整して 自分だけのいい感じカメラを作ろう! いい感じ(1) 遅延移動したりプレイヤーの先読みをしたい
34 いい感じ(2) 特定の範囲から外を見せたくない いい感じ(2) 特定の範囲から外を見せたくない Cinemachineの拡張機能: CinemachineConfinerを使って解消する
35 壁や背景の画像を引き延ばして解決する手もあるけど素材によっては厳しいことも 壁の外/背景の上下などが映るとダサい こことか ここ いい感じ(2) 特定の範囲から外を見せたくない
36 Cinemachineの拡張機能を使う CinemachineCameraOffset 各種処理の後にオフセットを付けられる CinemachineCollider カメラがColliderに衝突した時の設定 CinemachineConfiner 範囲外を描画しないようにする CinemachineFollowZoom ターゲットサイズをキープするようFOV調整
CinemachineStoryboard カメラの出力の上に画像を被せる CinemachineExtension (Cinemachine拡張のBaseClass) CinemachineImpulseListener 振動信号を受け取り、カメラシェイクする https://docs.unity3d.com/Packages/
[email protected]
/api/ いい感じ(2) 特定の範囲から外を見せたくない
37 CinemachineConfiner 範囲外を描画しないようにする PolygonCollider2Dか CompositeCollider2Dを指定する いい感じ(2) 特定の範囲から外を見せたくない
38 CompositeCollider2Dを使う 親に設定すると子のColliderをマージしてくれる君 ・子のColliderには「Used by Composite」のチェックを入れる ・今回は親のRigidbody2Dの「Simulated」のチェックを外す ・CompositeColliderのGeometryTypeを「Polygon」にする いい感じ(2) 特定の範囲から外を見せたくない
39 CinemachineConfinerの BoundingShape2DにColliderを設定する カメラが追従しないだけで、普通に領域外に出れてしまうので注意 いい感じ(2) 特定の範囲から外を見せたくない
40 いい感じ(3) ステージ間の移動に対応してほしい いい感じ(3) ステージ間の移動に対応してほしい 複数のバーチャルカメラを切り替えて対応する
41 複数のバーチャルカメラを切り替えたり ブレンドすることも可能 GameObject Camera CM vcam1 CM vcam2 VirtualCameraBrain
どのVirtualCameraがActiveか 切り替え時にどうブレンドするか VirtualCameraBrainはVirualCameraを生成した時点で自動的にアタッチされる いい感じ(3) ステージ間の移動に対応してほしい 基本Cameraに適応されるVirtualCameraは1つだけど
42 いい感じ(3) ステージ間の移動に対応してほしい 今回はステージごとに異なる ChinemachineConfinerを適応した VirtualCameraを2つ用意 次のステージに侵入したらVirtualCameraを切り替える
43 いい感じ(3) ステージ間の移動に対応してほしい LiveなVirtualCamera Disabled ではない VirtualCamera の中で (statusが Standby
になっているもの) 最もPriorityが高い1つが採択されてる
44 いい感じ(3) ステージ間の移動に対応してほしい ざっくりScriptで切り替える方法の一例 OnTriggerEnter2D() 時に 現状のVirtualCameraのPriorityを0に 切り替え先のVirtualCameraのPriorityを int.MaxValue に
https://gist.github.com/lycoris102/f63409f198193908c7f5c6267a0c7a1b
45 いい感じ(3) ステージ間の移動に対応してほしい 任意のColliderに先ほどのScriptをアタッチする 切り替え先のVirtualCameraを指定して実行する
46 いい感じ(3) ステージ間の移動に対応してほしい VirtualCameraBrainで切り替わり方を指定 defaultだけでなく特定の2VC間での切り替わり方も指定可能 (CustomBlend) Cutの例
47 いい感じ(3) ステージ間の移動に対応してほしい Timelineを使っても切り替え可能 CinemachieTrackを使用する カットシーンを作る場合にはこちらの方が便利
48 いい感じ(4) 複数のターゲットに対応してほしい いい感じ(4) 複数のターゲットに対応してほしい CinemachineTargetGroupコンポーネントを使用する
49 いい感じ(4) 複数のターゲットに対応してほしい 複数の描画対象を指定した上で 両方がいい感じに収まるように 描画範囲を拡大縮小したい 遠い 近い 2Dプラットフォーマーというより格闘ゲームでよく見るアプローチ 縮小する
拡大する
50 いい感じ(4) 複数のターゲットに対応してほしい CinemachineTargetGroupコンポーネント 複数のTransformを指定することができる
51 いい感じ(4) 複数のターゲットに対応してほしい パラメータで見せ方を調整できる Weight 平均化時の重み(画面を占める比率) Radius アイテムの大きさの半径
52 いい感じ(4) 複数のターゲットに対応してほしい VirtualCameraのFollowに CinemachineTargetGroupを指定する
53 いい感じ(4) 複数のターゲットに対応してほしい GroupFramingMode 縦軸/横軸/両方のいずれをグループ化 GroupFramingSize 画面に対するグループの大きさの比率 MinimumOrthoSize 最拡大時のOrthographicSize MaximumOrthoSize
最縮小時のOrthographicSize 画面の拡大縮小の度合い等 VirtualCameraのBodyにて調整できる CameraのProjectionがPerspectiveの時は項目が異なる
54 いい感じ(5) カメラシェイクに対応してほしい いい感じ(5) カメラシェイクに対応してほしい CinemachinepulseListener/Sourceにて振動を送受信する
55 いい感じ(5) カメラシェイクに対応してほしい カメラを揺らしたい!! 適切な場面で使うと気持ちのいい”めまい”を提供できる!
56 Cinemachineの拡張機能を使う CinemachineCameraOffset 各種処理の後にオフセットを付けられる CinemachineCollider カメラがColliderに衝突した時の設定 CinemachineConfiner 範囲外を描画しないようにする CinemachineFollowZoom ターゲットサイズをキープするようFOV調整
CinemachineStoryboard カメラの出力の上に画像を被せる CinemachineExtension (Cinemachine拡張のBaseClass) CinemachineImpulseListener 振動信号を受け取り、カメラシェイクする https://docs.unity3d.com/Packages/
[email protected]
/api/ いい感じ(5) カメラシェイクに対応してほしい
57 CinemachineImpulseListener 振動信号を受け取り、カメラシェイクする いい感じ(5) カメラシェイクに対応してほしい ChannelMask 特定の信号のみ受け取れるようにする Gain 信号の増幅/減衰(大きいほど揺れる) Use2DDistance
距離計算にZ軸を無視(2Dゲーム用) ChinemachineExtension.PostPipelineStageCallBackにて実行される (他の座標計算等の後に実行される)
58 ListnerはSourceから信号を受け取ってから 画面を振動させる CinemachineImpulseListener CinemachineImpulseSource いい感じ(5) カメラシェイクに対応してほしい Scriptで信号を送る ChinemachineCollisionImpulseSource 継承
衝突時に信号を送る
59 信号の形状や時間による減衰 距離に応じた挙動を設定することができる CinemachineImpulseSource いい感じ(5) カメラシェイクに対応してほしい https://docs.unity3d.com/Packages/
[email protected]
/manual/ CinemachineImpulseSourceOverview.html 設定項目の詳細はドキュメントに結構丁寧に記載されてます
60 GenerateImpulse() / GenerateImpulseAt() で任意のタイミングで信号を送ることも可能 CinemachineImpulseSource いい感じ(5) カメラシェイクに対応してほしい CinemachinepulseListener/Sourceにて振動を送受信する GenerateAt()
は発生源/衝撃の方向 強さを引数に設定できる
61 いい感じ(5) カメラシェイクに対応してほしい ChinemachineCollisionImpulseSource アタッチすると衝突時に信号を送るようになる
62 いい感じ(5) カメラシェイクに対応してほしい Collisionで揺らすサンプル
63 「いい感じ」の一例 「遅延移動したりプレイヤーの先読みしたい」 「特定の範囲から外を見せたくない」 「ステージ間の移動に対応してほしい」 「複数のターゲットを画面に収めてほしい」 「カメラを揺らしたい」 ……etc まとめ
64 「いい感じ」の一例 「遅延移動したりプレイヤーの先読みしたい」 「特定の範囲から外を見せたくない」 「ステージ間の移動に対応してほしい」 「複数のターゲットを画面に収めてほしい」 「カメラを揺らしたい」 ……etc Cinemachineを 使って解決できた!
まとめ
65 他に出来ること盛りだくさん! PostProcessingを入れて CinemachinePostProcessing でVC毎にポストエフェクト Noiseを設定して 自然な揺らぎを付ける Unityカメラを複数用意して ビューポートで画面分割 それぞれのカメラで別なキャラ追従
まとめ
66 他に出来ること盛りだくさん! まとめ 合わせ技!
67 困った時に見るところ まとめ Cinemachine Documentation https://docs.unity3d.com/Packages/
[email protected]
/manual/index.html
68 困った時に見るところ まとめ テラシュールブログ(Cinemachineカテゴリ) http://tsubakit1.hateblo.jp/ 今回触れた内容もだいたい載っています///
69 みんなも Cinemachineで 遊ぼう! まとめ
70 時間あれば告知 Gotanda.unity / Roppongi.unity UnityXXX完全に理解した勉強会 合同でUniteの前々夜祭としてLT大会します! 8/2(金) 12:00~ 募集開始です!
Unity++ ショートセッション勉強会 presented by Unity部 よーし、パパ 青木とと@lycoris102 Cinemachineを 2Dプロジェクトに 適応して遊んじゃうぞー