2017年3月23日 星期四

虛擬實境 Week 05_周冠羽_立人老師影片教學_複習_碰撞搖擺_用Tag找到場景人物_轉VR視角_我的蹺蹺板會溺水翻船問題解決_改為第一視角_加音效_逼真化體驗


在Load老師雲端專案時候



接著在進行這次Seasaw專案載入測試時都會跳出此視窗並且

跳出畫面(時有時無)

這裡做完了一次 Unity Load  專案的測試

================================================================
緊接著我們可以嘗試再照老師影片做一次專案


首先再一次開啟登入SteamVR

右上角  VR  按


開啟 Unity

登入  開新Scene


看  老師第一個影片

https://drive.google.com/drive/folders/0B3U4TWW5it5nQkRUaWV1dTdXenM



這次我從  第二部影片先做  學習
將PC Project 轉為  VR project

這次是要將一個   Seasaw 專案  轉為  VR  專案

截自 立人老師影片教學

改變兩個顏色的方塊質量

自動上下擺動


地板部分Floor
用 Cube 或 Plane  做  都可以

右側   Add component

---> Physics --> RigidBody

設置   Use Gravity : false ---> 不然地板會往下掉

           Is Kinemaic : true ---> 設置為 true (動力學)開啟  不受Unity物理引擎影響需靠程式改變






軸程Bearing

用圓柱(Cylinder)做

調整   Rotation --> X:90 Y:90

按R 拉長

並沒有 RigidBody

因為我們 敲敲板  晃動
不是跨在 Bearing上的



再來是木板
有 RigidBody
有重力
有  Freeze Position  X Y Z
有  Freeze Rotation X Y         -------> Z (藍色箭頭)

固定  中心點




拉兩個 Cube 做  人 (在板子上方的人物件)

PearsonA 、  PearsonB


Mass 一個設 70   一個  75

有 Box Collider

(在板子設定觸發碰撞空物件Collider)
再拉兩個 地板  GroundA   GroundB

皆為  Empty Object

並各自添加  Box Collider





Unity 重量 是 以  Kg 為 單位

在 Unity 基本上  碰撞  

分為兩種

1. Triggerd
2. Collision

這裡我們兩個  Empty Object 皆把 Is Triggerd  勾起

待會寫程式觸發

寫 ReversionScript.cs  的 腳本

目的  以改變質量來使Board 搖擺

Step1. 先找到 這兩個人物件的 Tag
Step2. 再去更改質量


Add Tag點進去  新增兩個  Tag

取名為  程式碼中的

"Person A"     "Person B"    中間有一個  Space  小心!!!!



加上 程式腳本 ReversionScript   進行測試

使用 http://hilite.me/ 內嵌  code 至  Blog


ReversionScript.cs


using UnityEngine;
using System.Collections;

public class ReversionScript : MonoBehaviour {
 GameObject personA,personB;
 Rigidbody rigidA,rigidB;
 float heavyWeight=20.0f; // 要往下掉的角色,較重的質量  20公斤
 float lightWeight=1f;  // 要往上昇的角色,較輕的質量  1公斤
 // Use this for initialization

 /// <summary>
 /// Start this instance.
 /// 一些初始值設定
 /// </summary>
 void Start () {
  // 以 Tag 找到 Person A 與 Person B 兩個物件並記錄下來
  personA = GameObject.FindGameObjectWithTag ("Person A");
  personB = GameObject.FindGameObjectWithTag ("Person B");
  rigidA = personA.GetComponent<Rigidbody> ();
  rigidB = personB.GetComponent<Rigidbody> ();
 }

 /// <summary>
 /// Raises the trigger enter event.
 /// 寫在OnTriggerEnter()中
 /// 一個參數 Collider  對方資訊
 /// </summary>
 /// <param name="other">Other.</param>
 void OnTriggerEnter(Collider other)
 {
  // 碰撞到時觸發的擯制程式
  if (other.tag=="Person A"){
   // 目前落地的是 Person A,質量改小
   rigidA.mass=lightWeight;
   // 對方是 Person B,質量改大
   rigidB.mass=heavyWeight;
  }
  else if (other.tag=="Person B"){
   //  目前落地的是 Person B,質量改小
   rigidB.mass=lightWeight;
   // 對方是 Person A,質量改大
   rigidA.mass=heavyWeight;
  }
 }



 /*
 // Update is called once per frame
 void Update () {
 
 }
 */
}


然後我發現  我的 蹺蹺板會溺水翻船





還是一樣翻船了



所以後來就
解決了  蹺蹺板  板子物件 還是會左右搖晃(擺動)的問題


解決問題方法流程

Step1. 滑鼠 點 板子   然後以自己觀察 去看目前 板子是依照哪一個座標方向軸作為旋轉軸

以目前我自己重新做的這份專案來看






緊接著還有一個小問題


我這個遊戲的練習專案有明顯的 問題就是

坐在 蹺蹺板上的   PersonA 跟 PersonB 沒有貼至在 板子 上

會有漂浮狀況

再把兩個物件拉低一些 即可



目前先完成了  所有專案的重造輪子

===================================================================

專案  VR 化後






練習將它逼真











======================================================================
老師影片中有提到  在 Unity 中

有頻繁使用到  RigidBody(鋼體)

鋼體在  蹺蹺板 專案中就有設置到

一般在產生出鋼體後會有細微綠邊框圍繞在Cube物件上



滑鼠放置拖移即可更改Collider位置



碰撞  可分為兩種

1. Triggerd
2. Collision



一個Unity專案  四種鋼體施加力 的功能特訓

場景:  一個Plane 、 四個Cube

功能 : 寫 4個 腳本   按下按鈕(鍵盤1、2、3、4)
控制:
以y方向之向上力 、
以y為旋轉軸之旋轉力、
以某一位置施力、
以某一位置施加爆炸力



先使用 SourceTree 上傳

https://github.com/github/gitignore/blob/master/Unity.gitignore

四種不同力功能觀察
https://github.com/dryjoker/UnityBasicSkill

功能演示:





加音效到VR  Unity專案之中

使用到了   篮球碰篮板的声音
http://sc.chinaz.com/yinxiao/150614074092.htm#down
http://xunlei.sc.chinaz.com/Files/DownLoad/sound1/201506/5971.mp3

Unity 中  提供  Audio Component

聲音的對象(物件)
Audio Clip 屬性
Audio Listener
Audio Source 負責播放 Audio Clip中的文件
Audio Reverb Zones
Audio Effects (PRO only)



音效教學

https://www.youtube.com/watch?v=iS0DTJfUulA








































沒有留言:

張貼留言