2012年8月26日 星期日

Real Escape 場景3D分享


Real Escape 場景 基本上不是一個很難的3D
值得一提的是
一開始貼圖沒優化,效能極差
由於我想要效能好,
3D模型貼圖重整好幾次
以下是調整的細節

1.模型的面數只有約6000


































2.整個場景沒用到任何燈光,而是用LightMap取代

























3.另外在網上找到一個模型只用一個Shader的效能較好




Real Escape 創作概念


我來介紹一下這遊戲
















如同遊戲名稱,一目了然這遊戲就是個"真實"的密室脫逃遊戲
基本上我不是個密室脫逃遊戲迷
只是我覺得密室脫逃遊戲很適合做出"真實"的感覺


Real1
我運用iPhone/iPad的陀螺儀,讓遊戲可以隨著玩家的旋轉而改變鏡頭

















Real2
要讓玩家能更融入整個情境,所以我選擇恐怖風格,整體風格參考Silent Hill

















Real3
謎題儘量設計的"真實",符合邏輯,當然只能盡量,如果完全符合邏輯應該很難設計謎題
















Real4
遊戲中的提示有精心設計過,當你卡住時,可以按右上角的頭腦回憶,回憶會有三種結果,得不得到提示完全憑運氣
1.得到有用的提示
2.想到之前發生的事
3.完全想不到東西

Real Escape 創作分享



想要做一種新體驗的遊戲,在這樣的想法下,產出我第一個ios App

從剛開始只有自己很熱,到中間一直被澆息熱情,最後無論如何還是要把它做出來,讓我體會到,做一個遊戲真的要有耐心,信心和決心

我是第一次做ios App
剛開始完全不知所措,因為我只會3D與Flash
本來想把程式外發,但是外發程式應該會做不到我想要的水平
第二個想法是學IOS的原生程式,我買了二本很厚的書,看沒二頁就放棄了,
畢竟要用IOS的原生程式寫3D這不是一個人可以做的事,
最後找到了unity3D,那時台灣應該還沒很流行,市面上也只有一本很淺的書
決定用它最主要有以下幾個原因:
1.當然是因為他免費(這個軟體商行銷方式真的不錯,先讓軟體免費而達到普及,再用Pro或轉到其他平台來收費)
2.他的界面與MAYA大致相同,連快捷鍵也差不多,好上手
3.程式方面我使用的是javaScript,程式語法貼近Flash As3

當然程式方面我剛開始還是寫得很痛苦,畢竟當時台灣還不是很普及,中文資料不是很多,我英文又不好
最痛苦的是陀螺儀的程式,unity3D沒有內建
我翻遍所有的中英文資料,才找到外掛 Prime31 DeviceMotion http://prime31.com/unity/
又花了二個月才完整了解陀螺儀概念,一度我還以為我寫不出來了><"

在行銷方面:
畢竟是第一個案子,我們天真的拍了一個宣傳影片,想要用另類搞笑的手法來讓宅男注意到這個遊戲
這個影片只花了5萬元(包括演員,道具,攝影),剪接與特效我們自己來
我是覺得整體感還不錯,就是不夠B級,沒達到病毒的效果


遊戲上架後的結果:
台面上的結果看起來還不錯,台灣的AppStore有二天是付費不分類第一,日本也有衝到遊戲類前15
但營收卻比想像差很多,讓我有點失望
幸好有很多人對這個遊戲給予很高的評價,還有人說這是他玩過最好的密室脫逃遊戲

大部份的負評都是整個故事太短
在此我對覺得遊戲太短的玩家說聲抱歉
畢竟開發人力有限(大多都是我一個人)
我覺得如果人力有限寧願遊戲短但是精緻,有趣,細節多
也不要遊戲長但是粗糙,一看就不想玩

試著把自己關在房間把燈關掉,玩這個遊戲
透過iPhone/iPad看出去,想像自己被關在密室
我想賣的就是這種遊戲的體驗!!

2012年8月17日 星期五

實踐 unity event listener for javaScript And C#

我上網找過許多的資料,基本上javaScript 實踐 event listener 有困難,必須搭配C#
以下是我測試成功的結果


EventManager.cs  (放於Plugins資料夾裡)
===================================


using UnityEngine;
using System;
using System.Collections.Generic;
using System.Collections;

public class EventManager : MonoBehaviour{
public static event Action<string> TestEvent;
public static void TestEventError(string error){
 if( TestEvent != null )
  TestEvent(error);
 }
}


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



TestEvent.js
===================================


function Start () {
 EventManager.TestEvent += onTestEvent;//偵聽事件
 EventManager.TestEventError("Message");//傳送事件,可於任何地方
}

function onTestEvent(error:String){
 print(error);
 EventManager.TestEvent -= onTestEvent;//取消偵聽事件
}



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