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