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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验...

發(fā)布時間:2025/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

哈嘍大家好我是yumir。

最近沉迷元?dú)怛T士,自從官方把各種“bug”修復(fù)之后,這個游戲?qū)ξ疫@種手殘玩家來說實(shí)在是太難了。既然打不過,那我就自己寫一個,不就是俯視角射擊嗎,分分鐘給你搞定,一百行代碼都不要。

要說用unity實(shí)現(xiàn)俯視角射擊是一種怎樣的體驗(yàn),就是太簡單了,要加上元?dú)怛T士,就不簡單了。所以這次只是實(shí)現(xiàn)角色控制和手槍射擊,總之“俯視角”和“射擊”都有啦,也是個俯視角射擊游戲了嘛。

具體步驟如下:

  • 實(shí)現(xiàn)角色移動。
  • 使角色和槍看向目標(biāo)點(diǎn)。
  • 實(shí)現(xiàn)帶準(zhǔn)星的射擊。
  • 實(shí)現(xiàn)效果

    實(shí)現(xiàn)角色移動首先要有角色,雖然用方塊就可以,但是這樣就會顯得沒有誠意,為了更加有誠意一點(diǎn)我用之前學(xué)到的2D綁骨知識做了角色閑置和走路兩個動畫,這樣角色移動的時候就不是平移的,而且還很省時省力【機(jī)靈】。

    元?dú)怛T士是手游,角色移動是通過屏幕上的搖桿來控制的,現(xiàn)在在電腦上模擬游戲效果直接使用“WASD”來代替,搖桿也比較簡單,下載一個easy touch插件就可以搞定了。

    角色移動

    首先需要給角色預(yù)制體掛載控制腳本以及碰撞器和剛體組件,調(diào)節(jié)碰撞器的大小并將剛體的重力設(shè)置為零。

    在Update中獲取鍵盤輸入的"Horizontal"和"Vertical"的值,這兩個值分別代表”A、D“和”W、S“的按下,正好形成一個二維坐標(biāo),可以用來計(jì)算移動的目標(biāo)點(diǎn)。

    movement.x = Input.GetAxis("Horizontal"); movement.y = Input.GetAxis("Vertical");

    在FixedUpdate中更新角色的下一個位置,也就是將上面的movement和角色當(dāng)前位置相加。

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

    這樣一來角色就可以像這樣傻fufu的在地圖里亂竄了。

    讓角色動起來

    在角色身上添加一個Animator組件,并新建一個動畫狀態(tài)機(jī),用骨骼動畫的方法制作一個”點(diǎn)頭“動畫和一個”走路“動畫,添加轉(zhuǎn)換條件”walk“。

    在角色的管理腳本中通過判斷movement的值對walk的值進(jìn)行修改,角色移動的動畫就設(shè)置完畢了。

    if (movement == new Vector2(0, 0)) {playerAnima.SetBool("walk", false); } else {playerAnima.SetBool("walk", true); }

    向著鼠標(biāo)

    雖然這實(shí)際上是一個只有一面的角色,但是還是要營造出一種角色和手上的槍都是跟著鼠標(biāo)走的錯覺,首先需要讓槍轉(zhuǎn)向鼠標(biāo)的方向,再來實(shí)現(xiàn)角色轉(zhuǎn)向鼠標(biāo)的效果。

    槍轉(zhuǎn)向鼠標(biāo)比較簡單,將鼠標(biāo)位置和槍的位置的差歸一化,其結(jié)果就是槍指向的方向,我的槍口正好是”槍“的右方,所以直接對槍的右方進(jìn)行賦值。

    Vector2 lookDir = target - (Vector2)weaponTrans.position; lookDir = lookDir.normalized; weaponTrans.right = lookDir;

    角色轉(zhuǎn)向鼠標(biāo)的效果稍微復(fù)雜,首先我的角色預(yù)制體的內(nèi)部層級是這樣的:

    之所以這樣設(shè)計(jì)是因?yàn)闃尩暮笞赢嫳仨氝@樣實(shí)現(xiàn),如果要進(jìn)一步增加游戲體量也需要將武器獨(dú)立設(shè)計(jì),也就是在左右翻轉(zhuǎn)的時候我分別需要翻轉(zhuǎn)角色的身體和持有的武器,武器需要變換位置。

    if (rg.position.x > target.x){body.flipX = true;weaponTrans.GetComponentInChildren<SpriteRenderer>().flipY = true;weaponTrans.position = p2.position;}else if (rg.position.x < target.x){body.flipX = false;weaponTrans.GetComponentInChildren<SpriteRenderer>().flipY = false;weaponTrans.position = p1.position;}

    看向鼠標(biāo)

    準(zhǔn)星射擊

    前面預(yù)制體層級里面可以看到我已經(jīng)在預(yù)制體里面設(shè)置好了發(fā)射子彈的位置,只需要生成子彈之后讓子彈向著槍口的方向飛出去就可以了。

    我在腳本中聲明了一個用來控制準(zhǔn)星大小的變量,生成子彈的時候在槍的角度的基礎(chǔ)上加上抖動角度。再給角色一個向右邊(子彈的前方)的爆發(fā)力,就可以實(shí)現(xiàn)射擊的效果了。

    GameObject bullet = Instantiate(bulletPrefab, PlayerControl.instance.firePoint.position, PlayerControl.instance.firePoint.rotation * Quaternion.AngleAxis(Random.Range(0, sight), Vector3.forward)); bullet.GetComponent<Rigidbody2D>().AddForce(bullet.transform.right* bulletForce, ForceMode2D.Impulse);

    為了使射擊的效果更好一點(diǎn),我加了特效動畫,首先是射擊時槍后座動畫和射擊噴火的動畫在射擊的時候觸發(fā)播放,我的狀態(tài)機(jī)是這樣設(shè)計(jì)的:

    在腳本中通過Animator.Play(狀態(tài)名)調(diào)用。

    子彈的碰撞觸發(fā)是寫在子彈預(yù)制體的腳本上的,當(dāng)子彈發(fā)生碰撞時銷毀自身并生成一個特效物體(該物體的動畫最后一幀銷毀自身)。

    由于子彈飛出可能會碰到角色的碰撞器,所以需要判斷碰撞到的物體的Tag標(biāo)簽再進(jìn)行判斷,注意子彈要勾選Trigger,不然會把玩家角色碰開。

    public class Bullet : MonoBehaviour {public GameObject hitEffect;private void OnTriggerEnter2D(Collider2D collision){if (collision.transform.tag != "Player"){Instantiate(hitEffect, transform.position, Quaternion.identity);Destroy(gameObject);}} }

    最后我增加了一個簡單的鏡頭跟隨,就是文章開頭的效果啦,元?dú)饫锏溺R頭是受搖桿影響的,有時間也來研究一下吧。因?yàn)镚ithub上傳不穩(wěn)定所以以后都導(dǎo)包出來放網(wǎng)盤啦。

    https://pan.baidu.com/s/1OREQu6OK0UPVe38Jr-Zb6w?pan.baidu.com

    歡迎加入游戲開發(fā)群歡樂攪基:869551769

    有意向參與線下游戲開發(fā)學(xué)習(xí)的讀者可戳這里進(jìn)一步了解:http://www.levelpp.com/

    總結(jié)

    以上是生活随笔為你收集整理的unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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