Unity3D基礎論-開發游戲必備的組件、屬性、方法(1)

人機交互

人機交互Input類:

常用的外部設備主要有:鼠標、鍵盤、手柄、搖桿、觸屏、VR手柄。。。。。。

Input鍵盤輸入方法: ? ?

GetKeyDown檢測鍵盤按下 ? ? ? ? ? ?按下時返回Ture

GetKey檢測鍵盤按住 ? ? ? ? ? ? ? ? ? ? 按住時返回Ture

GetKeyUp檢測鍵盤抬起 ? ? ? ? ? ? ? ? 抬起時返回Ture

用法:

?if(Input.GetKeyDown(keyCode.W)){};

KeyCode.Alpha0 ? ? ? ?數字(Alpha0代表0以此類推)

KeyCode.A ? ? ? ? ? ? ? ? 字母(KeyCode.W代表A以此類推)

Input鼠標輸入方法:

可以用鍵盤的方法:Input.GetKeyDown(KeyCode.Mouse0){}

Mouse0 /左鍵 ? ? ?Mouse1/右鍵 ? ?Mouse2 ?/滾輪

也有自己的方法:

參數: ?0,左鍵; ? ?1,右鍵 ; ? ? ? 2,滾輪 ?。。。。

GetMouseButton(0)檢測鼠標持續按下? ? ? ? ? ? ? ? 按住鼠標返回Ture

GetMouseButtonDown() 檢測鼠標按下 ? ? ? ? ? ? ?按下鼠標第一幀返回Ture

GetMouseButtonUp()檢測鼠標抬起 ? ? ? ? ? ? ? ? ? 松開鼠標第一幀返回Ture

mousePosition當前鼠標屏幕坐標

Vector3 position = Input.MousePosition; ????Debug.Log(position);


Input虛擬軸/按鍵:

設置虛擬軸按鍵面板路徑: ? ? ? Edit->ProjectSetting->Input

詳細設置有: ? ? 虛擬按鍵名稱、描述名稱+-、對應按鍵+-、備用按鍵+-、抬起按鍵,值恢復為0的時間、小于此值,計為0(僅用于搖桿)、按下按鍵,值達到+1或-1的時間、同時按下正負鍵值為0、+-反轉。。。。。

GetAxis:獲取軸方法

//獲取虛擬軸上的位移量

float vertical = Input.GetAxis("Vertical");

Vertical:鍵盤豎直軸

例: ?前后行走代碼

if (vertical > 0.1f)

{

gameObject.transform.Translate(Vector3.forward * Time.deltaTime);

}

else if (vertical < -0.1f)

{

gameObject.transform.Translate(Vector3.back * Time.deltaTime);

}

Horizontal:鍵盤水平軸

例:左右行走代碼

if (horizontal > 0.1f)

{

gameObject.transform.Translate(Vector3.right * Time.deltaTime);

}

else if (horizontal < -0.1f)

{

gameObject.transform.Translate(Vector3.left * Time.deltaTime);

}

Mouse X ?鼠標水平移動距離 ? ?Mouse Y ? 鼠標垂直移動距離 ? ? Mouse ScrollWheel ? ? 獲取鼠標滾輪值

例:旋轉代碼

//獲取兩個軸上的偏移量

float horizontal = Input.GetAxis("Horizontal");

float vertical = Input.GetAxis("Vertical");

//求絕對值

if (Mathf.Abs(horizontal) > 0.1f || Mathf.Abs(vertical) > 0.1f)

{

//轉身。

//1.需要旋轉的弧度

float a = Mathf.Atan2(horizontal, vertical);

float degress = a * 180 / Mathf.PI;

//2、旋轉

gameObject.transform.eulerAngles = new Vector3(0, degress, 0);

//始終向前移動

gameObject.transform.Translate(Vector3.forward * Time.deltaTime);

}


預設體: Instantiate?

位置: ?Vector3 ? ?旋轉: Quaternion

Resources.Load();? 動態加載資源

Object prefab = Resources.Load("Cube");

1.1、現將這個預設體加載到內存中

//注意:1:要加載的預設體必須放到Resources文件夾下

// ????2:這一步加載得到的結果是一個Object類型的

Instantiate(prefab);

1.2、實例化一個預設體的對象

//注意:這一步得到的結果其實也是一個Object

GameObject.Instantiate(prefab);

所以,如果需要得到一個GameObject,需要強制類型轉換 ?【關鍵字as】

GameObject obj = ?GameObject.Instantiate(prefab) as GameObject;

銷毀:Destroy()

參數:銷毀對象、銷毀時間

Destroy(gameObject, 3)延遲銷毀

Destroy(gameObject,)立即銷毀

GameObject.Destroy(gameObject, 3);


碰撞器: ?Collider組件

Collider組件:

碰撞盒編輯 ? Edit Collider、是否設置為觸發器、添加物理材質、碰撞體大小中心設置。。。。。

1、關于碰撞:

如果兩個物體想發生碰撞,需要具備兩個條件:

1.1:兩個物體都需要有剛體組件

1.2: 兩個物體都需要有碰撞盒子

2、碰撞盒子 (Collider)

用來描述一個物體真正可以發生碰撞的部位

種類:BoxCollider、SpherCollider...........

鼠標碰撞回調方法:

OnMouseEnter(Collision c) ? ?鼠標進入到碰撞體范圍的第一幀調用一次

OnMouseOver(Collision c) ? ? 鼠標進入到碰撞體范圍內持續調用,每幀一次

OnMouseExit(Collision c) ? ? ? 鼠標離開碰撞體范圍的最后一幀調用一次

OnMouseDown ? ? ? ? ? ? ? ? ? ? ? ? 在碰撞體范圍內按下時,調用一次

OnMouseDrag ? ? ? ? ? ? ? ? ? ? ? ? ?在碰撞體范圍內按下,持續調用,每幀一次

OnMouseUp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在碰撞體范圍內按下,抬起鼠標左鍵,調用一次

OnMouseUpAsButton ? ? ? ? ? ? ? 在碰撞體范圍內按下并抬起,執行一次。


碰撞檢測:

回調方法:

OnCollisionEnter(Collision other) ? ? 碰撞開始一瞬間時調用

OnCollisionStay(Collision other) ? ? ?碰撞過程中相對運動時持續調用,每幀一次

OnCollisionExit(Collision other) ? ? ? 碰撞分離一瞬間時調用

回調方法參數: Collision

collider:當前物體所碰撞到的游戲對象(游戲對象的碰撞器組件)

contacts[]:所有碰撞點的信息 ? normal、 ?point(碰撞點坐標)、Vector3

Trigger觸發器:

觸發事件產生的條件:兩個物體都有碰撞體,至少有一個帶有剛體,兩個碰撞體其中有一個是觸發器。

使用代碼來設置Trigger

//gameObject.GetComponent().isTrigger = true;

Collision表示碰撞

//c.gameObject獲取與當前物體發生碰撞的物體

假如不希望兩個物體發生物理上的碰撞,但是還要檢測是否接觸到了一起

//可以給一方的Collider組件設置Trigger

//添加Trigger如果需要捕獲到碰撞,需要執行的以下的回調

需要觸發器啟用才能用下面的方法


Trigger

回調函數:

void ?OnTriggerEnter(Collider c)

{

Debug.Log("進入觸發器的時候調用一次");

}

void ?OnTriggerStay(Collider c)

{

Debug.Log("處于某個觸發器之中的時候持續調用,每幀一次");

}

void ? OnTriggerExit(Collider c)

{

Debug.Log("退出觸發器的時候調用一次");

}


剛體: RigidBody屬性

作用:完成逼真物理效果的物理組件,重力、阻力、作用力和反作用力等。

主要屬性有:速度[velocity]、角速度[angularVelocity]、阻力[drag]、角阻力[angularDrag]、是否使用重力[useGravity]、是否開啟動力學[isKinematic]、插值運算(內插值、外插值)、碰撞檢測[collisionDetectionMode](間隔檢測、連續檢測、間隔連續交替)、約束(位置約束、角度約束)。

注意:對物體的操作使用Transform組件,要么使用RigidBody組件,不要混合使用

常用方法:

private Rigidbody r;

r = gameObject.GetComponent(); ? 獲取組件

AddForce:

//通過給一個物體添加一個力,來實現物體的移動

//是相對于世界坐標的力

//給一個物體移動的力

//r. AddForce(Vector3.forward * 1000);

AddRelativeForce:

//給一個物體添加一個力

//是相對于自身坐標的

// r. AddRelativeForce(Vector3.forward * 500);

AddTorque:

//給一個物體添加一個力矩

//給一個物體旋轉的力

//相對于世界坐標

//r. AddTorque(Vector3.forward * 500);

AddRelativeTorque:

//給一個物體添加一個力矩

//相對于自身坐標

//r. AddRelativeTorque(Vector3.forward * 500);

AddExplosionForce:

//需要給每個要爆炸的物體添加上爆炸的腳本

//添加一個爆炸力

//第一個:表示力的大小

//第二個:爆炸中心點

//第三個:爆炸半徑

r.AddExplosionForce(1000, new Vector3(20, 1, 20), 1000);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容