W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Unity 3D 集成開(kāi)發(fā)環(huán)境作為一個(gè)優(yōu)秀的游戲開(kāi)發(fā)平臺(tái),提供了出色的管理模式,即物理管理器(Physics Manager)。
物理管理器管理項(xiàng)目中物理效果的參數(shù),如物體的重力、反彈力、速度和角速度等。
在 Unity 3D 中執(zhí)行 Edit
→ Project Settings
→ Physics
命令可以打開(kāi)物理管理器。
可以根據(jù)需要通過(guò)調(diào)整物理管理器中的參數(shù)來(lái)改變游戲中的物理效果,參考以下參數(shù)列表:
選項(xiàng) | 含義 | 描述 |
---|---|---|
Gravity |
重力 | 應(yīng)用于所有剛體,一般僅在 Y 軸 起作用。 |
Default Material |
默認(rèn)物理材質(zhì) | 如果一個(gè)碰撞體沒(méi)有設(shè)置物理材質(zhì),將采用默認(rèn)材質(zhì)。 |
Bounce Threshold |
反彈閾值 | 如果兩個(gè)碰撞體的相對(duì)速度低于該值,則不會(huì)反彈。 |
Sleep Velocity |
休眠速度 | 低于該速度的物體將進(jìn)人休眠。 |
Sleep Angular Velocity |
休眠角速度 | 低于該角速度的物體將進(jìn)人休眠。 |
Max Angular Velocity |
最大角速度 | 用于限制剛體角速度,避免旋轉(zhuǎn)時(shí)數(shù)值不穩(wěn)定。 |
Min Penetration For Penalty |
最小穿透力 | 設(shè)置在碰撞檢測(cè)器將兩個(gè)物體分開(kāi)前,它們可以穿透 多少距離。 |
Solver Iteration Count |
迭代次數(shù) | 決定了關(guān)節(jié)和連接的計(jì)算精度。 |
Raycasts Hit Triggers |
射線(xiàn)檢測(cè)命中 觸發(fā)器 | 如果啟用此功能,在射線(xiàn)檢測(cè)時(shí)命中碰撞體會(huì)返回一 個(gè)命中消息;如果關(guān)閉此功能,則不返回命中消息。 |
Layer Collision Matrix |
層碰撞矩陣 | 定義層碰撞檢測(cè)系統(tǒng)的行為。 |
實(shí)踐案例
執(zhí)行菜單欄中的 GameObject
→ 3D Object
→ Plane
命令,創(chuàng)建平面,并賦予材質(zhì)。
執(zhí)行 GameObject
→ 3D Object
→ Cube
命令創(chuàng)建若干個(gè)盒子,構(gòu)成迷宮場(chǎng)景。
從 Unity 3D 商店中選擇 3D 模型資源并加載到場(chǎng)景中,將其命名為 treasure.
Assets
→ Import Package
→ Custom Package
命令添加第一人稱(chēng)資源。
Import 按鈕
導(dǎo)入該資源。
first person controller
,將其添加到 Hierarchy 視圖中,并擺放到平面上合適的位置。
以下第9-10步添加觸發(fā)器。
treasure
,為 treasure 對(duì)象
添加 Box Collider
,并勾選 Is Trigger 屬性
。
using UnityEngine;
using System.Collections;
public class Triggers:MonoBehaviour{
void OnTriggerEnter(Collider other){
if(other.tag=="Pickup"){
Destroy(other.gameObject);
}
}
}
Triggers 腳本
鏈接到 first person controller
上。treasure
添加標(biāo)簽 Pickup
。以下第13-14步開(kāi)始修改腳本。
using UnityEngine;
using System.Collections;
public class Triggers:MonoBehaviour{
public static int temp_Num=0;
void OnTriggerEnter(Collider other){
if(other.tag=="Pickup"){
temp_Num++;
Destroy(other.gameObject);
}
}
void OnGUI(){
if(temp_Num==5)
if(GUI.Button(new Rect(Screen.width/2f, Screen.height/2f, 100, 50),"play again")){
temp_Num=0;
Application.LoadLevel("migong");
}
}
}
Build Settings
中。
以下第15步開(kāi)始添加計(jì)時(shí)功能。
using UnityEngine;
using System.Collections;
public class Triggers:MonoBehaviour{
public static int temp_Num=0;
public int parachuteNum;
int timer;
int time_T;
bool isWin=false;
bool isLose=false;
void Start(){
Time.timeScale=1;
GameObject[]objs=GameObject.FindGameObjectsWithTag("Pickup");
parachuteNum=objs.Length;
time_T=(int)Time.time;
}
void Update(){
timer=20-(int)Time.time+time_T;
if(temp_Num==parachuteNum&&timer!=0){
isWin=true;
}
if(timer==0&&temp_Num!=parachuteNum){
isLose=true;
}
}
void OnTriggerEnter(Collider other){
if(other.tag=="Pickup"){
temp_Num++;
Destroy(other.gameObject);
}
}
void OnGUI(){
GUI.Label(new Rect(0, 0, 100, 50), timer.ToString());
if(isWin==true||isLose==true){
Time.timeScale=0;
if(GUI.Button(new Rect(Screen.width/2f, Screen.height/2f, 100, 50), "play again")){
isWin=false;
isLose=false;
temp_Num=0;
Application.LoadLevel("migong");
}
}
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: