關於遊戲製作、獨立開發以及未來展望 筆記

本文是 2014 台北遊戲開發者論壇 的其中一個主題演講筆記

關於遊戲製作、獨立開發以及未來展望
稻船敬二 (Comcept CEO)

Mighty No.9 這款遊戲是以「與玩家共同製作」來進行的,一起設計關卡、debug,但也並非所有建議都採納。在 Kickstarter 募資成功後,漸漸地也有一些日本的專案陸續出現在募資平台上。而募資金額建議三分之二在製作,三分之一在行銷。

製作人相當於公司的老闆,並非一定要參與遊戲製作,而是要將社員的作品拿去運用、推廣,獲得利益後讓公司持續穩定運轉。而稻船敬二是少數在大公司內會參與製作與發想的製作人。

製作人的作品走向簡單分成兩類,一種是單一的系列作,另一種則是多原創性作品,他希望大家都走向後者。也認為不要太相信所謂的市場調查,因為不一定正確也不全面,除了展覽的場合外更應該抽出時間親身到當地了解文化。

接著比較大公司與小團隊的差異:大公司人數眾多,傳話、開會的時間耗時,成本大。小團隊每人的重要性大、地位比較平等但意見也多。這邊也以員工離職對大公司及小團隊的影響來解釋大公司的優點。

遊戲的平台一開始都未定,先想遊戲內容再決定平台。由於智慧型手機興起,有許多非玩家變成輕度玩家,導致有許多傳統的遊戲公司開始朝向手機平台發展,低成本、低風險(相對於其他平台),但一方面又不想放棄原來的走向,所以只好以手機遊戲的獲利來填補傳統遊戲的成本(矛盾的心態)。

稻船敬二用報恩的心態以演講、教導的方式開設「稻船塾」,主要內容是遊戲設計、發想而非製作。課程是免費的,任何人都能參加,最重要的是對遊戲的熱情。由於日本遊戲界處在一種安逸、缺乏飢渴精神的狀態下,希望透過稻船塾改變現狀、活絡日本遊戲界。

目前稻船敬二在 IPC (Inflexion Point Capital) 擔任顧問,判斷一款遊戲值不值得投資。判斷標準不是畫面精美或是市面上已有的內容再改良的作品,而是沒見過的獨特作品。也呼籲投資者與開發者要互相尊重自己所沒有的專業。

你的遊戲要賣什麼? 筆記

本文是 2014 台北遊戲開發者論壇 的其中一個主題演講筆記

你的遊戲要賣什麼?
高偉傑 (Game Stew 開發團隊)

第一個作品很重要要好好做,最好能讓玩家印象深刻,然後培養成粉絲,做出一個品牌。

在遊戲中創造技術性討論的空間,例如像攻略、密技,一方面能成為玩家與玩家間討論的話題,另一方面若是幸運的話也許會有網站或雜誌出攻略或秘技增加曝光的機會。遊戲最好能設計成易玩難精、簡單卻深入,不管技術如何都能玩。

第一張截圖很重要,因為後面的截圖需要滑動才能看到,避免修改截圖,最好是第一張截圖就能讓玩家清楚這遊戲的核心內容。

作者以自身的作品為例,全部都是小小、精緻的單元劇,從畫面上看都是復古的像素畫風,每個作品的風格都很獨特或是說很怪,裡面也有隱喻的時事或是其他作品的梗讓人會心一笑。

總結來說,作品要有個性與其他遊戲做區隔化,不做大但是要精緻。

如何讓其他人看見你的作品 筆記

本文是 2014 台北遊戲開發者論壇 的其中一個主題演講筆記

如何讓其他人看見你的作品
Rami Ismail (Vlambeer 開發團隊)

盡量做原創作品而非常見類型的改良,並且要誠實以對做出自己想要的遊戲,不要隨波逐流做出目前正當紅的遊戲類型或玩法。

由於遊戲本身是藝術的結合體,同時也是一種開發者與玩家的溝通媒介,要如何傳達以及要傳達甚麼樣的內容就是重要的課題。而溝通的第一步就是磨光作品的使用者介面,並且以憤怒鳥的星等來舉例。

宣傳時必須用最多三個句子來描述遊戲,與其他遊戲相異的獨特點在哪,避免以最新、好玩、特別…等抽象的形容詞來介紹。

寄信給媒體時,先調查好媒體性質,並在遊戲釋出前提早一個月就寄,郵件主旨及內文前三句必須吸引人或是有值得報導的新聞點(Who, What, Why)且以第三人稱介紹方便複製貼上及附上媒體素材包。

有時媒體不回信不代表不喜歡,有可能是同時有另一款作品更值得報導,請試著一個星期後再寄,若有要求盡量答應,報導後也要有禮貌寫感謝信。

Vlambeer 的網站也有附上實用的工具包

註冊推播在 iOS 8 上失效

在 iOS 8 上編譯會出現以下 log :

registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later.

 

在 iOS 8 必須用 registerForRemoteNotifications 和 registerUserNotificationSettings 取代
以下程式碼同時支援 iOS 8 與 iOS 7

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings
                                                                             settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
                                                                             categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
        
}else {
        
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}

 

如果要檢查推播有沒有打開,這部份也要修改。

UIRemoteNotificationType types;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {

    types = [[UIApplication sharedApplication] currentUserNotificationSettings].types;

}else {

    types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
}

if (types == UIRemoteNotificationTypeNone) {
    // 推播未打開
}

shows user location 在 iOS 8 上失效

在 iOS 7 以及更早之前的版本,MapView 顯示使用者位置不需實作到 CLLocationManager ,現在都要了。

在 iOS 8 上編譯會出現以下 log :

Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

 

首先必須要修改 info.plist
新增 key值為 NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription
Value值為要出現在螢幕上的字,終於可以客製化訊息了!但也可以留白。
兩者差異僅在前者只有使用中才會定位,後者是在背景也會持續定位。

 

接著修改程式碼,第5行是重點

locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy=kCLLocationAccuracyBest;
        if([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            [locationManager requestWhenInUseAuthorization];
        }
        [locationManager startUpdatingLocation];

 

另外授權檢查部分也要修改,請注意4,5行的差異

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {

    if (
        ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)] && status != kCLAuthorizationStatusNotDetermined && status != kCLAuthorizationStatusAuthorizedWhenInUse) ||
        (![locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)] && status != kCLAuthorizationStatusNotDetermined && status != kCLAuthorizationStatusAuthorized)
        ) {

        NSString *message = @"您的手機目前並未開啟定位服務,如欲開啟定位服務,請至設定->隱私->定位服務,開啟本程式的定位服務功能";
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"無法定位" message:message delegate:nil cancelButtonTitle:@"確定" otherButtonTitles: nil];
        [alertView show];

    }else {

        [locationManager startUpdatingLocation];
    }
}

上面那行是 iOS 8 以上,第二行是 iOS 7 以下,因為 kCLAuthorizationStatusAuthorized 在 iOS 8 完全不能使用。

 

別的地方要這樣寫

CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
    
    if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorized) {

    // 開始定位

}else {

    // 顯示警告
}

多個 URL 跳轉判斷

使用社群 SDK 時會跳到另一個 App 要求授權再回來,這時需要判斷回來後要做什麼事。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
    if ([url.scheme isEqualToString:@"fbxxxxxxxxxx"]) {
        return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
        
    }else if ([url.scheme isEqualToString:@"wbxxxxxxxxxx"]) {
        return [WeiboSDK handleOpenURL:url delegate:self];
        
    }else if ([url.scheme isEqualToString:@"wxxxxxxxxxxx"]) {
        return [WXApi handleOpenURL:url delegate:self];
        
    }else if ([url.host isEqualToString:@"home"]) {
        // do something
        return YES;
    }

    return NO;
}

以上同時有 Facebook 微博 微信 以及回到此 App 的第一個畫面。

解決 navigation bar 與 toolbar 背景顏色不一致

在 navigation bar 設定了背景顏色,並且右邊的 navigation item 使用 toolbar 來包2個 button 。

結果不但背景是預設的灰白色,而且上方還有細細的黑線。
toolbar1

這才是我想要的樣子~
toolbar2

    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 90, 44)];
    toolBar.barStyle = -1;   //透明背景
    toolBar.clipsToBounds = YES;   //修正上方的線
    [toolBar setItems:@[shareBarButton, favoriteBarButton] animated:NO];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolBar];

personal hotspot 造成 status bar 高度改變

有兩種情況會讓 Status Bar 高度變成 40px (原來的兩倍)
1.打開個人熱點時
2.當有來電不接回到 App 時

模擬器也可以模擬40px 的 Status Bar
Hardware → Toggle In-Call Status Bar

使用 [[UIApplication sharedApplication] statusBarFrame].size.height 取得高度
或是使用 [UIScreen mainScreen].applicationFrame.size.height 取得扣除 Status Bar 的畫面高度

如果要兼容 iOS 6 與 iOS 7
除了元件的位置以及高度外
contentInset 與 contentOffset 也都要注意一下

如果無聊了話可以試試讓 Status Bar 變成 40px 再檢查別人 App 畫面有沒有怪怪的,畢竟不是所有開發者都會注意到此例外。

improper Advertising identifier [IDFA] Usage

IDFA 全名是 Identifier for Advertisers
我有用 AdMob SDK ,在驗證時出現這警告,沒理它直接上傳,狀態變成 Upload Received ,正當我還沉浸在愉悅中時狀態又變成 Invalid Binary ... (我還第一次遇到這種狀態)

好吧 原來還要另外做設定
在 Advertising Identifier 這區塊要做調整

Does this app use the Advertising Identifier (IDFA)?

選 Yes

This app uses the Advertising Identifier to (select all that apply):
Serve advertisements within the app

Limit Ad Tracking setting in iOS
打勾

做完上述設定後,驗證不再有警告,也順利上傳啦~

解決 小米/紅米 adb devices 找不到的問題

USB線連接電腦與手機

至手機 設定
→ 開發人員選項 → 開啟開發人員選項 以及 USB偵錯 打開
→ 安全和隱私 → 不明的來源 打開
手機撥打 *#*#717717#*#* 打勾 一律允許透過這台電腦進行

中途會多次安裝驅動程式,等待安裝完成再進行下個步驟
若找不到 開發人員選項 請到 關於手機 → Android版本 那一欄連點多次即可開啟

在 Windows 8.1 + Android Studio 測試過