日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Unity3D研究院之腳本實(shí)現(xiàn)模型的平移與旋轉(zhuǎn)(六) | 雨松MOMO程序研究院

 有趣的永 2015-04-17
這一章MOMO帶大家討論一下Unity3D中使用的腳本,腳本的最大特點(diǎn)就是用少量的代碼實(shí)現(xiàn)繁多的功能,避免大量的代碼。Untiy3D這一塊可以使用腳本做很多東西,那么我們開始學(xué)習(xí)腳本吧。
有關(guān)Unity3D 腳本的API所有文檔盆友們都可以去這里查閱。
腳本描述
Scripting inside Unity consists of attaching custom script objects called behaviours to game objects. Different functions inside the script objects are called on certain events. The most used ones being the following:

Update:
This function is called before rendering a frame. This is where most game behaviour code goes, except physics code.
FixedUpdate:
This function is called once every physics time step. This is the place to do physics-based game behaviour.
Code outside any function:
Code outside functions is run when the object is loaded. This can be used to initialise the state of the script.
Note: Sections of this document assume you are using Javascript, but see Writing scripts in C# & Boo for information about how to use C# or Boo scripts.


大概意思是介紹三個(gè)重要的腳本函數(shù)

Update:這個(gè)函數(shù)在渲染幀之前被調(diào)用,大部分的游戲行為代碼都在這里執(zhí)行,除 物理代碼。

FixedUpdate:這個(gè)函數(shù)在每進(jìn)行一次物理時(shí)間步調(diào)時(shí)被調(diào)用,它是基于物理的游戲行為。

Code outside any function:這類函數(shù)在對(duì)象加載時(shí)被調(diào)用,它可以用來(lái)腳本的初始化工作。

本章我們著重討論Update 這個(gè)函數(shù),創(chuàng)建腳本與綁定腳本的方法在第二章中已經(jīng)介紹過(guò)了不會(huì)的盆友請(qǐng)去那里閱讀。雖然官方推薦腳本使用JavaScript編輯,但是其實(shí)C#更符合Unity3D的編程思想,推薦新人先使用JavaScript,然后在學(xué)習(xí)C#,因?yàn)镴avaScript更容易上手一些。

 

Unity3D研究院之腳本實(shí)現(xiàn)模型的平移與旋轉(zhuǎn)(六) - 雨松MOMO程序研究院 - 1

 

在三維世界中創(chuàng)建兩個(gè)矩形,然后在添加兩個(gè)腳本分別綁定在這兩個(gè)箱子上,腳本的名稱暫時(shí)命名為 js0 、js1。

在Project 頁(yè)面中打開剛剛創(chuàng)建的js0,發(fā)現(xiàn)Unity3D 已經(jīng)將Update 函數(shù)添加在腳本中了。

模型的移動(dòng)

Translate方法中的三個(gè)參數(shù)分別標(biāo)示,模型在三維世界中X 、Y、Z 軸移動(dòng)的單位距離。

 

1
2
3
4
5
6
7
8
9
10
11
12
function Update () {
//模型x軸,移動(dòng)一個(gè)單位
transform.Translate(1,0,0);
//模型y軸,移動(dòng)一個(gè)單位
transform.Translate(0,1,0);
//模型z軸,移動(dòng)一個(gè)單位
transform.Translate(0,0,1);
}

 

執(zhí)行代碼發(fā)現(xiàn)參數(shù)為1速度居然移動(dòng)的著么快,怎么能修改移動(dòng)的速度呢?

Time.deltaTime:標(biāo)示上一次調(diào)用Update一秒為標(biāo)示每幀執(zhí)行所消耗的時(shí)間。

有了這個(gè)參數(shù),我們就可以根據(jù)它修改方向移動(dòng)的速度了。

 

1
2
3
4
5
6
7
8
9
10
11
function Update () {
    //設(shè)置移動(dòng)的范圍
    var translation : float = Time.deltaTime * 10;
    //移動(dòng)的方向
    transform.Translate (translation, 0, 0);
    transform.Translate (0, translation, 0);
    transform.Translate (0, 0, translation);
}

 

模型的平移可以選擇一個(gè)參照物,下面代碼第二個(gè)參數(shù)設(shè)置模型移動(dòng)參照物,這里設(shè)置成攝像機(jī)。那么模型將以相對(duì)與攝像機(jī)進(jìn)行移動(dòng)。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Update () {
    //設(shè)置移動(dòng)范圍
    var translation : float = Time.deltaTime * 10;
//相對(duì)于攝像機(jī),模型向右移動(dòng)。
transform.Translate(Vector3.right * translation, Camera.main.transform);
// 相對(duì)于攝像機(jī),模型向上移動(dòng)。
transform.Translate(Vector3.up * translation, Camera.main.transform);
// 相對(duì)于攝像機(jī),模型向左移動(dòng)。
transform.Translate(Vector3.left * translation, Camera.main.transform);
}

 

模型的旋轉(zhuǎn)

Rotate方法中的三個(gè)參數(shù)分別標(biāo)示,模型在三維世界中X 、Y、Z 軸旋轉(zhuǎn)的單位距離。

 

1
2
3
4
5
6
7
8
9
10
11
function Update () {
   //以模型X軸旋轉(zhuǎn),單位為2.
   transform.Rotate(2, 0, 0);
   //以模型Y軸旋轉(zhuǎn),單位為2.
   transform.Rotate(0, 2, 0);
   //以模型Z軸旋轉(zhuǎn),單位為2.
   transform.Rotate(0, 0, 2);
}

 

模型的旋轉(zhuǎn)可以選擇一個(gè)參照物,下面代碼第二個(gè)參數(shù)設(shè)置模型移動(dòng)參照物,這里設(shè)置成3D世界。那么模型將以相對(duì)與整個(gè)3D世界進(jìn)行旋轉(zhuǎn)。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Update () {
   //設(shè)置旋轉(zhuǎn)的范圍
    var rotate : float = Time.deltaTime * 100;
    //旋轉(zhuǎn)的方向
    //相對(duì)于世界坐標(biāo)中心向右旋轉(zhuǎn)物體
    transform.Rotate(Vector3.right * rotate, Space.World);
     //相對(duì)于世界坐標(biāo)中心向上旋轉(zhuǎn)物體
    transform.Rotate(Vector3.up * rotate, Space.World);
     //相對(duì)于世界坐標(biāo)中心向左旋轉(zhuǎn)物體
    transform.Rotate(Vector3.left * rotate, Space.World);
}

如下圖所示,給出一個(gè)小例子,在腳本中移動(dòng)箱子的坐標(biāo),在屏幕中記錄模型移動(dòng)的位置,并且顯示在游戲視圖中。效果很不錯(cuò)吧,嘻嘻~~

 

Unity3D研究院之腳本實(shí)現(xiàn)模型的平移與旋轉(zhuǎn)(六) - 雨松MOMO程序研究院 - 2

 

完整代碼

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//X軸移動(dòng)位置
var posX : float;
//Y軸移動(dòng)位置
var posY : float;
//Z軸移動(dòng)位置
var posZ : float;
function Update () {
  //設(shè)置移動(dòng)的范圍
    var x : float = Time.deltaTime * 10;
    var y : float = Time.deltaTime * 8;
    var z : float = Time.deltaTime * 5;
    //移動(dòng)的方向X軸
    transform.Translate (x, 0, 0);
    //移動(dòng)的方向Y軸
    transform.Translate (0, y, 0);
    //移動(dòng)的方向Z軸
    transform.Translate (0, 0, z);
    //賦值計(jì)算模型在三維坐標(biāo)系中的位置
     posX += x;
     posY += y;
     posZ += z;
}
function OnGUI () {  
  //將坐標(biāo)信息顯示在3D屏幕中
  GUI.Label(Rect(50, 100,200,20),"x pos is" + posX +"float");  
  GUI.Label(Rect(50, 120,200,20),"y pos is" + posY +"float");  
  GUI.Label(Rect(50, 140,200,20),"z pos is" + posZ +"float");  
}

 Unity3D 的世界中腳本還可以做很多事情,以后我在慢慢向各位道來(lái)~ 歡迎各位盆友可以和MOMO一起討論Unity3D游戲開發(fā),哇咔咔~~~

MOMO與MO嫂提醒您:親,如果您覺(jué)得本文不錯(cuò),快快將這篇文章分享出去吧 。另外請(qǐng)點(diǎn)擊網(wǎng)站頂部彩色廣告或者捐贈(zèng)支持本站發(fā)展,謝謝!

最后編輯:
作者:雨松MOMO
專注移動(dòng)互聯(lián)網(wǎng),Unity3D游戲開發(fā)
捐 贈(zèng)如果您愿意花10塊錢請(qǐng)我喝一杯咖啡的話,請(qǐng)用手機(jī)掃描二維碼即可通過(guò)支付寶直接向我捐款哦。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多