2017年6月4日 星期日

[Unity]筆記: 目標直線追隨移動

目標直線追隨移動

在Unity中,要做到對目標追隨移動有兩種基本方法可以使用,Lerp及MoveTowards.

在Vector系列的類別中,都內含著上述兩個方法.

Lerp

用來取得兩點間線性插值的方法,語法為new Vector3 newPosition = Vector3.Lerp(Vector3 起點, Vector3 終點, float 比例) .

其中比例的值為一個浮點數,範圍為0~1,可以想像成0%~100%,當比例 <= 0 時,相當於不動,即newPosition = 起點; 反之,如果比例 >= 1時,newPosition = 終點. 所以一般使用時將比例控制在0~1之間,可以適當地得到兩個點之間某個比例的位置.

MoveTowards

用來取得兩點間的某個點的位置,語法為new Vector3 newPosition = Vector3.MoveTowards(Vector3 起點, Vector3 終點, float 距離) .

其中距離的值為一個浮點數,無範圍限制,主要就是看你希望每一次期望取得離終點多遠的距離.


下面是利用Lerp來實作的一個簡單的物件追隨範例:

public class CameraFollower : MonoBehaviour {

    public Transform target;
    private float smoothing = 5f;
    private Vector3 offset;
    // Use this for initialization
    void Start () {
        offset = transform.position - target.position;
    }
    
    // Update is called once per frame
    void FixedUpdate () {
        Vector3 camPosition = target.position + offset;
        transform.position = Vector3.Lerp (transform.position,camPosition,smoothing*Time.deltaTime);
    }
}



2017年5月30日 星期二

[Unity]筆記: 2D碰撞

2D碰撞

在遊戲中,碰撞行為是不可或缺的,而在Unity中,我們可以透過內建的幾個簡單元件配合特定的script method就可以達成.

在碰撞行為中,可以分為主動與被動,就是衝撞與被撞的物件,而這兩者在實作上是有區別的.

在衝撞物件中,我們需要在物件的inspector中加入兩個新元件,Rigidbody2D與Collider,這兩個元件都可以在Physics 2D中找到.

Rigidbody2D: 

即2D剛體,用來處理物理運算用的元件,如重力,摩擦係數及碰撞等等. 

在剛體中有個Body type,是用來決定碰撞的主要因素,Body type可以分為下列三種:

1. Dynamic:

    Dynamic具所有物理特性(Gravity, Forces),可以碰撞任何BodyType,相對的資源消耗       就會比其他body type來得多.

2. Kinematic:

    Kinematic不具Gravity及Forces等特性,僅能碰撞Dynamic type,無法碰撞Kinematic       及Static type,所以這種type消耗的資源相對低很多.

3. Static:

    Static大概就是等同於沒有剛體,也就是僅能碰撞Dynamic type.

Collider2D: 

碰撞器,用來定義可碰撞範圍及碰撞器材質等,在Unity中預設了Box Collider 2D, Circle Collider 2D, Edge Collider 2D及Polygon Collider 2D供開發者使用,而這幾種Collider的差別只在於預設範圍不同而已.


被撞的元件中,僅僅只需要碰撞器及一小段script就可以做到被碰撞的效果,該script method 如下:

(當碰撞器一開始發生碰撞時)
void OnCollisionEnter2D(Collision2D collision){
}

(當碰撞器保持在碰撞狀態)
void OnCollisionEnter2D(Collision2D collision){
}

(當碰撞器剛脫離碰撞時)
void OnCollisionEnter2D(Collision2D collision){
}

2017年3月26日 星期日

[odoo] 在Mac上安裝odoo

什麼是odoo?


Odoo(先前曾名為OpenERP,更早之前則為TinyERP),是一套企業資源規劃(ERP)及客戶關係管理(CRM)系統。以Python語言開發,資料庫採用開源的PostgreSQL,系統以GNU GPL開源協定釋出。
系統提供較靈活的模組架構,常用模組包括:採購管理銷售管理庫存管理財務管理、貨品管理、行銷管理、客戶關係管理、生產管理人事管理及服務支援等等。用戶可以直接從模組庫中選擇安裝適用模組,或進行模組解除安裝、升級的管理操作。
用戶端使用者介面是基於GTK的,同時支援LinuxWindows平台。目前還有開發中的基於TurboGears的eTiny Web用戶端。
--上述引用wiki


安裝開始


首先打開Mac上的終端機. (Finder > 應用程式 > 工具程式 > 終端機)

接著安裝Homebrew -套件管理工具

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安裝好之後,執行下面兩個指令來安裝python

brew update
brew install python

接著安裝postgresql

brew install postgresql

設定postgresql,以便在開機時自動啟動

ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

接著安裝一些環境所需的套件

brew install freetype jpeg libpng libtiff webp xz

安裝虛擬環境套件

pip install virtualenv

透過剛剛的虛擬環境套件建立一個叫odoo-env的目錄

virtualenv ~/odoo-env

下載odoo (這邊我們使用的是社群版)

git clone https://github.com/odoo/odoo.git

進入剛創立的虛擬環境

. ~/odoo-env/bin/activate

確認現在是否在虛擬環境內

which python

應該可以看到下面的結果

/Users/youruser/odoo-env/bin/python

進入剛下載的odoo目錄中

cd odoo

安裝odoo所需的相關資源

pip install -r requirements.txt

啟動odoo (注意,10版之前的啟動檔案叫odoo.python)

python ./odoo-bin

預設位址應該是: 127.0.0.1:8069

試著開啟瀏覽器輸入上面位址看看吧~

--安裝步驟參考網址