Suche senden
Hochladen
OpenCVで作るスタンプAR
•
0 gefällt mir
•
1,697 views
T
Takashi Yoshinaga
Folgen
6/28にももち浜TECHカフェで開催したハンズオンの資料
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 163
Empfohlen
OpenCV/ARCore/Unityで作る塗り絵AR
OpenCV/ARCore/Unityで作る塗り絵AR
Takashi Yoshinaga
はじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTracking
Takashi Yoshinaga
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
OpenCVでつくろうARスタンプアプリ in 熊本
OpenCVでつくろうARスタンプアプリ in 熊本
Takashi Yoshinaga
UniTask入門
UniTask入門
torisoup
HoloLens で OpenCV をどう使うか レーザーポインター 認識で試してみた
HoloLens で OpenCV をどう使うか レーザーポインター 認識で試してみた
Franz Weitl
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
Structure from Motion
Structure from Motion
Ryutaro Yamauchi
Empfohlen
OpenCV/ARCore/Unityで作る塗り絵AR
OpenCV/ARCore/Unityで作る塗り絵AR
Takashi Yoshinaga
はじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTracking
Takashi Yoshinaga
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
OpenCVでつくろうARスタンプアプリ in 熊本
OpenCVでつくろうARスタンプアプリ in 熊本
Takashi Yoshinaga
UniTask入門
UniTask入門
torisoup
HoloLens で OpenCV をどう使うか レーザーポインター 認識で試してみた
HoloLens で OpenCV をどう使うか レーザーポインター 認識で試してみた
Franz Weitl
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
UnityTechnologiesJapan002
Structure from Motion
Structure from Motion
Ryutaro Yamauchi
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
MRTK3を調べてみた
MRTK3を調べてみた
Takahiro Miyaura
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
小林 信行
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
Deep Learning JP
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
Unity Technologies Japan K.K.
【Unite Tokyo 2018】ユニティちゃんトゥーンシェーダー2.0使いこなしスペシャル ~こだわりの活用法を紹介します!~
【Unite Tokyo 2018】ユニティちゃんトゥーンシェーダー2.0使いこなしスペシャル ~こだわりの活用法を紹介します!~
Unity Technologies Japan K.K.
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
Unityではじめるオープンワールド入門 アーティスト編
Unityではじめるオープンワールド入門 アーティスト編
Unity Technologies Japan K.K.
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
Deep Learning JP
ゲームAI入門(後半)
ゲームAI入門(後半)
Youichiro Miyake
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
UnityTechnologiesJapan002
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
Makoto Goto
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
Haruki Yano
async/await のしくみ
async/await のしくみ
信之 岩永
Unity dojo amplifyshadereditor101_jpn-jp
Unity dojo amplifyshadereditor101_jpn-jp
小林 信行
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
Unity Technologies Japan K.K.
OpenCVとARCoreで作るスタンプAR in 宮崎
OpenCVとARCoreで作るスタンプAR in 宮崎
Takashi Yoshinaga
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
Takashi Yoshinaga
Weitere ähnliche Inhalte
Was ist angesagt?
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
MRTK3を調べてみた
MRTK3を調べてみた
Takahiro Miyaura
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
小林 信行
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
Deep Learning JP
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
Unity Technologies Japan K.K.
【Unite Tokyo 2018】ユニティちゃんトゥーンシェーダー2.0使いこなしスペシャル ~こだわりの活用法を紹介します!~
【Unite Tokyo 2018】ユニティちゃんトゥーンシェーダー2.0使いこなしスペシャル ~こだわりの活用法を紹介します!~
Unity Technologies Japan K.K.
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
Unityではじめるオープンワールド入門 アーティスト編
Unityではじめるオープンワールド入門 アーティスト編
Unity Technologies Japan K.K.
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
Deep Learning JP
ゲームAI入門(後半)
ゲームAI入門(後半)
Youichiro Miyake
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
UnityTechnologiesJapan002
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
Makoto Goto
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
Haruki Yano
async/await のしくみ
async/await のしくみ
信之 岩永
Unity dojo amplifyshadereditor101_jpn-jp
Unity dojo amplifyshadereditor101_jpn-jp
小林 信行
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
Unity Technologies Japan K.K.
Was ist angesagt?
(20)
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
MRTK3を調べてみた
MRTK3を調べてみた
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
[DL輪読会]NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unite Tokyo 2018】ユニティちゃんトゥーンシェーダー2.0使いこなしスペシャル ~こだわりの活用法を紹介します!~
【Unite Tokyo 2018】ユニティちゃんトゥーンシェーダー2.0使いこなしスペシャル ~こだわりの活用法を紹介します!~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
Unityではじめるオープンワールド入門 アーティスト編
Unityではじめるオープンワールド入門 アーティスト編
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
ゲームAI入門(後半)
ゲームAI入門(後半)
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
それを早く言ってよ〜パフォーマンスを出すエフェクト制作のポイント
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
モバイルアプリにおけるアーティストフレンドリーな水面表現戦略
async/await のしくみ
async/await のしくみ
Unity dojo amplifyshadereditor101_jpn-jp
Unity dojo amplifyshadereditor101_jpn-jp
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
Ähnlich wie OpenCVで作るスタンプAR
OpenCVとARCoreで作るスタンプAR in 宮崎
OpenCVとARCoreで作るスタンプAR in 宮崎
Takashi Yoshinaga
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
Takashi Yoshinaga
Nreal Lightハンズオン
Nreal Lightハンズオン
Takashi Yoshinaga
UnityとVuforiaで始めるAR開発
UnityとVuforiaで始めるAR開発
Takashi Yoshinaga
KinectでAR空間に入り込もう
KinectでAR空間に入り込もう
Takashi Yoshinaga
ARコンテンツ作成勉強会 in 宮崎: はじめようARCore
ARコンテンツ作成勉強会 in 宮崎: はじめようARCore
Takashi Yoshinaga
AI x WebAR! MediaPipeの顔認識を使ってみよう!
AI x WebAR! MediaPipeの顔認識を使ってみよう!
Takashi Yoshinaga
ノンプログラミングで始める AR 開発入門
ノンプログラミングで始める AR 開発入門
Takashi Yoshinaga
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
Yamato Honda
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
Takashi Yoshinaga
オープンソースで始めるAR/VR開発
オープンソースで始めるAR/VR開発
Takashi Yoshinaga
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
Takashi Yoshinaga
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
Takashi Yoshinaga
はじめようArcore (修正版)
はじめようArcore (修正版)
Takashi Yoshinaga
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
Takuma Morikawa
VFXGraphでつくろう素敵なARエフェクト In QBSLab on 2020.01.25
VFXGraphでつくろう素敵なARエフェクト In QBSLab on 2020.01.25
Shunsuke Ishimoto
第19回SOIL水曜セミナー:RGB-DカメラでAR空間に入り込もう
第19回SOIL水曜セミナー:RGB-DカメラでAR空間に入り込もう
Takashi Yoshinaga
Vue.js で XSS
Vue.js で XSS
tobaru_yuta
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへ
KinkumaDesign
Canvas勉強会
Canvas勉強会
Tsutomu Kawamura
Ähnlich wie OpenCVで作るスタンプAR
(20)
OpenCVとARCoreで作るスタンプAR in 宮崎
OpenCVとARCoreで作るスタンプAR in 宮崎
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
Nreal Lightハンズオン
Nreal Lightハンズオン
UnityとVuforiaで始めるAR開発
UnityとVuforiaで始めるAR開発
KinectでAR空間に入り込もう
KinectでAR空間に入り込もう
ARコンテンツ作成勉強会 in 宮崎: はじめようARCore
ARコンテンツ作成勉強会 in 宮崎: はじめようARCore
AI x WebAR! MediaPipeの顔認識を使ってみよう!
AI x WebAR! MediaPipeの顔認識を使ってみよう!
ノンプログラミングで始める AR 開発入門
ノンプログラミングで始める AR 開発入門
Unityのポストエフェクトで遊ぶ!
Unityのポストエフェクトで遊ぶ!
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
AI x WebAR MediaPipeの顔認識を使ってみよう! in 織りなすラボ
オープンソースで始めるAR/VR開発
オープンソースで始めるAR/VR開発
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
AI x WebAR: MediaPipeのハンドトラッキングを使ってみよう
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
はじめようArcore (修正版)
はじめようArcore (修正版)
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
VFXGraphでつくろう素敵なARエフェクト In QBSLab on 2020.01.25
VFXGraphでつくろう素敵なARエフェクト In QBSLab on 2020.01.25
第19回SOIL水曜セミナー:RGB-DカメラでAR空間に入り込もう
第19回SOIL水曜セミナー:RGB-DカメラでAR空間に入り込もう
Vue.js で XSS
Vue.js で XSS
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへ
Canvas勉強会
Canvas勉強会
Mehr von Takashi Yoshinaga
HoloLens2とMeta QuestではじめるWebXR
HoloLens2とMeta QuestではじめるWebXR
Takashi Yoshinaga
【準備編】OculusQuest/HoloLens2対応WebXR開発
【準備編】OculusQuest/HoloLens2対応WebXR開発
Takashi Yoshinaga
ARコンテンツ作成勉強会( #AR_Fukuoka )紹介
ARコンテンツ作成勉強会( #AR_Fukuoka )紹介
Takashi Yoshinaga
iPad LiDARでエンジニアカフェを3Dスキャン
iPad LiDARでエンジニアカフェを3Dスキャン
Takashi Yoshinaga
Web技術ではじめようAR/VRアプリ開発
Web技術ではじめようAR/VRアプリ開発
Takashi Yoshinaga
MRTKをNreal Lightに対応させてみた
MRTKをNreal Lightに対応させてみた
Takashi Yoshinaga
【準備編!】HoloLens 2/Oculus Quest対応WebXRハンズオン
【準備編!】HoloLens 2/Oculus Quest対応WebXRハンズオン
Takashi Yoshinaga
Holo-SDKハンズオン:はじめようヘッドトラッキングを用いた3D表現
Holo-SDKハンズオン:はじめようヘッドトラッキングを用いた3D表現
Takashi Yoshinaga
FUKUOKA Engineers Day 2021 発表資料:AR Fukuoka & HoloBox紹介
FUKUOKA Engineers Day 2021 発表資料:AR Fukuoka & HoloBox紹介
Takashi Yoshinaga
Voxon Photonics VX1で遊んでみた
Voxon Photonics VX1で遊んでみた
Takashi Yoshinaga
AR-Frame x AR.js入門
AR-Frame x AR.js入門
Takashi Yoshinaga
AI x WebXR: フェイストラッキングを用いた擬似3D表現を解説!
AI x WebXR: フェイストラッキングを用いた擬似3D表現を解説!
Takashi Yoshinaga
コロナ禍中のコミュニティ活動
コロナ禍中のコミュニティ活動
Takashi Yoshinaga
Project HoloBox
Project HoloBox
Takashi Yoshinaga
AR Fukuoka紹介2020
AR Fukuoka紹介2020
Takashi Yoshinaga
iPad LiDARで作ってみた in AR Fukuoka 忘年会2020
iPad LiDARで作ってみた in AR Fukuoka 忘年会2020
Takashi Yoshinaga
MRTKで始めるAR開発 (HoloLens 1 and 2, ARCore, ARkit)
MRTKで始めるAR開発 (HoloLens 1 and 2, ARCore, ARkit)
Takashi Yoshinaga
OSC2020 Fukuoka: インストールいらず、WebAR入門
OSC2020 Fukuoka: インストールいらず、WebAR入門
Takashi Yoshinaga
Oculus Quest 1&2 開発のはじめの一歩 with A-Frame WebVR
Oculus Quest 1&2 開発のはじめの一歩 with A-Frame WebVR
Takashi Yoshinaga
Spatial Copy & Paste @HoloLensゆるっとLT会
Spatial Copy & Paste @HoloLensゆるっとLT会
Takashi Yoshinaga
Mehr von Takashi Yoshinaga
(20)
HoloLens2とMeta QuestではじめるWebXR
HoloLens2とMeta QuestではじめるWebXR
【準備編】OculusQuest/HoloLens2対応WebXR開発
【準備編】OculusQuest/HoloLens2対応WebXR開発
ARコンテンツ作成勉強会( #AR_Fukuoka )紹介
ARコンテンツ作成勉強会( #AR_Fukuoka )紹介
iPad LiDARでエンジニアカフェを3Dスキャン
iPad LiDARでエンジニアカフェを3Dスキャン
Web技術ではじめようAR/VRアプリ開発
Web技術ではじめようAR/VRアプリ開発
MRTKをNreal Lightに対応させてみた
MRTKをNreal Lightに対応させてみた
【準備編!】HoloLens 2/Oculus Quest対応WebXRハンズオン
【準備編!】HoloLens 2/Oculus Quest対応WebXRハンズオン
Holo-SDKハンズオン:はじめようヘッドトラッキングを用いた3D表現
Holo-SDKハンズオン:はじめようヘッドトラッキングを用いた3D表現
FUKUOKA Engineers Day 2021 発表資料:AR Fukuoka & HoloBox紹介
FUKUOKA Engineers Day 2021 発表資料:AR Fukuoka & HoloBox紹介
Voxon Photonics VX1で遊んでみた
Voxon Photonics VX1で遊んでみた
AR-Frame x AR.js入門
AR-Frame x AR.js入門
AI x WebXR: フェイストラッキングを用いた擬似3D表現を解説!
AI x WebXR: フェイストラッキングを用いた擬似3D表現を解説!
コロナ禍中のコミュニティ活動
コロナ禍中のコミュニティ活動
Project HoloBox
Project HoloBox
AR Fukuoka紹介2020
AR Fukuoka紹介2020
iPad LiDARで作ってみた in AR Fukuoka 忘年会2020
iPad LiDARで作ってみた in AR Fukuoka 忘年会2020
MRTKで始めるAR開発 (HoloLens 1 and 2, ARCore, ARkit)
MRTKで始めるAR開発 (HoloLens 1 and 2, ARCore, ARkit)
OSC2020 Fukuoka: インストールいらず、WebAR入門
OSC2020 Fukuoka: インストールいらず、WebAR入門
Oculus Quest 1&2 開発のはじめの一歩 with A-Frame WebVR
Oculus Quest 1&2 開発のはじめの一歩 with A-Frame WebVR
Spatial Copy & Paste @HoloLensゆるっとLT会
Spatial Copy & Paste @HoloLensゆるっとLT会
OpenCVで作るスタンプAR
1.
OpenCVで作るARスタンプ ももち浜TECHカフェ
2.
自己紹介 氏名:吉永崇(Takashi Yoshinaga) 所属:九州先端科学技術研究所(ISIT) 専門:ARを用いた医療支援や運動計測 コミュニティ:ARコンテンツ作成勉強会 主催
3.
ARコンテンツ作成勉強会の紹介 2013年5月に勉強会をスタート ARコンテンツの作り方をハンズオン形式で学ぶ
人数は5~10名程度の少人数で実施 参加条件はAR/VRに興味がある人(知識不要) 各地で開催 (福岡、熊本、宮崎、長崎、大分、 鹿児島、山口、広島、関東)
4.
Twitterと勉強会ページで情報を発信しています #AR_Fukuoka Googleで「AR勉強会」で検索
5.
事前準備 ①演習用データ http://arfukuoka.lolipop.jp/stampar/Sample.zip ②ARCoreSDK(v1.8.0) https://github.com/google-ar/arcore-unity-sdk/releases/tag/v1.8.0 ③Unity2017.4.15f1 or later https://unity3d.com/jp/unity/qa/lts-releases?version=2017.4 ④Android
SDK https://developer.android.com/studio
6.
今日のゴール https://youtu.be/a8o1ieL01_w
7.
ARCore Googleが提供する次世代ARプラットフォーム。普通のスマホでマーカーレスARを実現。 【主要機能】 (1) 自己位置推定 (Motion
Tracking) (2) 平面認識 (Environmental Understanding) (3) 明るさ推定 (Light Estimation) (4) マーカー認識 (Augmented Image) (5) 空間共有 (Cloud Anchor) (6) 顔認識 (Augmented Faces) (1) 自己位置推定 (Motion Tracking)
8.
OpenCV Plus Unity
画像処理ライブラリの定番としてお馴染みのOpenCVのUnity版 C#版のOpenCVSharpをベースにUnityに対応させたアセット Windows/Mac/Android/iOSに対応。しかも無料!
9.
処理手順 二値化 capture 色の変更 アルファ値 の追加 2D→3DGOAL!
10.
まずはUnityの操作の基本
11.
プロジェクトを作成 New
12.
プロジェクトを作成 最後にCreate Project プロジェクト名 保存場所
13.
Unityの操作画面(概要) ゲーム空間の設計画面
14.
ゲーム空間にCGを追加しよう ①右クリック ②3D Object ③Quad
15.
実行してみよう クリックして実行 クリックして終了 カメラから見た空間
16.
Scene(設計画面)の視点を変えよう [←] [→]で左右移動 [↑][↓]でズームイン/アウト [Alt]+ドラッグで回転 +ドラッグで上下左右
17.
オブジェクトの位置・向き・サイズを調整 クリックして選択 移動 回転 拡大・縮小
18.
数値を用いた位置・姿勢・サイズの指定 オブジェクトの詳細の確認・追加・変更 はInspectorで行う 例えば、TransformのPositionを 変更すると位置が変わる ②Positionを0
0 0に変更 ① Quad
19.
色情報の設定:テクスチャを指定 既存の3Dモデルにテクスチャ画像を貼り付けて見た目を変更
20.
色情報の設定:マテリアルの作成 ①Assets ②空白を右クリック
21.
色情報の設定:マテリアルの作成 ①Create ②Material
22.
色情報の設定:マテリアルの適用 ①Quadをクリック ②Materialsを開く ※▼をクリック
23.
色情報の設定:マテリアルの適用 ①NewMaterialに注目 ②MaterialsのElement0 にドラッグ&ドロップ
24.
色情報の設定:マテリアルの適用 ①Quadをクリック ②NewMaterialを開く ※▼をクリック
25.
色情報の設定:マテリアルの適用 ここをクリック
26.
色情報の設定:マテリアルの適用 ①Unlit ②Transparent
27.
色情報の設定:マテリアルの適用 Quadの詳細情報として テクスチャを登録する
28.
色情報の設定:画像のインポート ①Assets ②ImportNewAsset...
29.
色情報の設定:画像のインポート ①Sampleフォルダ ②logo.pngを選択 ③Import
30.
色情報の設定:テクスチャの貼り付け ①Quadをクリック
31.
色情報の設定:テクスチャの貼り付け ①logoに注目 ②テクスチャ指定領域に ドラッグ&ドロップ
32.
色情報の設定:テクスチャの貼り付け
33.
ポイント&アイディア 【ポイント】 3Dオブジェクトにテクスチャを貼るというマテリアルを一度設定して しまえば画像を差し替えるだけで見た目は変えられる。 【アイディア】 カメラから得られた画像の黒画素をスクリプトで操作して色を変更 カメラ画像の白画素を透明にした画像を作成
透過画像を貼り付けたQuadを空中に出現させる
34.
一旦、現状を保存 ①File ②Save Scene as...
35.
現状を保存:Sceneの保存 ①適当に名前を付ける (例:StampAR) ②保存 以降はCtrl/Command + Sで現状を保存
36.
ARCore SDKの導入 ①Assets ②Import Package ③Custom
Packageから下記を開く arcore-unity-sdk-v1.8.0.unitypackage
37.
ARCore SDKの導入 Import
38.
ARCore SDKの導入 GoogleARCoreが追加される
39.
AR用カメラの設定 Main Cameraを削除 ※右クリック→Delete
40.
AR用カメラの設定 Assets→GoogleARCore→Prefabs
41.
AR用カメラの設定 ①ARCore Device ②Hierarchyにドラッグ&ドロップ
42.
AR用カメラの設定 ①ARCore Device ②DefaultSessionConfig をダブルクリック
43.
AR用カメラの設定 Camera Focus ModeをAutoに変更
44.
オブジェクト表示位置の調整 Quadをクリック
45.
表示オブジェクトの設定 Position: 0, 0,
0.5 Scale: 全て0.1
46.
オブジェクト表示位置の調整 Quadをダブルクリック
47.
保存 Ctrl + S または Command
+ S
48.
ビルド設定 ①File ②Build Settings...
49.
ビルド設定 ①Android ②Switch Platform
50.
ビルド設定 ①Internal ②Player Settings
51.
ビルド設定 ①Resolution and Presentation ②Default
OrientationをPortraitに変更
52.
ビルド設定 ①Other Settings ②Multithreaded Renderingをオフ
53.
ビルド設定 ①PackageNameを設定 例)com.fukuoka.test ②Minimum API Level をAndrid
7.0に変更
54.
ARCoreの利用設定(Unity2018のみ) Allow unsafe Codeをオン
55.
ARCoreの利用設定 ①XR Settings ②ARCore Supportedをオン
56.
Ctrl/Command+Sで現状を保存
57.
実機インストール ①File ②Build & Run
58.
実機インストール ①インストーラ(.apk)の名前を付ける ②保存
59.
動作確認
60.
画像処理を始める準備
61.
OpenCV Plus Unityの導入 ①Window ②Asset
Store
62.
OpenCV Plus Unityの導入 OpenCV
Plusで検索
63.
OpenCV Plus Unityの導入 OpenCV
Plus Unityをクリック
64.
OpenCV Plus Unityの導入 ダウンロード
65.
OpenCV Plus Unityの導入 インポート
66.
OpenCV Plus Unityの導入 Import
67.
OpenCV Plus Unityの導入 OpenCV
+ Unity が追加されていればOK
68.
UnityEditorの画面設定 Game
69.
UnityEditorの画面設定 ①Free Aspectをクリック ②+をクリック
70.
UnityEditorの画面設定 ①名前を付ける ②800 × 1280
71.
UIのインポート ②Import Package ①Assets ③Custom Package...
72.
UIのインポート ②開く ①StampUI.unitypackage
73.
UIのインポート Import
74.
UIのインポート Scene
75.
UIのインポート ①Assets ②Canvasが追加 されていることを確認
76.
UIのインポート ①Canvas ②Hierarchyにドラッグ&ドロップ
77.
UIのインポート UIが追加されているはず
78.
UIのインポート ①Canvasをダブルクリック ②UIの全体が見える
79.
UIのインポート ①xやzをクリック ②UIを正面に向ける
80.
UIの役割 キャプチャ開始 色変更 空間に貼り付け キャプチャや画像処理 結果の可視化
81.
画像表示部分の設定 ①Canvasを開く ②Assetsを開く
82.
画像表示部分の設定 ①RawImage ②Materialに注目
83.
画像表示部分の設定 ①NewMaterialに注目 ②Materialに ドラッグ&ドロップ
84.
画像表示部分の設定 確認用の領域に透過画像を 表示できるようになった
85.
画像処理スクリプト記述の準備 空白を右クリック
86.
画像処理スクリプト記述の準備 Create Empty
87.
画像処理スクリプト記述の準備 ①Game Object ②Add Component
88.
画像処理スクリプト記述の準備 ①New Script ②スクリプト名を決める (例:StampScript) ③Create and
Add
89.
画像処理スクリプト記述の準備 ①Game Object ②StampScript が追加されていればOK
90.
画像処理スクリプト記述の準備 ダブルクリック
91.
OpenCV等のインポート using UnityEngine; using UnityEngine.UI; using
OpenCvSharp; using OpenCvSharp.Demo; public class StampScript : MonoBehaviour { // Start関数は初期化のために一度だけ実行される void Start () { cg = GameObject.Find ("Robot Kyle"); } // Update関数は毎フレーム実行される void Update () { } }
92.
canvas 変数の用意 //UIが張り付けられたCanvas public GameObject canvas; //プレビュー領域 public
RawImage preview; //キャプチャ領域を保持 UnityEngine.Rect capRect; //キャプチャ画像を保持 Texture2D capTexture; void Start () { } void Update () { } preview
93.
UIと変数の関連付け ①GameObjectをクリック ②CanvasとPreview が追加されていればOK
94.
UIと変数の関連付け Canvasに注目 StampScriptの Canvasにドラッグ&ドロップ
95.
UIと変数の関連付け RawImageに注目 StampScriptの Previewにドラッグ&ドロップ
96.
処理手順 二値化 capture 色の変更 アルファ値 の追加 2D→3DGOAL!
97.
処理手順 二値化 色の変更 アルファ値 の追加 2D→3DGOAL! capture
98.
準備:まずは画面全体をキャプチャしてみる //UIが張り付けられたCanvas public GameObject canvas; //プレビュー領域 public
RawImage preview; //キャプチャ領域を保持 UnityEngine.Rect capRect; //キャプチャ画像を保持 Texture2D capTexture; void Start () { int w = Screen.width; int h = Screen.height; //原点(0,0)から画面の縦横の長さまでをキャプチャ領域とする capRect = new UnityEngine.Rect(0, 0, w, h); //画面サイズの空画像を作成 capTexture = new Texture2D(w, h, TextureFormat.RGBA32, false); //capTextureをプレビュー領域に貼り付け preview.material.mainTexture = capTexture; } width height (0,0)
99.
画像処理用の関数 void Start ()
{ /*省略:前ページで記述した初期化*/ } IEnumerator ImageProcessing() { canvas.SetActive(false);//Canvas上のUIを一時的に消す yield return new WaitForEndOfFrame();//フレーム終了を待つ capTexture.ReadPixels(capRect, 0, 0);//キャプチャ開始 capTexture.Apply();//各画素の色をテクスチャに反映 canvas.SetActive(true);//Canvas上のUIを再表示 } public void StartCV() { StartCoroutine(ImageProcessing());//コルーチンの実行 } ここに記述
100.
StartCV()を呼び出す ①CaptureBtnをクリック ②Buttonを探す ③OnClick()の 下方にある+をクリック
101.
StartCV()を呼び出す GameObjectに注目 OnClick()内のNoneと 書かれた箇所にドラッグ&ドロップ
102.
StartCV()を呼び出す ①No Functionをクリック ②StampScript
103.
StartCV()を呼び出す StartCV()
104.
Build & Run!
105.
動作確認 キャプチャ画像が表示される Capture
106.
コードを整理(1/2) IEnumerator ImageProcessing() { canvas.SetActive(false); yield return
new WaitForEndOfFrame(); capTexture.ReadPixels(capRect, 0, 0); capTexture.Apply(); canvas.SetActive(true); } void CreateImages() { /*ここに画像生成コードを移す*/ } 画像の生成 このあと、画像生成のコードが増えるため関数にまとめて整理しておく
107.
コードを整理(2/2) このあと、画像生成のコードが増えるため関数にまとめて整理しておく IEnumerator ImageProcessing() { canvas.SetActive(false);//Canvas上のUIを一時的に消す yield return
new WaitForEndOfFrame(); CreateImages(); //画像の生成 canvas.SetActive(true);//Canvas上のUIを再表示 } void CreateImages() { capTexture.ReadPixels(capRect, 0, 0); capTexture.Apply(); }
108.
処理手順 二値化 色の変更 アルファ値 の追加 2D→3DGOAL! capture
109.
capture 処理手順 色の変更 アルファ値 の追加 2D→3DGOAL! 二値化
110.
ここからOpenCV!
111.
capture 処理手順 色の変更 アルファ値 の追加 2D→3DGOAL! 二値化
112.
グレースケール画像の二値化 0 255 0 255 0~255の輝度値を、ある値(しきい値)以上か未満かで分離することを二値化と呼ぶ。 画像処理すべき領域か否かをはっきり分けることができるため非常に重要なテクニック。
113.
OpenCVで画像を扱う準備 //スクショ領域を保持 UnityEngine.Rect capRect; //スクショ画像を保持 Texture2D capTexture; //OpenCVで扱う画像を保持 Mat
bgraMat, binMat; void Start () { int w = Screen.width; int h = Screen.height; //原点(0,0)から画面の縦横の長さまでをキャプチャ領域とする capRect = new UnityEngine.Rect(0, 0, w, h); //画面サイズの空画像を作成 capTexture = new Texture2D(w, h, TextureFormat.RGBA32, false); //capTextureをプレビュー領域に貼り付け preview.material.mainTexture = capTexture; }
114.
二値化 void CreateImages() { capTexture.ReadPixels(capRect, 0,
0); capTexture.Apply(); //Texure2DをMatに変換 bgraMat = OpenCvSharp.Unity.TextureToMat(capTexture); //カラー画像をグレースケール(濃淡)画像に変換 binMat = bgraMat.CvtColor(ColorConversionCodes.BGRA2GRAY); //大津の方法で二値化。結果を白黒反転 binMat = binMat.Threshold(100, 255, ThresholdTypes.Otsu); //あとで色を変えられるようにカラー(BGR)に変換 bgraMat = binMat.CvtColor(ColorConversionCodes.GRAY2BGRA); } bgraMat binMat(GrayScale) binMat (Binarized) bgraMat (B=G=R)
115.
二値化結果の表示 IEnumerator ImageProcessing() { canvas.SetActive(false); yield return
new WaitForEndOfFrame(); CreateImages();//画像を生成 SetColor(capTexture);//テクスチャに色をセット canvas.SetActive(true); } //bgraMatが保持する色をテクスチャにセットする void SetColor(Texture2D texture) { OpenCvSharp.Unity.MatToTexture(bgraMat, texture); }
116.
動作確認 ①Capture ②二値化結果
117.
Matに関するメモリの開放 IEnumerator ImageProcessing() { canvas.SetActive(false); //Mat用に確保したメモリを解放 if (bgraMat
!= null) { bgraMat.Release(); } if (binMat != null) { binMat.Release(); } yield return new WaitForEndOfFrame(); CreateImages(); SetColor(capTexture); canvas.SetActive(true); }
118.
capture 処理手順 色の変更 アルファ値 の追加 2D→3DGOAL! 二値化
119.
capture 処理手順 アルファ値 の追加 2D→3DGOAL! 二値化 色の変更
120.
黒画素に色を付ける (1/2) void SetColor(Texture2D
texture) { //Matが初期化されていない場合は何もしない if (bgraMat == null || binMat == null) { return; } unsafe { //各Matのピクセル情報の配列(ポインタ)を取得 byte* bgraPtr = bgraMat.DataPointer; byte* binPtr = binMat.DataPointer; //全ピクセル数を算出 int pixelCount = binMat.Width * binMat.Height; //各ピクセルを参照して黒画素なら色を塗る for (int i = 0; i < pixelCount; i++) { } } OpenCvSharp.Unity.MatToTexture(bgraMat, texture); } 後ほど処理を記述
121.
ポインタと各ピクセルの色情報 どちらの画像も左上から横方向スキャンし、それを全段で行った 場合の各画素の色情報を1次元配列に格納している。 binPtr(白黒画像)
: bgraPtr(カラー画像+アルファ): [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] ・・・ ・・・ binPtr bgraPtr 0th pixel 1st 2nd 全要素数 n (=width*height) 全要素数 n*4
122.
この次の作業 void SetColor(Texture2D texture) { //Matが初期化されていない場合は何もしない if
(bgraMat == null || binMat == null) { return; } unsafe { //各Matのピクセル情報の配列(ポインタ)を取得 byte* bgraPtr = bgraMat.DataPointer; byte* binPtr = binMat.DataPointer; //全ピクセル数を算出 int pixelCount = binMat.Width * binMat.Height; //各ピクセルを参照して黒画素なら色を塗る for (int i = 0; i < pixelCount; i++) { } } OpenCvSharp.Unity.MatToTexture(bgraMat, texture); } これから処理を記述
123.
黒画素に色を付ける (2/2) byte* bgraPtr
= bgraMat.DataPointer; byte* binPtr = binMat.DataPointer; int pixelCount = binMat.Width * binMat.Height; for (int i = 0; i < pixelCount; i++) { //白黒画像のi番目に相当するBGRAのデータの位置 int bgraPos = i * 4; //白かったら無視(あとで透過させる) if (binPtr[i] == 255) { } //黒かったら色を塗る else { bgraPtr[bgraPos] = 255; //B bgraPtr[bgraPos+1] = 0; //G bgraPtr[bgraPos+2] = 0; //R } }
124.
動作確認
125.
色の配列を作成 //14色の色情報 byte[,] colors =
{ { 255, 255, 255 },{ 18, 0, 230 }, { 0, 152, 243 }, { 0, 241, 255 }, { 31, 195, 143 }, { 68, 153, 0 }, { 150, 158, 0 }, { 233, 160, 0 }, { 183, 104, 0 }, { 136, 32, 29 }, { 131, 7, 146 }, { 127, 0, 228 }, { 79, 0, 229 }, { 0, 0, 0 } }; //何番目の色かを表す変数 (colNo=0~13) int colorNo = 0; void Start() { int w = Screen.width; int h = Screen.height; /*資料のスペースの都合により省略*/ } ①color.txtからコピペ ②自分で書く
126.
黒画素の色の切り替え(1/3) void SetColor(Texture2D texture) { //Matが初期化されていない場合は何もしない if
(bgraMat == null || binMat == null) { return; } unsafe { //各Matのピクセル情報の配列(ポインタ)を取得 byte* bgraPtr = bgraMat.DataPointer; byte* binPtr = binMat.DataPointer; //全ピクセル数を算出 int pixelCount = binMat.Width * binMat.Height; //各ピクセルをチェックして黒かったら色を付ける for (int i = 0; i < pixelCount; i++) { } } OpenCvSharp.Unity.MatToTexture(bgraMat, texture); } ここで色を指定 (次のページで解説)
127.
黒画素の色の切り替え(2/3) for (int i
= 0; i < pixelCount; i++) { //白黒画像のi番目に相当するBGRAのデータの位置 int bgraPos = i * 4; //白かったら無視(あとで透過にする) if (binPtr[i] == 255) { } //黒かったら色を付ける else { bgraPtr[bgraPos] = colors[colorNo, 0]; //B bgraPtr[bgraPos + 1] = colors[colorNo, 1]; //G bgraPtr[bgraPos + 2] = colors[colorNo, 2]; //R } }
128.
黒画素の色の切り替え(3/3) public void ChangeColor() { colorNo++; colorNo
%= colors.Length / 3; SetColor(capTexture); } //色を変更する関数 void SetColor(Texture2D texture) { //Matが初期化されていない場合は何もしない if (bgraMat == null || binMat == null) { return; } unsafe { //各Matのピクセル情報の配列(ポインタ)を取得 byte* bgraPtr = bgraMat.DataPointer; byte* binPtr = binMat.DataPointer; /*資料のスペースの都合により以下省略*/
129.
ChangeColor()を呼び出す ①ColorBtnをクリック ②Buttonを探す ③OnClick()の 下方にある+をクリック
130.
ChangeColor()を呼び出す GameObjectに注目 OnClick()内のNoneと 書かれた箇所にドラッグ&ドロップ
131.
ChangeColor()を呼び出す ①No Functionをクリック ②StampScript
132.
ChangeColor()を呼び出す ChangeColor()
133.
動作確認 Capture Color Color
134.
capture 処理手順 アルファ値 の追加 2D→3DGOAL! 二値化 色の変更
135.
capture 処理手順 2D→3DGOAL! 二値化 色の変更 アルファ値 の追加
136.
白画素を透過させる(1/2) void SetColor(Texture2D texture) { //Matが初期化されていない場合は何もしない if
(bgraMat == null || binMat == null) { return; } unsafe { //各Matのピクセル情報の配列(ポインタ)を取得 byte* bgraPtr = bgraMat.DataPointer; byte* binPtr = binMat.DataPointer; //全ピクセル数を算出 int pixelCount = binMat.Width * binMat.Height; //各ピクセルに対して透過/非透過の処理を行う for (int i = 0; i < pixelCount; i++) { } } OpenCvSharp.Unity.MatToTexture(bgraMat, texture); } ここで色を指定 (次のページで解説)
137.
白画素を透過させる(2/2) for (int i
= 0; i < pixelCount; i++) { //白黒画像のi番目に相当するBGRAのデータの位置 int bgraPos = i * 4; //白かったら透過 if (binPtr[i] == 255) { bgraPtr[bgraPos + 3] = 0; } //黒かったら非透過 else { bgraPtr[bgraPos] = colors[colorNo, 0]; //B bgraPtr[bgraPos + 1] = colors[colorNo, 1]; //G bgraPtr[bgraPos + 2] = colors[colorNo, 2]; //R bgraPtr[bgraPos + 3] = 255; } }
138.
動作確認 ①Capture ②透過画像
139.
プレビュー表示の最大化 ①RawImage クリック
140.
プレビュー表示の最大化 全体を選択
141.
プレビュー表示の最大化 Left,Top,Right,Bottom をすべて0に変更
142.
プレビュー表示の最大化 RawImageをオフ
143.
プレビューの表示 IEnumerator ImageProcessing() { canvas.SetActive(false); //Mat用に確保したメモリを解放 if (bgraMat
!= null) { bgraMat.Release(); } if (binMat != null) { binMat.Release(); } yield return new WaitForEndOfFrame(); CreateImages(); SetColor(capTexture); canvas.SetActive(true); //プレビューを表示する preview.enabled = true; }
144.
動作確認 Capture
145.
capture 処理手順 2D→3DGOAL! 二値化 色の変更 アルファ値 の追加
146.
capture 処理手順 二値化 色の変更 アルファ値 の追加 2D→3DGOAL!
147.
テクスチャ付きのQuadをPrefab化 Quadをクリック ②QuadをAssetsに ドラッグ&ドロップ
148.
テクスチャ付きのQuadをPrefab化 Quadを削除
149.
空間にスタンプを固定 //スタンプのテンプレートオブジェクト(テクスチャ付きのQuad) public GameObject original; void
Start() { int w = Screen.width; int h = Screen.height; capRect = new UnityEngine.Rect(0, 0, w, h); capTexture = new Texture2D(w, h, TextureFormat.RGBA32, false); preview.material.mainTexture = capTexture; } //スタンプを空間に置くための関数 public void PutObject() { } 次のページからコードを記載
150.
スタンプの実サイズを計算 //カメラの情報を取得 Camera cam =
Camera.main; //画面左下のxy座標を3次元に変換(0.6m手前に置くとする) Vector3 v1 = cam.ViewportToWorldPoint(new Vector3(0, 0, 0.6f)); //画面右上のxy座標を3次元に変換 Vector3 v2 = cam.ViewportToWorldPoint(new Vector3(1, 1, 0.6f)); //画面左上のxy座標を3次元に変換 Vector3 v3 = cam.ViewportToWorldPoint(new Vector3(0, 1, 0.6f)); //キャプチャ領域の実空間でのサイズを計算 float w = Vector3.Distance(v2, v3); float h = Vector3.Distance(v1, v3); /*次のページに続く*/ (0,0) (1,1) (0,1) v1 v2 v3
151.
空間にスタンプを固定 /*前のページに記述したコードからの続き*/ GameObject stamp =
GameObject.Instantiate(original); //オブジェクトの生成とカメラに対する位置・向き・サイズを設定 stamp.transform.parent = cam.transform; stamp.transform.localPosition = new Vector3(0, 0, 0.6f); stamp.transform.localRotation = Quaternion.identity; stamp.transform.localScale = new Vector3(w, h, 1); //上記で作ったオブジェクトに貼るテクスチャを作成 Texture2D stampTexture = new Texture2D(capTexture.width, capTexture.height); //色を塗り、そのあとテクスチャとして貼り付ける SetColor(stampTexture); stamp.GetComponent<Renderer>().material.mainTexture = stampTexture; //スタンプの原点をカメラではなくワールドに変更 stamp.transform.parent = null; preview.enabled = false;
152.
オブジェクトと変数の関連付け GameObject
153.
オブジェクトと変数の関連付け Quadに注目
154.
オブジェクトと変数の関連付け Originalにドラッグ&ドロップ
155.
PutObject()を呼び出す ①StampBtnをクリック ②Buttonを探す ③OnClick()の 下方にある+をクリック
156.
PutObject()を呼び出す GameObjectに注目 OnClick()内のNoneと 書かれた箇所にドラッグ&ドロップ
157.
PutObject()を呼び出す ①No Functionをクリック ②StampScript
158.
PutObject()を呼び出す PutObject()
159.
動作確認
160.
描画できるスタンプ数に制限を設ける //スタンプのテンプレートオブジェクト(テクスチャ付きのQuad) public GameObject original; //生成されたスタンプを覚えておくListを作成 List<GameObject>
stampList = new List<GameObject>(); void Start() { int w = Screen.width; int h = Screen.height; capRect = new UnityEngine.Rect(0, 0, w, h); capTexture = new Texture2D(w, h, TextureFormat.RGBA32, false); preview.material.mainTexture = capTexture; }
161.
描画できるスタンプ数に制限を設ける public void PutObject() { /*資料のスペースの都合により省略*/ stamp.transform.parent
= null; //以下、生成したスタンプの記録と削除 stampList.Add(stamp); if (stampList.Count == 10) { DestroyImmediate(stampList[0]. GetComponent<Renderer>().material.mainTexture); DestroyImmediate(stampList[0]); stampList.RemoveAt(0); } preview.enabled = false; }
162.
完成!