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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

---------------------------相關功能實現--------------------------------

1、人物移動

人物的移動依舊是利用在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、人物朝向

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


3、鼠標左鍵操作邏輯

這個按鍵需要判斷四種狀態:一種是玩家在可互動物體周圍時左鍵操作為“互動”,比如現在做的是撿起槍。另外則是長按、短按和抬起,不同武器在長按、短按、抬起這三個狀態下的操作是不一樣的。

為了判斷玩家是否在可互動物體的周圍,我在Update中每幀由玩家向周圍發射射線檢測是否碰撞到可互動物體,這里因為只有槍就只做了槍的判斷未進一步優化。

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;

???????}

????}

}

根據射線檢測的結果和按鍵的情況分別執行對應的操作:

if (weaponInFloor != null && fireKeyDown){

????GetWeapon();

}

else{

?????if (fireKeyDown){

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

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

?????}

?????else if(fireKeyPressed){

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

?????}

?????if(fireKeyUp){

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

?????}

}

GIF

武器的拾取需要根據玩家手上是否持有武器做不同動作,相應的武器身上也要有被撿起放下的兩個對應方法:

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;

????????????//注冊

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

????}

}

不同武器在對應的狀態方法中編輯該狀態下的操作即可。

//例: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,跟著馬老師的視頻設置就可以啦:

【簡明UNITY教程】不用寫代碼的高級2D攝像機 Cinemachine

三、湊一個小標題(有感而發)
由于中間跑去學ShaderGraph再回頭看俯視角射擊有種恍若隔世的感覺,慢慢找回寫代碼的狀態思路也更清晰了一些,但其實對自己現在寫的這個Demo并不是太滿意,大概會有漫長的打磨吧。

同時認識到以前對俯視角射擊看得太簡單了,又或者說其實我寫的確實是俯視角射擊,但他離一個完整的游戲還是太遠了。還需要更加努力,了解更多同質類型的游戲,也需要學習更多類型的游戲。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。