2022年1月28日 星期五
幻夢時刻: 隱私權政策
本遊戲會使用到的個人資訊和功能如下
1.相機影像: 本程式使用相機影像來實現擴增實境(AR)與人體骨架追蹤效果,程式不會在任何情況下上傳或紀錄您的相機影像
2.定位權限: 具環境辨識與互動能力的AR體驗需要定位權限,程式不會在任何情況下上傳或紀錄您的定位資訊
2021年2月5日 星期五
2020 年度報告
分貝貓貓
2020.1.11
那天下午我在某間住家附近的咖啡廳進行程式架構設計,突然覺得為什麼咖啡廳會那麼吵雜呢?
觀望一下四周,發現原因大概要分成兩個,首先是大家開心的跟友人聊天時,很容易不自覺就忘記注意自身音量,而氣氛歡騰的時候對方或是第三者也很難提醒,其次是惡性循環,當某一桌開始很大聲,其他桌就容易聽不清楚,就會也不自覺變大聲,最終就導致整個咖啡廳變得很吵雜
所以我抽出一張新的白紙,想著能不能有甚麼方式,可以在某桌客人聊天音量增大時,友善的提醒,於是就畫了分貝貓貓的設計稿
主要是希望能設計一隻可愛的貓,平常在箱子裡面,如果有人講話很吵就會打開蓋子,對客人施壓,因為貓是一種可愛又任性的生物,所以我想像客人會心甘情願的放低音量,然後說:
"噓,我們吵到貓貓了"
後來去書局買了必要的材料,然後又買了一隻貓布偶,分貝貓貓就誕生了
主要原理是利用麥克風偵測音量,如果一段時間的累計音量超過閾值,貓貓就會出來壓迫性凝視
但幾次和親友吃飯都帶分貝貓貓去實驗後,發現有兩個問題,其一是環境差異太大,有些環境雖然有音量但可能因為開闊不會覺得很吵,但是分貝貓貓可能太敏感就會一直跑出來,甚至該桌成員都沒有說話的情況
其次我主要架構使用Arduiono 加上 伺服馬達,但那時候透過Arduino供電的馬達力量很不足,以致貓貓常常出不來,或是出來了就回不去
2020.6.11
決定開始升級分貝貓貓,首先我幫分貝貓貓加上LCD面板和搖桿,讓分貝貓貓變成可以根據現場情況調整敏感度
並且再幫分貝貓貓的伺服馬達加上外接的電池盒,分貝貓貓出來和回去的穩定性頓時提升到非常理想的狀態
馬達力量很足夠之後,也可以讓貓貓的出來和回去有變化,例如慢慢的回去
"嘿! 我會,一直,一直,一直盯著你們"
目前是有個有興趣的學弟正在嘗試能不能用體積更小,又更雅致的設計,實現同樣的概念
Evolver紅蓮
Evolver系列研究一直在研究是否能使用ML,來自動生成可以和使用者互動的物理性物件
出發點有二,其一是XR(AR/VR/MR)未來的UX傾向一定是使用肢體或手勢來控制,也就是說很容易不是鍵盤之類可預測的固定輸入,而是會產生不可預測的手勢軌跡等
所以以遊戲為例,以往遊戲開發很容易使用固定的人物招式動畫,配上固定的物理結果,例如按下"S"鍵,遊戲角色會揮出右拳,擊退對手1公尺,精緻的遊戲根據打的部位或時機不同,對手的反應動畫可能會不同,但最終也在有限的範圍內,因此不論多精緻的遊戲幾乎玩久都會膩
然而XR遊戲可能是讓使用者自己揮拳,如果揮很小力或很大力,打的部位或軌跡不同,對手卻不能自然的反應承受的物理現象,會是很大的實作缺憾
其二就是承上述,隨著使用者的輸入介面改變,輸入組合與變化急遽增加,如果用傳統的方式製作和玩家互動的動畫,遊戲開發的時間和成本應該都會劇烈提高,並且AI理論上難以實作,因為如果是寫死的程式,很容易被玩家找出固定模式就流於單調或套招
因此Evolver研究就是希望製作純物理性的角色,也就是不是靠動畫師去細膩的模擬被碰撞或打擊的動作,而是角色本身就有自然的物理屬性,這個技術行之有年,物理性人物在Unity被稱為Ragdoll
但下一階段是現行尚不成熟的領域,"讓物理性角色自行動起來",這個實作難度很高,以人體來說光是雙足平衡的站立就是奇蹟般的技巧,想用程式寫出能操作物理性肢體的人物是極端困難,原本主流形式是虛擬人物一般是動畫人物,直到被玩家打擊或擊飛才切換成物理性人物
但這樣在XR互動就是不夠浪漫,例如如果一個虛擬角色攻擊你,你無法根據你和虛擬角色互相的出力,呈現自然的反應,就用Wii的拳擊遊戲為例,相信很多人都發現只要出拳就好,不管力道,敵人被打後仰程度都相同,更不會出現卡住對方或力量抵消的情況
因此為了實現能理想使用在XR的人物,並且期待降低未來遊戲或XR開發者的工作量,當知曉ML技術後就開始自行嘗試這個研發計畫
"Evolver紅蓮: 使用ML讓物理性人物能自行學會指定互動"
2020.3.23
2020.4.7
2020.4.25
現階段各種紅蓮研究仍然在進行中,不過近期幾次想把研究複雜度提升上去,例如虛擬人物對打,都一直遭遇硬體限制,也就是我目前能用來訓練ML的電腦效能不夠,嗚嗚
目前暫時都回歸進行一些細部研究,例如腳踝可動性對ML成果的差異,或是如何引導靜止站立等等,希望2021也能訓練出有趣的新成果來和大家分享
窗外桃源
暑假和朋友組團去參加XR開發者競賽發想的題目,主要構想是讓捷運車廂變成VR的載體,車廂窗戶會投放不同程式或是異國風光,讓乘客搭著捷運的時候就宛如在世界各地旅行
那時候為了拍概念影片,畫了一張分鏡稿
然後最終概念影片成品
這個構想雖然評審說很喜歡,但最後沒有得獎,可能實務方面太困難了,但對我來說最大收穫是發現了一個剪片很厲害的學妹,多虧她後來另一側的行銷影片才能循環出產
另一側
簡介
- 那時候Unity開發Android和iOS要付對學生來說極端高額的年費
- 那時候GPS定位很不穩定
- 那時候我技術很不成熟
功能
2019.10 基礎功能
2020.1 空投
2020.1.26 特斯拉頻道
2020.2.3 相機
和朋友用雛型玩了幾次之後,真心覺得發生互動的瞬間都很有趣,就覺得如果能截圖、錄影,甚至直播會很好玩,就做了相機功能
2020.2.4 熱更新
由於iOS對APP把關很嚴格,如果每次遊戲內容異動都要走一次更新流程會很不方便,因此一直以來都有程式碼以外,可以熱更新的技術,也就是可以更改一些動態載入的檔案,就幫遊戲換封面圖或是增加關卡
2020.3.17 SafeArea
2020.3.24 任務系統
希望能讓玩家有行動的理由、樂趣和回饋,所以設計了任務系統,會提供一些目標和獎勵,讓玩家可以選擇玩法
2020.5.1 商店
製作了讓玩家可以購買武器的地方,讓玩家如果賺了錢,就可以購買新武器,感受不同武器能造成的玩法或戰略變化
2020.5.12 諮詢系統
主要是設計成讓玩家可以跟遊戲內神秘組織的成員說說話,了解一些新手入門的資訊或是遊戲人物的因緣與故事
2020.5.22 武裝研發
因為這個遊戲是以在現實中遊玩為核心,因此也希望能實現"讓玩家可以參與選擇和推進遊戲內容"的理想,設計了武裝研發的系統
2020.6.5 種族
新增了種族的系統,玩家未來可以選擇不同種族,來成為戰略定位不同的特務,但目前玩家可以選擇種族,獲取種族的管道卻極端有限,是後續活動和開發的優先向度之一
2020.6.5 排行榜
可以讓玩家挑戰成為最強特務,或是看到誰是戰爭中的英雄或傳奇殺手,類似這種感覺的系統XDD
2020.6.21 異常狀態攻擊
2020.6.25 登入介面
重製了遊戲的登入介面,並增加獨立的註冊、驗證信和忘記密碼頁面,這裡不得不說,Google Firebase套件實在太完整太好用了
2020.7.3 註冊人數
2020.8.18 星輝等級
2020.8.26 遊戲開場動畫
製作了遊戲開場動畫,希望能讓玩家入門,能了解遊戲世界觀和遊戲大致玩法
介面
2020.2.27 受傷特效
當玩家被攻擊,會根據武器的攻擊種類,在螢幕上留下特效,例如刀痕或彈孔,這是目前滿意度很高的設計,一目瞭然的知道自己被攻擊了,而且很帶感
2020.4.13 介面風格大更換
最後他們好像只能回覆制式回覆,所以像他們提問幾乎是沒意義的,我很感謝台灣獨立遊戲開發者的社群,我有兩三次已經不知道蘋果到底在擋我甚麼,都是去社群發問才得到比較好的方向
行銷影片
2020.2.17 另一側簡介影片
那時候嘗試製作一個簡介影片,讓人知道這是一個怎麼樣的遊戲,感謝我表妹們演出和幫我拍攝,剪片軟體使用的是OpenShot,是一個免費軟體,功能很齊全,但是我用起來體驗很不好,很容易卡而且輸出和預覽很容易不一致
2020.12 現實一旦開始改變就無法停止,只能失速狂奔 EP1-4
2021.1.2 擦身而過的女生,其實是個特務!? 10分鐘看懂特務遊戲【另一側】
2021.1.27 這一次的梅竹,你也能挺身而戰
雖然還是沒甚麼社群回響,不過我感覺這應該是一個超越我以往能力的影片,而且我感覺抓住了一些技術和想法,我猜我後面能因此製作出更有趣迷人的影片,理論上就是過年那一周XDD
活動
2020.6.27 模擬次元民夏洛爾
2020.8.21 松本清
2021.1.10 絕影
梅竹之爭
2020.10.31 望月韶光
2020.11.15 朔月時分
2020.12.1 望月韶光
2020.12.16 朔月時分
2020.12.28 望月韶光
2021.1.16 朔月時分
2021.1.23 一線之間
2021.1.30 望月韶光
結語
2014年11月23日 星期日
[Unity] Platform & Build
Unity可以開發和輸出到很多平台的遊戲
但是電腦很明顯和滑鼠操作模式不同,那關於同一種遊戲怎麼開發呢?
C#腳本:
可以使用定義(define)去為不同平台做區隔,好像會只有在輸出此平台時才會compile這段
ex:
#if UNITY_WEBPLAYER
//do what only on webplayer
#endif
UnityScript腳本:
沒有定義,但可以用if去判斷
ex:
if (Application.platform == RuntimePlatform.Android )
{
//do what only on Android
}
至於操作方法手機觸控等,Unity也有方便的存取方法這邊先不提了
輸出部分幾個心得:
1.Player Setting裡,Bundle Identifier不同,會使手機OS判斷APP為不同APP
所以如果手機上想要有同專案但不同版本的輸出,就是修改Bundle Identifier去實現
2.Android 可以輸出 android 專案 或直接輸出安裝檔
3.IOS 輸出必須要有 MAC電腦、Xcode工具、和IOS開發者付費帳號
但關於輸出Unity官方最近似乎再做很神的東西
Cloud Build:
http://unity3d.com/unity/cloud-build
要不是Pro一次要至少買一年
我真的就馬上要催錢下去了
Unity的領導團隊我還沒研究是誰
不過真的是我會感到害怕和五體投地的人物^ ^|||
[Unity] Facebook SDK
竟然離上次發文快一個半月了= =
這陣子比較主要的收穫首先大概就是FB和Unity的結合應用吧
開發網站教學:
https://developers.facebook.com/docs/unity/getting-started/canvas
一言以蔽之,開發網站的說明影片,好好看完
去載範例專案,上手就差不多了
剩下會遇到的問題主要是
1.FB APP 除了
| LOGIN PERMISSIONS |
|---|
3.結論: 目前覺得用來做登入功能算很方便,但要進行甚麼社交分析就會非常麻飯
2014年10月12日 星期日
[Unity] MonoBehaviour,腳本類別
其中腳本可以用三種語言撰寫C# and Boo 和 UnityScript
using UnityEngine;
using System.Collections;
public class MainPlayer : MonoBehaviour {
public string myName;
// Use this for initialization
void Start () {
Debug.Log("I am alive and my name is " + myName);
}
// Update is called once per frame
void Update () {
}
}
#pragma strict
var myName: String ;
function Start () {
Debug.Log("I am alive and my name is " + myName);
}function Update () {}關於腳本怎麼用,還是建議找會的人親自教最快,其次就是看圖文並茂的書或官網(http://docs.unity3d.com/Manual/ScriptingConcepts.html),這邊就不多解釋了
一樣只講比較心得和自己之前沒注意的地方
就是update系列function的應用 (如果還沒用過腳本,但還是想先了解,請點上方連結)
update function基本上都會根據硬體和需求有一個自己的更新頻率,並在遊戲期間不斷被執行
因此例如code
function Update () { transform.Translate(Vector3(0, 0, 1) * Time.deltaTime);}2.FixedUpdate:由於物理引擎的計算和普通Update頻率不同,而FixedUpdate正是以物理引擎頻率為更新頻路的Update Function,因此跟物理特性有關的程式如: rigidbody.AddForce()等,會建議寫在FixedUpdate以取得比較精準的結果
3.LateUpdate: 在Update和FixedUpdate結束後被呼叫,LateUpdate主要用途是用來將輔助先先後順序的程式碼可以更好的被分開,官方舉例是攝影機要追隨物體移動,那好的設計是物體在Update裡計算完移動後,才在LateUpdate更新攝影機在物體後的位置
這邊真的蠻重要的
不然之前都傻傻的混在一起寫,平白浪費了很多資源,程式碼也容易冗長混亂^ ^|||
[Unity] Collider
http://docs.unity3d.com/Manual/CollidersOverview.html
因為官網沒有圖,這次就不貼介紹了,畢竟都英文的
所以就由我來直接解釋吧
Collider就是碰撞框
物件附上碰撞框屬性之後就會賦予它偵測與其他物件碰撞的範圍和能力
有了碰撞框才能做出例如地面、牆壁、砲彈等等,能阻礙或擊中物體的效果
而碰撞框有好幾種形狀
主要有長方形、球形、膠囊型、圓柱形,比較異類的有地形碰撞框、Wheel Collider 、Mesh Collider(不知怎翻譯才好),一個物件可以利用多個碰撞框組成複雜的碰撞框,這邊想知道詳情請點上方官方教學連結
而碰撞框自身又有兩種類型
Trigger(觸發器)和非Trigger
在設計上觸發器類型的碰撞框通常用來做事件出發的應用(簡單來說就是用來偵測玩家或物件進入指定區域)
而非觸發器類型通常就是配合Rigidbody去實做物理現象的碰撞效果(兩顆球相撞)
觸發器碰撞過程會觸發
| OnTriggerEnter | OnTriggerEnter is called when the Collider other enters the trigger. |
| OnTriggerExit | OnTriggerExit is called when the Collider other has stopped touching the trigger. |
| OnTriggerStay | OnTriggerStay is called almost all the frames for every Collider other that is touching the trigger. |
| OnCollisionEnter | OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider. |
| OnCollisionExit | OnCollisionExit is called when this collider/rigidbody has stopped touching another rigidbody/collider. |
| OnCollisionStay | OnCollisionStay is called once per frame for every collider/rigidbody that is touching rigidbody/collider. |
| Collision detection occurs and messages are sent upon collision | ||||||
|---|---|---|---|---|---|---|
| Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider | |
| Static Collider | Y | |||||
| Rigidbody Collider | Y | Y | Y | |||
| Kinematic Rigidbody Collider | Y | |||||
| Static Trigger Collider | ||||||
| Rigidbody Trigger Collider | ||||||
| Kinematic Rigidbody Trigger Collider | ||||||
| Trigger messages are sent upon collision | ||||||
|---|---|---|---|---|---|---|
| Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider | |
| Static Collider | Y | Y | ||||
| Rigidbody Collider | Y | Y | Y | |||
| Kinematic Rigidbody Collider | Y | Y | Y | |||
| Static Trigger Collider | Y | Y | Y | Y | ||
| Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |
| Kinematic Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |
[Unity] Rigidbody
官網教學:
=======================================================
Rigidbody
SWITCH TO SCRIPTINGProperties
| Property: | Function: |
|---|---|
| Mass | The mass of the object (arbitrary units). You should not make masses more or less than 100 times that of other Rigidbodies. |
| Drag | How much air resistance affects the object when moving from forces. 0 means no air resistance, and infinity makes the object stop moving immediately. |
| Angular Drag | How much air resistance affects the object when rotating from torque. 0 means no air resistance. Note that you cannot make the object stop rotating just by setting its Angular Drag to infinity. |
| Use Gravity | If enabled, the object is affected by gravity. |
| Is Kinematic | If enabled, the object will not be driven by the physics engine, and can only be manipulated by its Transform. This is useful for moving platforms or if you want to animate a Rigidbody that has a HingeJoint attached. |
| Interpolate | Try one of the options only if you are seeing jerkiness in your Rigidbody’s movement. |
| None | No Interpolation is applied. |
| Interpolate | Transform is smoothed based on the Transform of the previous frame. |
| Extrapolate | Transform is smoothed based on the estimated Transform of the next frame. |
| Collision Detection | Used to prevent fast moving objects from passing through other objects without detecting collisions. |
| Discrete | Use Discreet collision detection against all other colliders in the scene. Other colliders will use Discreet collision detection when testing for collision against it. Used for normal collisions (This is the default value). |
| Continuous | Use Discrete collision detection against dynamic colliders (with a rigidbody) and continuous collision detection against static MeshColliders (without a rigidbody). Rigidbodies set to Continuous Dynamic will use continuous collision detection when testing for collision against this rigidbody. Other rigidbodies will use Discreet Collision detection. Used for objects which the Continuous Dynamic detection needs to collide with. (This has a big impact on physics performance, leave it set to Discrete, if you don’t have issues with collisions of fast objects) |
| Continuous Dynamic | Use continuous collision detection against objects set to Continuous and Continuous Dynamic Collision. It will also use continuous collision detection against static MeshColliders (without a rigidbody). For all other colliders it uses discreet collision detection. Used for fast moving objects. |
| Constraints | Restrictions on the Rigidbody’s motion:- |
| Freeze Position | Stops the Rigidbody moving in the world X, Y and Z axes selectively. |
| Freeze Rotation | Stops the Rigidbody rotating around the world X, Y and Z axes selectively. |















