PPT

Report
Tennis Game Using Kinect
Member: 施立宸,李少宏,吳品頡,高顗泓
指導教授: 連震杰 老師
Outline
1. Introduction (施立宸)
2. Kinect System Setup and Diagram, and Software Tools
2.1 Hardware: Kinect (施立宸)
2.2 Software Tools: OpenNI (施立宸)
2.3 Software Tools: 3Ds MAX (高顗泓,吳品頡)
2.4 Software Tools: Unity & Package (施立宸,李少宏)
2.4.1 Software Tools: Unity3D (李少ˋ宏)
2.4.2 Software Tools: Unity Wrapper (施立宸)
3. Kinect Preprocessing Using OpenNI, 3Ds Max and Unity3D (施立宸,李少宏,吳品頡 ,高顗泓)
3.1 Depth Map and Color Image Creation Using OpenNI to Process the Kinect (吳品頡 ,高顗泓)
3.2 Human Body Calibration for Skeleton Creation Using OpenNI (施立宸,李少宏)
3.3 Animated Object Component Creation Using 3Ds Max and Save to Unity3D (吳品頡,高顗泓,李少宏)
4. Right Hand Point and Skeleton Tracking Using OpenNI (施立宸)
5. Tennis Game Interaction between Human Motion and Animated Object Components
5.1 匯入.fbx並將匯入物件加入物理性質與程式 (李少宏)
5.2 網球場地設定 (李少宏)
5.3 玩家與遊戲間互動 (李少宏,施立宸)
6. Animated Tennis Game Display (李少宏,施立宸)
7. Schedule
8. Reference
2
1. Introduction (1/2)
 Background
 Motion game: Can detect our motion and give interaction.
 Usually be used on sport game.
 Motivation
 We want to create a game in PC but use Xbox360’s Kinect.
 We want to play game with more “real”.
 Because I want to play with Aggassi.
PC
XBOX360
3
1. Introduction (2/2)
 Example
IR Light Source
CMOS Sensor Receiver
Skeleton analyze
可將玩家位置轉換成遊戲中人物的位置,並且支援動作判定
的網球遊戲
4
2. Kinect System Setup and Diagram, and
Software Tools – Kinect System Setup
Scene
1. Depth Map and Color Image Creation Using
OpenNI
RGB + Depth Image
IR Light Source
CMOS Sensor Receiver
PS1080 SoC
Kinect
Light Coding
USB
4. Display on Screen
3. Interaction Algorithm
Display recognized action
2. Skeleton Extraction Using OpenNI
Skeleton Feature
Extraction
Tennis Game
Interaction
Skeleton Feature
Human
Gesture
Recognition
PC
5
2. Kinect System Setup and Diagram, and
Software Tools – Kinect System Diagram (1/2)
0.1 Depth Map and Color Image
Creation Using OpenNI to Process
Kinect
RGB
Image 
Depth
Map 
0.2 Human Body Calibration
for Skeleton Creation Using
OpenNI
Use  and  to Calibration
校正後的 1.0 Right Hand Point and
RGB
Skeleton Tracking Using OpenNI
Image ′ a) 偵測與追蹤torso(玩家正
中心)和right hand關節點
Depth
b) 輸出 , 
Map ′
t>1
t=1
Update  ,  to Unity in
any time.
0.3 Animated Object
Component Creation Using
3Ds MAX and Save to
Unity3D
2.0 Tennis Game Interaction between Human Motion and Animated Object
Components in Unity3D
t>1
Ball.fbx ,
Racket.fbx,
Player.fbx,
etc.
2.1 匯入.fbx並將匯入物件加入物
理性質與程式
a) 物理性質與參數設定
b) 加入script(Unity中的程式碼)
網球、球拍等…..
2.3 玩家與遊戲間互動
發球
a) 給予球初速
b) 動作判斷
t=0
2.2 網球場地設定
a) 球場材質貼上
b) 光線設定
c) 加入script
 
規則、碰撞與分
數判定
球場與周圍環境
 
 
 : 球的速度  : 球的位置
Display
玩家回擊
a) 動作判定
b) 位置轉換
AI回擊
a) 位置移動
b) 揮拍時間判定
2. Kinect System Setup and Diagram, and
Software Tools – Kinect System Diagram (2/2)
3.0 Animated Tennis Game Display in Unity3D
我們將每個物件的位置交給Unity去做繪圖動作,並透過script來˙完成物件互動並顯示
7
2. Kinect System Setup and Diagram, and
Software Tools – Software Tools (1/2)
1) Kinect Driver: OPENNI
 Connect Kinect to PC.
 Can catch skeleton joint point.
2) 3D graphic tool: 3Ds Max
 Game engine can’t draw too delicate graph, so use graph
drawing software.
 Have many exported file types such as .fbx.
 Can match many software like Unity and XNA.
3) Game Engine & Package
3.1) Game Engine: Unity3D
 Implement physics, light, polygon and GUI.
 Connect game engine and Kinect.
3.2) Package of Game Engine: UnityWrapper
 Bind Unity3D and OPENNI.
 Have many binding examples to use.
8
2. Kinect System Setup and Diagram, and
Software Tools – Software Tools (2/2)
2) Animated Object Component Creation
Using 3Ds MAX and Save to Unity3D
Draw 3D
objects
.fbx file
Export
.fbx
3) Tennis Game Interaction between Human Motion and Animated
Object Components in Unity3D
start
3D
depth
map
Load
UnityWrapper
Connect Kinect
Load .fbx
1) Right Hand Point and Skeleton Tracking
Using OpenNI
Kinect
driver
Initialize
Kinect
Get joint
points
Write script to
move
component.
complete
joint points
9
2.1 Hardware: Kinect (1/3)
 Kinect介紹
 屬於Xbox360的裝置,Microsoft的產品
 若使用OpenNI或MicrosoftSDK,即可運用於PC
 可蒐集彩色影像、3D深度影像、以及聲音訊
號
10
2.1 Hardware: Kinect (2/3)
 運作原理
 中間的鏡頭為RGB彩色攝影機
 左右兩邊鏡頭則分別為紅外線發射器和紅外線
CMOS攝影機所構成的3D深度感應器
 內建陣列式麥克風系統
11
2.1 Hardware: Kinect – Spec. (3/3)
 Sensor




Colour and depth-sensing lenses
Voice microphone array
Tilt motor for sensor adjustment
Fully compatible with existing Xbox 360 consoles
 Field of View




Horizontal field of view: 57 degrees
Vertical field of view: 43 degrees
Physical tilt range: ± 27 degrees
Depth sensor range: 1.2m – 3.5m
 Data Streams
 320×240 16-bit depth @ 30 frames/sec
 640×480 32-bit colour@ 30 frames/sec
 16-bit audio @ 16 kHz
 Skeletal Tracking System
 Tracks up to 6 people, including 2 active players
 Tracks 20 joints per active player
 Ability to map active players to Live Avatars
 Audio System
 Live party chat and in-game voice chat (requires Xbox Live Gold Membership)
 Echo cancellation system enhances voice input
 Speech recognition in multiple
12
2.2 Software Tools: OpenNI (1/2)
 OpenNI Introduction
 Certify and promote the compatibility of Natural
Interaction (NI) devices, applications and
middleware.
 Architecture
13
2.2 Software Tools: OpenNI (2/2)
 OpenNI vs MicrosoftSDK
 目前微軟也有自己的tool kit-- MicrosoftSDK.
OpenNI
Microsoft SDK
License includes commercial use
Licensed for non-commercial use
only
Support for hands only mode
Only tracks full body (no mode for
hand only tracking)
No support for audio
Support for audio
Also supports the Primesense and
the ASUS WAVI Xtion sensors
Just for Kinect.
Comes with code for full support in
Unity3D game engine
No support for Unity3D game engine
Three separate installers and a NITE
license string
Single no-fuss installer
Needs a calibration pose to start
tracking
Don’t need any calibration pose.
Power save.
Seems to consume more CPU power
than OpenNI/NITE
Has gesture recognition system
No gesture recognition system
14
2.3 Software Tools: 3Ds MAX
 3Ds MAX Introduction
 A modeling, animation and rendering package.
 It has modeling capabilities, a flexible plugin
architecture.
 Application




Video game developers
TV commercial studios
Movie effects
Movie pre-visualization
15
2.4 Software Tools: Unity & Package
 We introduce Unity and its package.
16
2.4.1 Software Tools: Unity3D
 Unity introduction
 An integrated authoring tool for creating 3D video
games.
 Features
 Can use C# and java.
 Has its compiler environment
 Easy to use.
17
2.4.2 Software Tools: Unity Wrapper
 Unity Wrapper introduction
 可以使Unity能提取OpenNI資料的Package
 Package: 一種可將Unity應用軟體包裝化的軟件
 有許多不同版本
 We use Zigfu version.
–
–
–
–
使用方面較為流暢 30 fps
有附較為完整的說明
軟體更新速度快
問題較少
18
3. Kinect Preprocessing Using OpenNI, 3Ds Max
and Unity3D
0.1 Depth Map and Color Image
Creation Using OpenNI to Process
Kinect
RGB
Image 
Depth
Map 
0.2 Human Body Calibration
for Skeleton Creation Using
OpenNI
Use  and  to Calibration
校正後的 1.0 Right Hand Point and
RGB
Skeleton Tracking Using OpenNI
Image ′ a) 偵測與追蹤torso(玩家正
中心)和right hand關節點
Depth
b) 輸出 , 
Map ′
t>1
t=1
Update  ,  to Unity in
any time.
0.3 Animated Object
Component Creation Using
3Ds MAX and Save to
Unity3D
2.0 Tennis Game Interaction between Human Motion and Animated Object
Components in Unity3D
t>1
Ball.fbx ,
Racket.fbx,
Player.fbx,
etc.
2.1 匯入.fbx並將匯入物件加入物
理性質與程式
a) 物理性質與參數設定
b) 加入script(Unity中的程式碼)
網球、球拍等…..
2.3 玩家與遊戲間互動
發球
a) 給予球初速
b) 動作判斷
t=0
2.2 網球場地設定
a) 球場材質貼上
b) 光線設定
c) 加入script
 
規則、碰撞與分
數判定
球場與周圍環境
 
 
 : 球的速度  : 球的位置
Display
玩家回擊
a) 動作判定
b) 位置轉換
AI回擊
a) 位置移動
b) 揮拍時間判定
3.1 Depth Map and Color Image Creation Using OpenNI
to Process the Kinect Kinect with OpenNI
 OpenNI
 可做為driver驅動Kinect並獲得彩色圖與深度圖
 除負責溝通硬體外,尚可透過中介軟體進行更
進一步操作,獲取更進階資訊。
 We use two class handpoint_controll() and
OpenNISkeleton(),當被使用時,系統會連絡
OpenNI並且從Kinect中獲取深度圖與彩色圖
20
3.2 Human Body Calibration for Skeleton
Creation Using OpenNI
 Why Calibration?
 初始化骨架
 使分析更精準
 所有OpenNI的function都需要校正後(僅需一次)
才能使用
 Calibration
 需要擺出T pose
 系統校正成功後便會顯示骨架
21
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (1/8)
0.1 Depth Map and Color Image
Creation Using OpenNI to Process
Kinect
RGB
Image 
Depth
Map 
0.2 Human Body Calibration
for Skeleton Creation Using
OpenNI
Use  and  to Calibration
校正後的 1.0 Right Hand Point and
RGB
Skeleton Tracking Using OpenNI
Image ′ a) 偵測與追蹤torso(玩家正
中心)和right hand關節點
Depth
b) 輸出 , 
Map ′
t>1
t=1
Update  ,  to Unity in
any time.
0.3 Animated Object
Component Creation Using
3Ds MAX and Save to
Unity3D
2.0 Tennis Game Interaction between Human Motion and Animated Object
Components in Unity3D
t>1
Ball.fbx ,
Racket.fbx,
Player.fbx,
etc.
2.1 匯入.fbx並將匯入物件加入物
理性質與程式
a) 物理性質與參數設定
b) 加入script(Unity中的程式碼)
網球、球拍等…..
2.3 玩家與遊戲間互動
發球
a) 給予球初速
b) 動作判斷
t=0
2.2 網球場地設定
a) 球場材質貼上
b) 光線設定
c) 加入script
 
規則、碰撞與分
數判定
球場與周圍環境
 
 
 : 球的速度  : 球的位置
Display
玩家回擊
a) 動作判定
b) 位置轉換
AI回擊
a) 位置移動
b) 揮拍時間判定
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (2/8)
 Create Tennis racket
plane
circle
cylinder
Figure: 球拍製作方法
23
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (3/8)
 Material
 To make objects more real.
24
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (4/8)
 The Process of Creating a Tennis Ball
1
2
↑拉出一個立方體
3
↑將其圓弧化
4
↑選定凹槽之分段線
↑凸顯所選之分段線
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (5/8)
5
6
↑球型化
7
↑調整凹槽深度
8
↑網球形狀完成
↑貼上材質
26
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (6/8)
 Final Result
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (7/8)
 Use some object to compose a tennis net.
 In Unity3D,using a invisible plane to allocate
physical character.
box
cylinder
Figure: Tennis net
28
3.3 Animated Object Component Creation Using
3Ds Max and Save to Unity3D (8/8)
 Export .FBX file in 3Ds MAX
將此物件輸出成.FBX檔案
29
4. Right Hand Point and Skeleton Tracking Using
OpenNI (1/2)
0.0 獲得深度圖與彩色圖
透過OpenNI操控Kinect
RGB
Image 
Depth
Map 
0.2 Human Body Calibration
for Skeleton Creation Using
OpenNI
Use  and  to Calibration
校正後的 1.0 Right Hand Point and
RGB
Skeleton Tracking Using OpenNI
Image ′ a) 偵測與追蹤torso(玩家正
中心)和right hand關節點
Depth
b) 輸出 , 
Map ′
t>1
t=1
Update  ,  to Unity in
any time.
2.0 Tennis Game Interaction between Human Motion and Animated Object
Components
0.3 Animated Object
Component Creation Using
3Ds MAX and Save to
Unity3D
t>1
Ball.fbx ,
Racket.fbx,
Player.fbx,
etc.
2.1 匯入.fbx並將匯入物件加入物
理性質與程式
a) 物理性質與參數設定
b) 加入script(Unity中的程式碼)
網球、球拍等…..
2.3 玩家與遊戲間互動
發球
a) 給予球初速
b) 動作判斷
t=0
2.2 網球場地設定
a) 球場材質貼上
b) 光線設定
c) 加入script
 
規則、碰撞與分
數判定
球場與周圍環境
 
 
 : 球的速度  : 球的位置
Display
玩家回擊
a) 動作判定
b) 位置轉換
AI回擊
a) 位置移動
b) 揮拍時間判定
4. Right Hand Point and Skeleton Tracking Using
OpenNI (2/2)
 Track right hand point by OpenNI:
 Handpoint_control()
 After calibration this class will detect right hand point.
 Then, track right hand point and output  to Unity.
 This class will output  all the time.
 OpenNISkeleton(int skeletonnum)
 輸入skeleton的號碼,此class可回傳指定骨架座標
 After calibration, this class will detect skeleton point.
 Then, track skeleton point and output  to Unity.
 This class will output  all the time.
31
5. Tennis Game Interaction between Human
Motion and Animated Object Components
0.1 Depth Map and Color
Image Creation Using OpenNI
to Process Kinect
RGB
Image 
Depth
Map 
0.2 Human Body Calibration
for Skeleton Creation Using
OpenNI
Use  and  to Calibration
校正後的 1.0 Right Hand Point and
RGB
Skeleton Tracking Using OpenNI
Image ′ a) 偵測與追蹤torso(玩家正
中心)和right hand關節點
Depth
b) 輸出 , 
Map ′
t>1
t=1
Update  ,  to Unity in
any time.
2.0 Tennis Game Interaction between Human Motion and Animated Object
Components
0.3 Animated Object
Component Creation Using
3Ds MAX and Save to
Unity3D
t>1
Ball.fbx ,
Racket.fbx,
Player.fbx,
etc.
2.1 匯入.fbx並將匯入物件加入物
理性質與程式
a) 物理性質與參數設定
b) 加入script(Unity中的程式碼)
網球、球拍等…..
2.3 玩家與遊戲間互動
發球
a) 給予球初速
b) 動作判斷
t=0
2.2 網球場地設定
a) 球場材質貼上
b) 光線設定
c) 加入script
 
規則、碰撞與分
數判定
球場與周圍環境
 
 
 : 球的速度  : 球的位置
Display
玩家回擊
a) 動作判定
b) 位置轉換
AI回擊
a) 位置移動
b) 揮拍時間判定
5.1 匯入.fbx並將匯入物件加入物理性質與程
式 (1/3)
 Import .FBX file in Unity3D
Figure: We import “ball.FBX” into our game system
33
5.1 匯入.fbx並將匯入物件加入物理性質與程
式 (2/3)
 物理特性附加(以鋼體附加為例)
點選欲加入特性物件
選擇Component->Rigidbody
即可發現特性視窗多了
Rigidbody屬性
34
5.1 匯入.fbx並將匯入物件加入物理性質與程
式(3/3)
 Script附加方式
 Script為Unity中的程式碼,可獨立運作並互相
影響,導入物件中。
左圖為遊戲物件,我們希望把右邊的Ball_Behavior的script附加於ball上,直接拖曳到物件上
由於球被附加上了Ball_Behavior的script,故其屬性多了一項Ball_Behavior
35
5.2 網球場地設定 (1/4)
 Scene Setting
1. Terrain (我們需要細部修改場地與其附加程式,
故此物件不由3Ds MAX畫出而是在Unity內完成)
2. Light
3. Camera
36
5.2 網球場地設定 (2/4)
 Terrain -Tennis Court
 Resolution
 Width, Length and Height
 Transform
 Position
 Location
 scale
1. Create Terrain
2. Set Resolution
4. Add Net
3. Paint Terrain Texture
5. Set Transform
6. Set Property
7. Set Material
37
5.2 網球場地設定 (3/4)
 Light
 Directional Light (figure a)
 Point Light (figure b)
 Spot Light (figure c)
1. Add GameObject
2. Set Transform
3. Set Property
a. Directional Light
b. Point Light
c. Spot Light
38
5.2 網球場地設定 (4/4)
 Camera
 Projection
 Perspective (figure a)
 Orthographic (figure b)
1. Add Camera
2. Set Transform
3. Set Property
a. Perspective
b. Orthographic
選擇攝影機並修改
projection選項
39
5.3 玩家與遊戲間互動 (1/6)
3. Play and Display by Unity
3.5 分數判定
3.1 發球(假設為玩家擊球)
拋球
改變球的速度 為(0,2,0),使其往
上
C set to 0
 , 
1. 分數顯示 15->30->40
2. Deuce情況判定
3. 獲勝條件判定
3.3 電腦玩家接球使用人工智
慧
Predict falling location
計算時間並揮拍,拍子與球碰撞
Change  velocity of Ball
Match motion
根據兩frame的 做
相減,得到三維向量
 ,根據 查表得M
x
y
z
M
+
+
+
1
-
+
+
2
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Give S if C==1
3.2 規則與碰撞判定
碰撞判定
球與人、場地、球網的碰撞決定
 ,  的變化
 , 
規則判定
1. 失誤
2. Ace, Return Ace, Out….
3. 球對球網
4. 球對球拍
Change  velocity of Ball
Display
3.4 Player 接球
Give  , 
If T==1
Hit zone detect
If ( (, − , <  && , − , <
 ) &&M!=0 )
Match motion
 , 
Give  , 
If T==0
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Change  velocity of Ball
40
5.3 玩家與遊戲間互動 -參數對照表 (2/6)
 : Location of player’s right hand point 相對於Kinect.
 : Location of player’s torso point 相對於Kinect.
 : Location of player’s location in Unity3D.
 : Location of ball in Unity3D.
 : Velocity of ball in Unity3D.
 : Collision times of ball with court.
 : 兩張frame內,右手的距離(三維向量)
M : Which command match our motion. 0 is none.
 : 揮拍前與球的距離,尚未實作固令
 : Player’s score
 :
S:
C:
T:
CPU’s score
誰得分(1為玩家 2為電腦)
是否計算
最後一次誰擊球(1為玩家 0為電腦)
41
5.3 玩家與遊戲間互動 (3/6)
3. Play and Display by Unity
3.5 分數判定
3.1 發球(假設為玩家擊球)
拋球
改變球的速度 為(0,2,0),使其往
上
C set to 0
 , 
1. 分數顯示 15->30->40
2. Deuce情況判定
3. 獲勝條件判定
3.3 電腦玩家接球使用人工智
慧
Predict falling location
計算時間並揮拍,拍子與球碰撞
Change  velocity of Ball
Match motion
根據兩frame的 做
相減,得到三維向量
 ,根據 查表得M
x
y
z
M
+
+
+
1
-
+
+
2
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Give S if C==1
3.2 規則與碰撞判定
碰撞判定
球與人、場地、球網的碰撞決定
 ,  的變化
 , 
規則判定
1. 失分
2. Ace, Return Ace, Out….
3. 球對球網
4. 球對球拍
Change  velocity of Ball
Display
3.4 Player 接球
Give  , 
If T==1
檢測玩家是否在球附近
If ( (, − , <  && , − , <
 ) &&M!=0 )
Match motion
 , 
Give  , 
If T==0
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Change  velocity of Ball
42
5.3 玩家與遊戲間互動 (4/6)
3. Play and Display by Unity
3.5 分數判定
3.1 發球(假設為玩家擊球)
拋球
改變球的速度 為(0,2,0),使其往
上
C set to 0
 , 
1. 分數顯示 15->30->40
2. Deuce情況判定
3. 獲勝條件判定
3.3 電腦玩家接球使用人工智
慧
Predict falling location
計算時間並揮拍,拍子與球碰撞
Change  velocity of Ball
Match motion
根據兩frame的 做
相減,得到三維向量
 ,根據 查表得M
x
y
z
M
+
+
+
1
-
+
+
2
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Give S if C==1
3.2 規則與碰撞判定
碰撞判定
球與人、場地、球網的碰撞決定
 ,  的變化
 , 
規則判定
1. 失分
2. Ace, Return Ace, Out….
3. 球對球網
4. 球對球拍
Change  velocity of Ball
3.4 Player 接球
Give  , 
If T==1
檢測玩家是否在球附近
If ( (, − , <  && , − , <
 ) &&M!=0 )
Match motion
 , 
Give  , 
If T==0
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Change  velocity of Ball
43
Display
3.2與3.3之間數值傳遞不斷進行,因為球的狀態
需要再3.2中不斷更新
5.3 玩家與遊戲間互動 (5/6)
3. Play and Display by Unity
3.5 分數判定
3.1 發球(假設為玩家擊球)
拋球
改變球的速度 為(0,2,0),使其往
上
C set to 0
 , 
1. 分數顯示 15->30->40
2. Deuce情況判定
3. 獲勝條件判定
3.3 電腦玩家接球使用人工智
慧
Predict falling location
計算時間並揮拍,拍子與球碰撞
Change  velocity of Ball
Match motion
根據兩frame的 做
相減,得到三維向量
 ,根據 查表得M
x
y
z
M
+
+
+
1
-
+
+
2
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Give S if C==1
3.2 規則與碰撞判定
碰撞判定
球與人、場地、球網的碰撞決定
 ,  的變化
 , 
規則判定
1. 失分
2. Ace, Return Ace, Out….
3. 球對球網
4. 球對球拍
Change  velocity of Ball
3.4 Player 接球
Give  , 
If T==1
檢測玩家是否在球附近
If ( (, − , <  && , − , <
 ) &&M!=0 )
Match motion
 , 
Give  , 
If T==0
揮拍
根據M來選擇動作並改變 ,拍
子與球碰撞
Change  velocity of Ball
44
Display
3.2與3.4之間數值傳遞不斷進行,因為球的狀
態需要再3.2中不斷更新,以左方突來說玩家
不在球附近,儘管有揮拍動作但還是無法回
擊球,因此碰撞判定得知球碰地兩下而沒人
接,規則判定為失分,接球失敗,進入分數
判定。
5.3 玩家與遊戲間互動 (6/6)
3. Play and Display by Unity
3.5 分數判定
3.1 發球(假設為玩家擊球)
拋球
改變球的速度 為(0,2,0),使其往
上
C set to 0
 , 
1. 分數顯示 15->30->40
2. Deuce情況判定
3. 獲勝條件判定
3.3 電腦玩家接球使用人工智
慧
Predict falling location
Change  velocity of Ball
Match motion
根據兩frame的 做
相減,得到三維向量
 ,根據 查表得M
x
y
z
M
+
+
+
1
-
+
+
2
揮拍
根據M來選擇動作並改變
Give S if C==1
3.2 規則與碰撞判定
碰撞
球與人、場地、球網、拍子的碰
撞決定  ,  的變化
 , 
規則
1. 失分
2. Ace, Return Ace, Out….
3. 球對球網
4. 球對球拍
Change  -- velocity of Ball
Display
3.4 Player 接球
Give  , 
If T==1
檢測玩家是否在球附近
If ( (, − , <  && , − , <
 ) &&M!=0 )
Match motion
 , 
Give  , 
If T==0
揮拍
根據M來選擇動作並改變
Change  -- velocity of Ball
45
5.3.1 發球 (1/2)
 向上拋球
 We use rigidbody. Rigidbody 類別控制script所附
加物體的基本特性,包含速度、力、加速度和
位置。
 Throw up the ball, so rigidbody.velocity.y=2.
 rigidbody在此為球體本身,底下的資料結構velocity
為其速度,y則為y軸上的速度,在Unity中可隨時改
變物體的速度,而球已被加上鋼體,固往上丟後會
受重力影響到最高點後下墜。
46
5.3.1 發球 (2/2)
 擊球
 抓取兩frame的 ,假設第一張為,1 ,第二張
為,2 , = ,2 − ,1 ,將 查表得M。
x軸
y軸
z軸
Motion number M
+
+
+
0
+
-
+
1
-
+
+
2
-
-
+
3
 根據M做出不同揮拍動作並改變 。
47
5.3.2 規則與碰撞判定 (1/5)
 碰撞判定
 OnTriggerEnter()
 在script中使用,可用來偵測是否發生碰撞
 使用此法可偵測球與指定物件碰撞
Ball
 = 0
Tennis Court
In court’s script:
OnTriggerEnter(){
尋找物件“Ball”底下的ballmove script;
修改ballmove script的 ++;
}
48
5.3.2 規則與碰撞判定 (2/5)
 碰撞判定
 OnTriggerEnter()
 在script中使用,可用來偵測是否發生碰撞
 使用此法可偵測球與指定物件碰撞
Collision Happen!!!
 ++
Ball
 = 1
Tennis Court
In court script:
OnTriggerEnter(){
尋找物件“Ball”;
修改Ball的script並使 ++;
}
49
5.3.2 規則與碰撞判定 (3/5)
 碰撞判定
 球與拍子的碰撞
 Lichen: 兩者皆為鋼體,可由系統決定碰撞後球飛出
的方向或將球的速度與方向寫成幾個固定的數值。
  =0 (打擊後落地次數應重算)
 T從0與1間交換 (T儲存最後一次打擊的人物編號)
 球與場地的碰撞
 發生碰撞則 ++,  ++,當 ≥ 2實作規則判定(出
界或得分)
50
5.3.2 規則與碰撞判定 (4/5)
 得分規則
 變數儲存
  計算落地次數,被擊出則歸零
 來計算最後一次是誰打擊(方便計算分數)
  總落地次數,S來判斷誰得分,C來開啟分數統計
 例外判定
 雙發失誤
 Ace, Return Ace
51
5.3.2 規則與碰撞判定 (5/5)
 舉例
 Ace的情況 (發球即得分)
  計算落地次數,被擊出則歸零
 來計算最後一次是誰打擊(方便計算分數)
  總落地次數,S判斷誰得分,C=1時開啟分數統計
玩家發球
 = 0(球擊出)
T=1(最後一次為玩家擊球)
 =0(尚未落地)
球落地一次
 = 1
 =1
T=1
球落地兩次(電腦漏接)
 = 2
T=1
 =2
T為1,而 =2,已可判定勝負,故S為
1(玩家得分),C設為1,開啟分數計算
52
5.3.3 AI接球
 以下為 AI 接球的動作
1. 預測球的落點
2. 計算時間是否足夠
a) 時間足夠: 扣殺
b) 時間不夠: 落地後擊球
53
5.3.3.1 預測球的落點
 We predict falling location by physics.
 以下為我們的推導公式
 我們將0 分量切成 ,  ,  ,與落第時間相關的僅有
 ,根據萬有引力算距離的公式為h = 0  −
由此方法可算出 =
0 ± 0 2 −2ℎ

1
 2 ,
2
,而負不合,故
 (球的預設落點位置)為( , 0,  )
54
5.3.3.2 計算時間
 計算時間方法
 變數




 : 電腦玩家剩下多少時間可以擊球
 : 等待或直接扣殺的基準時間值
 : 電腦與球的距離
 : 電腦人物移動速度
 方法
 當4.4.1電腦預測落點完畢後,電腦可求出與落點的
距離 ,而 /  (距離/速度=時間)則能算出 ,當
 ≥  (來不及直接追上),則等待球落地後回擊,
除此之外,扣殺。
55
5.3.4 玩家回擊
 回擊流程
1. 必須先偵測球是否在人物附近,設定容忍距離
為 ,判斷是否成立
(, − , <  && , − , <  )
成立後再判斷是否玩家有動作出現,若有則回
到發球的查表動作(詳見5.3.1),腳色會自動追球
並回擊。
2. 若不在人物附近或玩家無動作判定,判定為漏
接,則系統進入分數判定。
56
5.3.5 分數判定
 分數判定方法
 變數
 Input: C與S (當C為1則進入分數判定,S代表誰得分)
 Output: 使用 ,  來記錄分數
 方法
 為避免不停計算分數,故我們只有當C==1的時候再
分析S判定得分,將分數加於 ,  ,處理完後C歸
零,回到發球狀態。
Lichen: 目前只考慮一小場的狀況,故沒有總計分的
變數,之後會加上,並附上搶七的狀況。
57
6. Animated Tennis Game Display
 After click the “play”. Unity can display our
object.
Play button
58
6. Animated Tennis Game Display
 Unity will collect object’s information, and
display by the information.
59
7. Schedule (1/3)
 We find UnityWrapper can reduce our work
time.
 After









9/13 開學(專題進度會拖慢)
9/15 美工物體(拍子+球)完成
9/22 將2D版本移植至3D版本
10/7 3D場景加入+遊戲選單
10/12 3D人物模組整合進遊戲引擎
10/15 3D完成(3D物體+場景)
11/1 3D版本全完成、美工精緻化開始
12/1 最終版本完成、最佳化與額外功能增加開始
12/30 最終demo準備
60
7. Schedule (2/3)
Project
1) 2D版本總製作時間
2) 3D版本總製作時間
3) 程式測試、最佳化、美工
: Check Point
07
08
09
2011
10
11
12
61
7. Schedule (3/3)
3D版本總製作時間
1) 將2D版本移植至3D版本
2) 3D場景加入
3) 人物模組整合進遊戲引擎
4) 拍子、球、球網、人物
5) 規則與計分
6) OpenNI研究
7) 整合
: Check Point
07
08
09
2011
10
11
12
62
8. Reference
63

similar documents