最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【反向元氣騎士】用unity實現(xiàn)俯視角射擊是一種怎樣的體驗

2020-03-12 19:22 作者:皮皮關做游戲  | 我要投稿

作者:Yumir


哈嘍大家好我是yumir。

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

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

具體步驟如下:

  1. 實現(xiàn)角色移動。

  2. 使角色和槍看向目標點。

  3. 實現(xiàn)帶準星的射擊。

實現(xiàn)效果

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

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


角色移動

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

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

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


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


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

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

讓角色動起來

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

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

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

{

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

}

else

{

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

}

?

向著鼠標

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

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

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

lookDir = lookDir.normalized;

weaponTrans.right = lookDir;

?

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

之所以這樣設計是因為槍的后坐力動畫必須這樣實現(xiàn),如果要進一步增加游戲體量也需要將武器獨立設計,也就是在左右翻轉(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;

????????}

?

看向鼠標

準星射擊

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

我在腳本中聲明了一個用來控制準星大小的變量,生成子彈的時候在槍的角度的基礎上加上抖動角度。再給角色一個向右邊(子彈的前方)的爆發(fā)力,就可以實現(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);

?

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

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


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

由于子彈飛出可能會碰到角色的碰撞器,所以需要判斷碰撞到的物體的Tag標簽再進行判斷,注意子彈要勾選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);

????????}

????}}

?

最后我增加了一個簡單的鏡頭跟隨,就是文章開頭的效果啦,元氣里的鏡頭是受搖桿影響的,有時間也來研究一下吧。因為Github上傳不穩(wěn)定所以以后都導包出來放網(wǎng)盤啦。

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



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

有意向參與線下游戲開發(fā)學習的讀者可戳這里進一步了解:levelpp.com/


【反向元氣騎士】用unity實現(xiàn)俯視角射擊是一種怎樣的體驗的評論 (共 條)

分享到微博請遵守國家法律
梅州市| 永嘉县| 达拉特旗| 阿拉善左旗| 敖汉旗| 徐水县| 中西区| 德兴市| 随州市| 墨江| 海门市| 南平市| 苏尼特右旗| 宜城市| 赤城县| 呼伦贝尔市| 新疆| 平南县| 明水县| 鹿邑县| 陇南市| 高邮市| 宾川县| 潜江市| 泰安市| 东乌| 都江堰市| 铜梁县| 石台县| 屏南县| 杭锦后旗| 察哈| 屏山县| 特克斯县| 姚安县| 璧山县| 凤城市| 长垣县| 景宁| 竹山县| 肥东县|