Android無法安裝Apk的處理方式

問題描述:

同事手機一直無法安裝目前專案的APK, 也不能確定發生什麼事?

處置:

  1. 在手機直接安裝沒有任何錯誤訊息, 嘗試使用adb shell pm install的方式來安裝, 可以看到Failure [INSTALL_FAILED_CONTAINER_ERROR]錯誤。

  2. 經查詢處理方式:
    link
    要刪除特定檔案, 感覺要用戶這樣做應該會被客訴到死..

  3. 同事在安裝adb shell pm install時加上-f強制安裝在內部系統內存發現可以安裝成功, 將尋找方向移到ApplicationInstallLocation上。
    經查詢有一些文章
    link
    link2
    指出只要Player settings在Android項的Install Location改為Automatic即可, 測試後可行。

Unity Culling Group簡介

以下內容主要來自公司內部分享

Culling Group (Unity)

link
該API於Unity 5.1後版本出現
主要用於攝影機可見範圍判定
個人感覺算是容易使用
API中提供距離判定功能, 以長度為主
物件在出現與消失, 以及距離段變更會有通知

主要用他來決定一些特效是否要產出與播放以及當看不到時關閉某些效果
主要的考量點還是在能少算就少算

// 建立  
CullingGroup group = new CullingGroup();  

一開始的Group建立

// 設置攝影機  
group.targetCamera = Camera.main;  

設定攝影機, 攝影機可以之後再切換, 切換後會通知你物件的可見狀況

// 設定BoundingSphere  
BoundingSphere[] spheres = new BoundingSphere[1000];
spheres[0] = new BoundingSphere(Vector3.zero, 1f);
group.SetBoundingSpheres(spheres);
group.SetBoundingSphereCount(1);

這裡主要是設定BoundingSphere, 之後只要更新位置, 就可以收到Culling Group的通知, BoundingSphere的大小依照需要來調整
另外是BoundingSphere的個數因為要丟一個array進去, 個人感覺需要另外作管理, 一開始給一個大一點的array後來再去管理裡面的使用狀況

// 關閉
group.Dispose();
group = null;

要記得不用時一定要關閉他, 不做這個動作下一次可能運作會不正常, 且Unity會跳一個error來提示

// 區間帶設置
group.SetBoundingDistances(new float[] { 5000, 10000, 15000, 20000, 25000});
int DistanceBand = group.GetDistance(Idx);

這裡主要是設置區間帶, 在可視狀態變更時會一起給你區間帶的Index, 可以用來作一些處理
有一點要注意, 像我最後設置25000, 則多於這個距離的都會判定為不可視

// 狀態通知設置
group.onStateChanged = StateChangedMethod;

private void StateChangedMethod(CullingGroupEvent evt)
{
    if(evt.hasBecomeVisible)
        Debug.LogFormat("Sphere {0} has become visible!", evt.index);
    if(evt.hasBecomeInvisible)
        Debug.LogFormat("Sphere {0} has become invisible!", evt.index);
}

主要是通知你可視狀態的變更, 回傳Index, 再以Index來得到要處理的物件作處理, 所以紀錄Index與其對應的物件是必要的

DOTween:一個好用的Unity Tween System plugin

以下內容為之前在公司分享的東西

  • 目前專案使用的Tween System

    • 美術:UITweener(來自NGUI)
    • 程式:視狀況使用DOTween或UITweener
  • 為何要使用DOTween

    • 從Cocos2d-X轉到Unity, 突然少了Action很不方便
    • 我個人來看UITweener不太夠用

DOTween

http://dotween.demigiant.com/index.php
2016年10月左右開始使用

優點:

  • Open Source
  • 文件完整

缺點:

  • 功能限制(Pro版)
  • 沒有Component

Features

個人比較在乎的

  • Speed and efficiency
    Not only very fast, but also very efficient: everything is cached and reused to avoid useless GC allocations.
  • Shortcuts
    Shortcut extensions that directly extend common objects like this:
    // Move a transform to position 1,2,3 in 1 second
    transform.DOMove(new Vector3(1,2,3), 1);
  • Full control
    Play, Pause, Rewind, Restart, Complete, Goto and tons of other useful methods to control your tweens.

其他見 http://dotween.demigiant.com/index.php#features

基本功能

Transform

  • DOMove
  • DOMoveX/DOMoveY/DOMoveZ
  • DORotate
  • DORotateQuaternion
  • DOLookAt
  • DOScale
  • DOScaleX/DOScaleY/DOScaleZ
  • DOShakePosition
  • DOShakeRotation
  • DOShakeScale
  • DOPath

Material

  • DOColor
  • DOFade
  • DOFloat
  • DOOffset
  • DOTiling

Camera

  • DOAspect
  • DOColor
  • DOFieldOfView
  • DONearClipPlane
  • DOOrthoSize

通用方法
// Tween a Vector3 called myVector to 3,4,8 in 1 second
DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1);

callbacks

幾乎可以應付所有狀況的callback可以使用

  • OnComplete
  • OnUpdate
  • OnKill
  • OnPlay
  • OnPause
  • OnRewind
  • OnStart
  • OnStepComplete: 這個比較特別, 如果有repeat的話每一次都會呼叫

options

這裡列出幾個比較常用的選項

  • SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)
    漸進的設置
  • SetId(object id)
    設置一個獨特的id, 以便以後取用
  • SetLoops(int loops, LoopType loopType = LoopType.Restart)
    播放次數
  • SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)
    設置該tween要在Update, FixedUpdate, LateUpdate處理
  • SetDelay(float delay)
    延遲時間
  • SetSpeedBased(bool isSpeedBased = true)
    以單位時間為基準, 打開後設置的時間會變成每單位的時間。
    比方說DOMove(4, 1)原本是一秒移動4單位,會變成一秒移動一單位, 移動4秒。

效能

官方測試
http://dotween.demigiant.com/#enginesComparison

其他

個人喜歡他的DoPath會有預覽線條的功能。

一些shader相關網站

Formulas for Photoshop blending modes
講解一些Blend mode的公式
http://www.deepskycolors.com/archive/2010/04/21/formulas-for-Photoshop-blending-modes.html

Photoshop Blendmodi in GLSL
同上, 但是主要針對GLSL
http://renderingpipeline.com/2012/06/photoshop-blendmodi-glsl/

ANDROID LESSON FIVE: AN INTRODUCTION TO BLENDING
講解OpenGL中的BlendFunc的計算公式
http://www.learnopengles.com/tag/additive-blending/

GLSL : common mistakes
常見的GLSL錯誤
https://www.opengl.org/wiki/GLSL_:_common_mistakes

使用瀏覽器做shader效果測試

最近在與特效美術之間溝通一些shader效果時,基本希望能夠便於溝通以及快速的測試一個雛形,所以把念頭打到瀏覽器上,主要是因為HTML5上的WebGL已經相當成熟,也有一些相關服務可以用,所以想說可以試試看,找了以下幾個服務:

  • ShaderToy
    基本上應該是範例最多的一個,特別的是除了紋理以外還提供影片、聲音可以使用,目前的成品數量應該也是最多最好的,不過僅提供fragment shader,但感覺網路上的強者都可以用特別的方式達到想要的效果。
  • ShaderFrog
    一個新的服務,提供兩種作法來建立shader,一個是Composed Shader,這有點像是一些現成的shader讓你來組合,另一個是Basic Shader就是讓你寫自己的shader,可以寫vertex shader,另外感覺這個網站有心要作大,有計畫要提供一些付費服務,像是shader匯出到unity或者是自行上傳紋理等功能,不過目前未開放。
  • shdr
    可寫vertex shader與fragment shader,但似乎不能使用紋理,內建多種模型供使用。
  • Kick.js Shader Editor
    另一個比較陽春的線上shader編輯工具,只是我還是搞不懂他的紋理怎麼增加。

綜觀上面的一些服務,基本上提供了shader的編輯與測試,但是還是缺少了一些功能,第一是大多不支援自己自訂紋理,第二是如果要給美術可能需要更方便的編輯方式。

所以最後還是選了使用自己來的方式,選擇的是three.js,這個程式庫很久以前就在一些文章中見到他的名字,去到他的官網可以看到許多特色專案,另外就是他提供了詳細的文件與範例,基本上不用怕找不到寫法。

這裡是一個製作出來的簡單範例:
連結
畫面的部分使用three.js,右上的UI使用dat.GUI可以很方便的設置要修改的參數並顯示介面,這樣美術也可以簡單的調整參數,程式也可以即時的修改程式碼,美術只要更新一下即可。

另外要注意的是網頁需要放到網路上chrome瀏覽器在讀圖的時候才不會出錯,個人使用最簡單的Dropbox public資料夾,產出公開鏈結即可。