U3D 物理引擎

2022-03-14 23:29:11 字數 3568 閱讀 2094

input 類(人機互動)

鍵盤:可通過input實現外部裝置控制場景內遊戲物體實現相關功能

getkey:按住鍵盤上某乙個鍵時返回bool值:true

getkeydown:按下某乙個按鍵後的第一幀返回bool值:true

getkeyup:按鍵按下後鬆開時返回bool值:true

input.getaxis ("horizontal");

horizontal vertical horizontal vertical

獲得搖桿的水平方向移動的值,對應到鍵盤上的a,d鍵或←,→方向鍵

input.getaxis ("vertical");

獲得搖桿的垂直方向移動的值,對應鍵盤上的w,s鍵或上下方向鍵.

float h = input.getaxis ("horizontal");

float v = input.getaxis ("vertical");

transform.rotate (new vector3 (0, h, 0));

transform.translate (new vector3 (0, 0, v));

滑鼠:mouseposition : 獲取滑鼠在螢幕上的位置

螢幕座標系:螢幕左下角為(0,0)點,game介面

視口座標系: 螢幕左下角為(0,0)點,右上角為(1,1)點 以攝像機為參照

三維直接座標系:以(0,0,0)為原點

getmousebuttondown(value):滑鼠按下後的第一幀返回true

getmousebuttonup(value):滑鼠鬆開後的第一幀返回true

getmousebutton(value):滑鼠按下期間一直返回true

當value = 0 是表示滑鼠左鍵

value = 1 是表示滑鼠右鍵

value = 2 是表示滑鼠滾輪鍵按下

getaxis("mouse x") 得到一幀內滑鼠在水平方向上的移動距離

getaxis("mouse y") 得到一幀內滑鼠在垂直方向上的移動距離

getaxis("mouse scrollwheel") 獲取滑鼠滾輪的值

雙擊:float clickcount = 0;

float timer = 0;

bool isclick = false;

bool doubleclick ()

return false;

}if (clickcount == 1)

}return false;

}將滑鼠點選位置(視口座標)轉化為世界座標

//1.獲得滑鼠在螢幕中的位置

vector3 mousepos = input.mouseposition;

//2.將螢幕座標中的滑鼠點,轉換世界座標中的滑鼠點

//viewporttoworldpoint:表示將視口座標轉化為世界座標

vector3 mouseworldpos =

camera.main.viewporttoworldpoint

(new vector3 (mousepos.x / screen.width,

mousepos.y / screen.height, 10f));

//3.將轉化的世界座標賦值給cube

transform.position = mouseworldpos;

通過滑鼠滾輪來控制攝像機的遠近

//1.獲取攝像機的視口範圍

float fileofview = camera.main.fieldofview;

//2.使用滑鼠滾輪改變fileofview

fileofview -= input.getaxis ("mouse

scrollwheel");

//3.控制攝像機遠近的範圍

fileofview = mathf.clamp (fileofview, 10f, 60f);

//4.將改變後的值賦值給攝像機

將建立好的物理材質拖入collider元件中的material中

射線:建立射線: ray ray =new ray();

射線的屬性:origin 射線發射的原點

direction 射線發射的方向

射線碰撞的應用(射線檢測):

使用physics類方法raycast方法實現射線的碰撞檢測功能

bool raycast(ray ray(發射的射線) , out raycasthit hitinfo(碰撞資訊));

從主相機到滑鼠點選位置建立一條射線

ray ray = camera.main.screenpointtoray(input.mouseposition);

//建立射線通過傳入射線的反射起點和發射方向

ray ray = new ray (transform.position, transform.forward);

//發射射線,第乙個引數表示要發射的射線,

//第二個引數表示射線碰到物體的射線資訊,

//第三個引數表示射線發射的距離

//如果射線發射成功會返回bool值true

bool result = physics.raycast (ray, out hitinfo, 10f);

發射射線使用類:physics

儲存射線碰撞資訊類:raycasthit

1、ray camera.main.screenpointtoray(vector3 pos) 返回一條射線ray從攝像機到螢幕指定乙個點

2、ray camera.main.viewportpointtoray(vector3 pos) 返回一條射線ray從攝像機到視口(視口之外無效)指定乙個點

3、ray 射線類

4、raycasthit 光線投射碰撞資訊

5、bool physics.raycast(vector3 origin, vector3 direction, float distance, int layermask)

當光線投射與任何碰撞器交叉時為真,否則為假。

bool physics.raycast(ray ray, vector3 direction, raycasthit out hit, float distance, int layermask)

在場景中投下可與所有碰撞器碰撞的一條光線,並返回碰撞的細節資訊()。

bool physics.raycast(ray ray, float distance, int layermask)

當光線投射與任何碰撞器交叉時為真,否則為假。

bool physics.raycast(vector3 origin, vector3 direction, raycasthit out hit,float distance, int layermask)

當光線投射與任何碰撞器交叉時為真,否則為假。

U3D初學概況

u3d介紹 2004年,英特爾 波音 adobe 3d資料編碼方式。而且傳統的三維檔案就是基於cs結構,本機系統,脫離源程式無法開啟和瀏覽,即使通過特定程式能夠開啟,也是以犧牲大量編輯修改功能作為代價,尤其是三維檔案一般都體積巨大,無法通過網際網路傳播 瀏覽!u3d的目標是結束諸如autodesk ...

U3D支援中文

讓unity的js編輯器sciteg永久支援中文 假如你的 中有中文這個設定是很爽的。以後注釋也可以中文了。方法 1.用記事本開啟c program files unity editor data tools uniscite sciteglobal.properties 2.找到 internat...

U3D對齊功能

1,按快捷鍵shift v 的用法 先選中你要對齊的模型a,將物體a對齊到物體b 按快捷鍵shift v 此時將滑鼠移到模型a的各個頂點處,可發現各個頂點上會出現個小方框。左鍵按住其中乙個小方框不放,拖動滑鼠到另一物體b的某個頂點上,會發現模型a的頂點對齊到模型b的那個頂點上了,從而實現了模型a對齊...