Unity3D基礎(chǔ)論-開發(fā)游戲必備的組件、屬性秉氧、方法(1)

人機(jī)交互

人機(jī)交互Input類:

常用的外部設(shè)備主要有:鼠標(biāo)眷昆、鍵盤、手柄汁咏、搖桿亚斋、觸屏、VR手柄攘滩。帅刊。。漂问。赖瞒。女揭。

Input鍵盤輸入方法: ? ?

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

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

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

用法:

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

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

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

Input鼠標(biāo)輸入方法:

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

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

也有自己的方法:

參數(shù): ?0,左鍵; ? ?1,右鍵 ; ? ? ? 2,滾輪 ?栏饮。吧兔。。袍嬉。

GetMouseButton(0)檢測鼠標(biāo)持續(xù)按下? ? ? ? ? ? ? ? 按住鼠標(biāo)返回Ture

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

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

mousePosition當(dāng)前鼠標(biāo)屏幕坐標(biāo)

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


Input虛擬軸/按鍵:

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

詳細(xì)設(shè)置有: ? ? 虛擬按鍵名稱境蔼、描述名稱+-、對應(yīng)按鍵+-伺通、備用按鍵+-箍土、抬起按鍵,值恢復(fù)為0的時間罐监、小于此值涮帘,計為0(僅用于搖桿)、按下按鍵笑诅,值達(dá)到+1或-1的時間调缨、同時按下正負(fù)鍵值為0、+-反轉(zhuǎn)吆你。弦叶。。妇多。伤哺。

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 ?鼠標(biāo)水平移動距離 ? ?Mouse Y ? 鼠標(biāo)垂直移動距離 ? ? Mouse ScrollWheel ? ? 獲取鼠標(biāo)滾輪值

例:旋轉(zhuǎn)代碼

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

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

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

//求絕對值

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

{

//轉(zhuǎn)身。

//1.需要旋轉(zhuǎn)的弧度

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

float degress = a * 180 / Mathf.PI;

//2者祖、旋轉(zhuǎn)

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

//始終向前移動

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

}


預(yù)設(shè)體: Instantiate?

位置: ?Vector3 ? ?旋轉(zhuǎn): Quaternion

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

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

1.1立莉、現(xiàn)將這個預(yù)設(shè)體加載到內(nèi)存中

//注意:1:要加載的預(yù)設(shè)體必須放到Resources文件夾下

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

Instantiate(prefab);

1.2、實例化一個預(yù)設(shè)體的對象

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

GameObject.Instantiate(prefab);

所以七问,如果需要得到一個GameObject,需要強(qiáng)制類型轉(zhuǎn)換 ?【關(guān)鍵字as】

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

銷毀:Destroy()

參數(shù):銷毀對象蜓耻、銷毀時間

Destroy(gameObject, 3)延遲銷毀

Destroy(gameObject,)立即銷毀

GameObject.Destroy(gameObject, 3);


碰撞器: ?Collider組件

Collider組件:

碰撞盒編輯 ? Edit Collider、是否設(shè)置為觸發(fā)器械巡、添加物理材質(zhì)刹淌、碰撞體大小中心設(shè)置。讥耗。有勾。。古程。

1蔼卡、關(guān)于碰撞:

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

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

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

2挣磨、碰撞盒子 (Collider)

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

種類:BoxCollider雇逞、SpherCollider...........

鼠標(biāo)碰撞回調(diào)方法:

OnMouseEnter(Collision c) ? ?鼠標(biāo)進(jìn)入到碰撞體范圍的第一幀調(diào)用一次

OnMouseOver(Collision c) ? ? 鼠標(biāo)進(jìn)入到碰撞體范圍內(nèi)持續(xù)調(diào)用荤懂,每幀一次

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

OnMouseDown ? ? ? ? ? ? ? ? ? ? ? ? 在碰撞體范圍內(nèi)按下時,調(diào)用一次

OnMouseDrag ? ? ? ? ? ? ? ? ? ? ? ? ?在碰撞體范圍內(nèi)按下喝峦,持續(xù)調(diào)用,每幀一次

OnMouseUp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在碰撞體范圍內(nèi)按下呜达,抬起鼠標(biāo)左鍵谣蠢,調(diào)用一次

OnMouseUpAsButton ? ? ? ? ? ? ? 在碰撞體范圍內(nèi)按下并抬起,執(zhí)行一次查近。


碰撞檢測:

回調(diào)方法:

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

OnCollisionStay(Collision other) ? ? ?碰撞過程中相對運動時持續(xù)調(diào)用眉踱,每幀一次

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

回調(diào)方法參數(shù): Collision

collider:當(dāng)前物體所碰撞到的游戲?qū)ο?游戲?qū)ο蟮呐鲎财鹘M件)

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

Trigger觸發(fā)器:

觸發(fā)事件產(chǎn)生的條件:兩個物體都有碰撞體谈喳,至少有一個帶有剛體,兩個碰撞體其中有一個是觸發(fā)器戈泼。

使用代碼來設(shè)置Trigger

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

Collision表示碰撞

//c.gameObject獲取與當(dāng)前物體發(fā)生碰撞的物體

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

//可以給一方的Collider組件設(shè)置Trigger

//添加Trigger如果需要捕獲到碰撞,需要執(zhí)行的以下的回調(diào)

需要觸發(fā)器啟用才能用下面的方法


Trigger

回調(diào)函數(shù):

void ?OnTriggerEnter(Collider c)

{

Debug.Log("進(jìn)入觸發(fā)器的時候調(diào)用一次");

}

void ?OnTriggerStay(Collider c)

{

Debug.Log("處于某個觸發(fā)器之中的時候持續(xù)調(diào)用大猛,每幀一次");

}

void ? OnTriggerExit(Collider c)

{

Debug.Log("退出觸發(fā)器的時候調(diào)用一次");

}


剛體: RigidBody屬性

作用:完成逼真物理效果的物理組件扭倾,重力、阻力挽绩、作用力和反作用力等膛壹。

主要屬性有:速度[velocity]、角速度[angularVelocity]唉堪、阻力[drag]模聋、角阻力[angularDrag]、是否使用重力[useGravity]唠亚、是否開啟動力學(xué)[isKinematic]链方、插值運算(內(nèi)插值、外插值)灶搜、碰撞檢測[collisionDetectionMode](間隔檢測侄柔、連續(xù)檢測、間隔連續(xù)交替)占调、約束(位置約束暂题、角度約束)。

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

常用方法:

private Rigidbody r;

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

AddForce:

//通過給一個物體添加一個力薪者,來實現(xiàn)物體的移動

//是相對于世界坐標(biāo)的力

//給一個物體移動的力

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

AddRelativeForce:

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

//是相對于自身坐標(biāo)的

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

AddTorque:

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

//給一個物體旋轉(zhuǎn)的力

//相對于世界坐標(biāo)

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

AddRelativeTorque:

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

//相對于自身坐標(biāo)

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

AddExplosionForce:

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

//添加一個爆炸力

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

//第二個:爆炸中心點

//第三個:爆炸半徑

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剿涮,隨后出現(xiàn)的幾起案子言津,更是在濱河造成了極大的恐慌攻人,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬槽,死亡現(xiàn)場離奇詭異怀吻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)初婆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門蓬坡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人磅叛,你說我怎么就攤上這事屑咳。” “怎么了弊琴?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵兆龙,是天一觀的道長。 經(jīng)常有香客問我敲董,道長紫皇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任腋寨,我火速辦了婚禮坝橡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘精置。我一直安慰自己计寇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布脂倦。 她就那樣靜靜地躺著番宁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赖阻。 梳的紋絲不亂的頭發(fā)上蝶押,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音火欧,去河邊找鬼棋电。 笑死,一個胖子當(dāng)著我的面吹牛苇侵,可吹牛的內(nèi)容都是我干的赶盔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榆浓,長吁一口氣:“原來是場噩夢啊……” “哼于未!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烘浦,失蹤者是張志新(化名)和其女友劉穎抖坪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闷叉,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡擦俐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了握侧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚯瞧。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖藕咏,靈堂內(nèi)的尸體忽然破棺而出状知,到底是詐尸還是另有隱情秽五,我是刑警寧澤孽查,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站坦喘,受9級特大地震影響盲再,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓣铣,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一答朋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棠笑,春花似錦梦碗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至循捺,卻和暖如春斩例,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背从橘。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工念赶, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恰力。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓叉谜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親踩萎。 傳聞我的和親對象是個殘疾皇子正罢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容