日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Unity俯视角射击】我们来做一个《元气骑士》的完整Demo1

發(fā)布時(shí)間:2023/12/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Unity俯视角射击】我们来做一个《元气骑士》的完整Demo1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

---------------------------相關(guān)功能實(shí)現(xiàn)--------------------------------

1、人物移動(dòng)

人物的移動(dòng)依舊是利用在Update中獲取鍵盤輸入的"Horizontal"和"Vertical"的值,在FixedUpdate中更新角色的位置。

private void Update()

{

???movement.x = Input.GetAxis("Horizontal");

???movement.y = Input.GetAxis("Vertical");

???if (movement == new Vector2(0, 0)){

??????playerAnima.SetBool("run", false);

???}

????else{

????????playerAnima.SetBool("run", true);

???}

}

private void FixedUpdate(){

????rigidbody.MovePosition(rigidbody.position + movement * moveSpeed * Time.fixedDeltaTime);

}

2、人物朝向

人物朝向其實(shí)附帶功能還有武器朝向,我寫了一個(gè)Target字段現(xiàn)在賦值為鼠標(biāo)位置,有需要也可以修改(比如改為自瞄),考慮到武器種類不同的情況下瞄準(zhǔn)方式也會(huì)不一樣,所以人物的朝向和武器的朝向是各自管理的。


3、鼠標(biāo)左鍵操作邏輯

這個(gè)按鍵需要判斷四種狀態(tài):一種是玩家在可互動(dòng)物體周圍時(shí)左鍵操作為“互動(dòng)”,比如現(xiàn)在做的是撿起槍。另外則是長(zhǎng)按、短按和抬起,不同武器在長(zhǎng)按、短按、抬起這三個(gè)狀態(tài)下的操作是不一樣的。

為了判斷玩家是否在可互動(dòng)物體的周圍,我在Update中每幀由玩家向周圍發(fā)射射線檢測(cè)是否碰撞到可互動(dòng)物體,這里因?yàn)橹挥袠尵椭蛔隽藰尩呐袛辔催M(jìn)一步優(yōu)化。

weaponInFloor = null;

Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, 1);

if (cols.Length > 0){

???for (int i = 0; i < cols.Length; i++){

???????if (cols[i].CompareTag("Weapon")){

????????????weaponInFloor = cols[i].gameObject;

???????}

????}

}

根據(jù)射線檢測(cè)的結(jié)果和按鍵的情況分別執(zhí)行對(duì)應(yīng)的操作:

if (weaponInFloor != null && fireKeyDown){

????GetWeapon();

}

else{

?????if (fireKeyDown){

????????if (weapon != null){ weapon.ShootButtonDown(); }

????????else{ Debug.Log("沒(méi)有武器只能手刀撒"); }

?????}

?????else if(fireKeyPressed){

????????if (weapon != null){ weapon.ShootButtonPressed();}

?????}

?????if(fireKeyUp){

????????if (weapon != null){ weapon.ShootButtonUp(); }

?????}

}

GIF

武器的拾取需要根據(jù)玩家手上是否持有武器做不同動(dòng)作,相應(yīng)的武器身上也要有被撿起放下的兩個(gè)對(duì)應(yīng)方法:

void GetWeapon(){

????if (weaponInFloor != null){

????????//地上有槍就換槍

????????if (weapon != null){

????????????myWeapon.transform.SetParent(GameManager.instance.weaponRecycle);

????????????weapon.PickDown();

????????}

????????????myWeapon = weaponInFloor;

????????????weapon = myWeapon.GetComponent<Weapon>();

????????????weapon.Pickup();

????????????myWeapon.transform.SetParent(transform);

????????????myWeapon.transform.localPosition = new Vector3(0, 0, 0);

????????????myWeapon.transform.localRotation = Quaternion.identity;

????????????//注冊(cè)

????????????weapon.Initialization(gameObject.tag, gameObject.layer);

????}

}

不同武器在對(duì)應(yīng)的狀態(tài)方法中編輯該狀態(tài)下的操作即可。

//例:Gun

public override void ShootButtonDown(){

????if (Time.time - timing >=CD){

????????timing = Time.time;

????????GameObject bullet = Instantiate(bulletPrefab, pos.position, pos.rotation*Quaternion.AngleAxis(Random.Range(0,shake),Vector3.forward));

????????bullet.GetComponent<Bullet>().Initialization(attack, role, bulletForce);

????????GetComponent<Animator>().Play("Shoot");

?????}

}

public override void ShootButtonPressed(){

?????if (Time.time - timing >=CD){

???????timing = Time.time;

???????GameObject bullet = Instantiate(bulletPrefab, pos.position, pos.rotation*Quaternion.AngleAxis(Random.Range(0,shake),Vector3.forward));

???????bullet.GetComponent<Bullet>().Initialization(attack, role, bulletForce);

???????GetComponent<Animator>().Play("Shoot");

??????}

}

4、鏡頭跟隨

鏡頭跟隨這塊直接用了Cinemachine,跟著馬老師的視頻設(shè)置就可以啦:

【簡(jiǎn)明UNITY教程】不用寫代碼的高級(jí)2D攝像機(jī) Cinemachine

三、湊一個(gè)小標(biāo)題(有感而發(fā))
由于中間跑去學(xué)ShaderGraph再回頭看俯視角射擊有種恍若隔世的感覺,慢慢找回寫代碼的狀態(tài)思路也更清晰了一些,但其實(shí)對(duì)自己現(xiàn)在寫的這個(gè)Demo并不是太滿意,大概會(huì)有漫長(zhǎng)的打磨吧。

同時(shí)認(rèn)識(shí)到以前對(duì)俯視角射擊看得太簡(jiǎn)單了,又或者說(shuō)其實(shí)我寫的確實(shí)是俯視角射擊,但他離一個(gè)完整的游戲還是太遠(yuǎn)了。還需要更加努力,了解更多同質(zhì)類型的游戲,也需要學(xué)習(xí)更多類型的游戲。

總結(jié)

以上是生活随笔為你收集整理的【Unity俯视角射击】我们来做一个《元气骑士》的完整Demo1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。