天天看點

unity3d開發一:入門知識+導入模型+旋轉腳本

1. unity3d介紹

這是一個跨平台的3維遊戲開發引擎,封裝程度非常高,使用者完全不用管平台的問題

比如我開發android的應用,隻需要導入模型,寫模型要怎樣旋轉即可,至于android、dalvik虛拟機、java,完全用不到。

2. 下載下傳

(1)在官方網站下載下傳名字叫UnitySetup-3.5.3.exe的程式即可

(2)要開發android的,需要下載下傳android的SDK,巨大,具體步驟網上搜尋,我的部落格好像也有

3. 使用

(1)安裝unity,直接打開unity,打開後會預設打開自帶的例子,選擇檔案-建立scene

(2)在裡面畫模型或導入外部模型,格式為FBX,其他格式沒試過

菜單欄的assets表示資源的意思,建立模型要在gameobject裡面,建立cube等。

建立完成後,打開hierarchy面版,選中對象,可以在inspector中檢視屬性,可以調整錄影機的位置,模型的位置

(3)先寫腳本,然後為相機或模型綁定腳本

在project面闆中建立一個檔案夾,用于存放與這個項目有關的圖檔、腳本等。

然後在裡面建立一個javascript腳本,用記事本或自帶的assemble-打開,複制粘貼下面的東西

#pragma strict

  //用于綁定參照物對象

var target : Transform;

//縮放系數

var distance = 10.0;

//左右滑動移動速度

var xSpeed = 250.0;

var ySpeed = 120.0;

//縮放限制系數

var yMinLimit = -20;

var yMaxLimit = 80;

//攝像頭的位置

var x = 0.0;

var y = 0.0;

//記錄上一次手機觸摸位置判斷使用者是在左放大還是縮小手勢

private var oldPosition1 : Vector2;

private var oldPosition2 : Vector2;

//初始化遊戲資訊設定

function Start () {

    var angles = transform.eulerAngles;

    x = angles.y;

    y = angles.x;

// Make the rigid body not change rotation

    if (rigidbody)

rigidbody.freezeRotation = true;

}

function Update () 

{

//判斷觸摸數量為單點觸摸

if(Input.touchCount == 1)

{

//觸摸類型為移動觸摸

if(Input.GetTouch(0).phase==TouchPhase.Moved)

{

   //根據觸摸點計算X與Y位置

x += Input.GetAxis("Mouse X") * xSpeed * 0.02;

        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

}

}

//判斷觸摸數量為多點觸摸

if(Input.touchCount >1 )

    {

    //前兩隻手指觸摸類型都為移動觸摸

    if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)

    {

       //計算出目前兩點觸摸點的位置

    var tempPosition1 = Input.GetTouch(0).position;

var tempPosition2 = Input.GetTouch(1).position;

            //函數傳回真為放大,傳回假為縮小

            if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))

            {

            //放大系數超過3以後不允許繼續放大

            //這裡的資料是根據我項目中的模型而調節的,大家可以自己任意修改

                if(distance > 3)

                {

                distance -= 0.5;

                } 

            }else

{

                //縮小洗漱傳回18.5後不允許繼續縮小

                //這裡的資料是根據我項目中的模型而調節的,大家可以自己任意修改

                if(distance < 18.5)

                {

                distance += 0.5;

                }

            }

            //備份上一次觸摸點的位置,用于對比

        oldPosition1=tempPosition1;

oldPosition2=tempPosition2;

    }

    }

}

//函數傳回真為放大,傳回假為縮小

function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean

{

//函數傳入上一次觸摸兩點的位置與本次觸摸兩點的位置計算出使用者的手勢

    var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));

    var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));

    if(leng1<leng2)

    {

    //放大手勢

         return true; 

    }else

    {

    //縮小手勢

        return false; 

    }

}

//Update方法一旦調用結束以後進入這裡算出重置錄影機的位置

function LateUpdate () {

    //target為我們綁定的箱子變量,縮放旋轉的參照物

    if (target) {

    //重置錄影機的位置

  y = ClampAngle(y, yMinLimit, yMaxLimit);

        var rotation = Quaternion.Euler(y, x, 0);

        var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;

        transform.rotation = rotation;

        transform.position = position;

    }

}

static function ClampAngle (angle : float, min : float, max : float) {

if (angle < -360)

angle += 360;

if (angle > 360)

angle -= 360;

return Mathf.Clamp (angle, min, max);

}

function OnGUI () {  

  //将坐标資訊顯示在3D螢幕中

  GUI.Label(Rect(50, 100,200,20),"x pos is" + x);  

  GUI.Label(Rect(50, 120,200,20),"y pos is" + y );  

  }

這段代碼表示target要怎麼渲染,即在每一幀的渲染時進行旋轉、縮放等,還有與螢幕的互動。

拷貝完了,記得在assembly-unityscript中按F8編譯。

然後在project面闆,吧這個腳本檔案拖到hierarchy面闆的camera上,就完成了腳本與camera對象的綁定

然後再hierarchy面闆選中camera,把cube拖到camera在inspector面闆底部的腳本對應的target中,意思就是把cube指派給腳本中的target。

(4)導出apk檔案

file-build setting,android的話要制定sdk的位置。

大緻過程就是tmd這樣的。