unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验...
哈嘍大家好我是yumir。
最近沉迷元氣騎士,自從官方把各種“bug”修復之后,這個游戲對我這種手殘玩家來說實在是太難了。既然打不過,那我就自己寫一個,不就是俯視角射擊嗎,分分鐘給你搞定,一百行代碼都不要。
要說用unity實現俯視角射擊是一種怎樣的體驗,就是太簡單了,要加上元氣騎士,就不簡單了。所以這次只是實現角色控制和手槍射擊,總之“俯視角”和“射擊”都有啦,也是個俯視角射擊游戲了嘛。
具體步驟如下:
實現角色移動首先要有角色,雖然用方塊就可以,但是這樣就會顯得沒有誠意,為了更加有誠意一點我用之前學到的2D綁骨知識做了角色閑置和走路兩個動畫,這樣角色移動的時候就不是平移的,而且還很省時省力【機靈】。
元氣騎士是手游,角色移動是通過屏幕上的搖桿來控制的,現在在電腦上模擬游戲效果直接使用“WASD”來代替,搖桿也比較簡單,下載一個easy touch插件就可以搞定了。
角色移動
首先需要給角色預制體掛載控制腳本以及碰撞器和剛體組件,調節碰撞器的大小并將剛體的重力設置為零。
在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組件,并新建一個動畫狀態機,用骨骼動畫的方法制作一個”點頭“動畫和一個”走路“動畫,添加轉換條件”walk“。
在角色的管理腳本中通過判斷movement的值對walk的值進行修改,角色移動的動畫就設置完畢了。
if (movement == new Vector2(0, 0)) {playerAnima.SetBool("walk", false); } else {playerAnima.SetBool("walk", true); }向著鼠標
雖然這實際上是一個只有一面的角色,但是還是要營造出一種角色和手上的槍都是跟著鼠標走的錯覺,首先需要讓槍轉向鼠標的方向,再來實現角色轉向鼠標的效果。
槍轉向鼠標比較簡單,將鼠標位置和槍的位置的差歸一化,其結果就是槍指向的方向,我的槍口正好是”槍“的右方,所以直接對槍的右方進行賦值。
Vector2 lookDir = target - (Vector2)weaponTrans.position; lookDir = lookDir.normalized; weaponTrans.right = lookDir;角色轉向鼠標的效果稍微復雜,首先我的角色預制體的內部層級是這樣的:
之所以這樣設計是因為槍的后坐力動畫必須這樣實現,如果要進一步增加游戲體量也需要將武器獨立設計,也就是在左右翻轉的時候我分別需要翻轉角色的身體和持有的武器,武器需要變換位置。
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;}看向鼠標準星射擊
前面預制體層級里面可以看到我已經在預制體里面設置好了發射子彈的位置,只需要生成子彈之后讓子彈向著槍口的方向飛出去就可以了。
我在腳本中聲明了一個用來控制準星大小的變量,生成子彈的時候在槍的角度的基礎上加上抖動角度。再給角色一個向右邊(子彈的前方)的爆發力,就可以實現射擊的效果了。
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);為了使射擊的效果更好一點,我加了特效動畫,首先是射擊時槍后座動畫和射擊噴火的動畫在射擊的時候觸發播放,我的狀態機是這樣設計的:
在腳本中通過Animator.Play(狀態名)調用。
子彈的碰撞觸發是寫在子彈預制體的腳本上的,當子彈發生碰撞時銷毀自身并生成一個特效物體(該物體的動畫最后一幀銷毀自身)。
由于子彈飛出可能會碰到角色的碰撞器,所以需要判斷碰撞到的物體的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上傳不穩定所以以后都導包出來放網盤啦。
https://pan.baidu.com/s/1OREQu6OK0UPVe38Jr-Zb6w?pan.baidu.com歡迎加入游戲開發群歡樂攪基:869551769
有意向參與線下游戲開發學習的讀者可戳這里進一步了解:http://www.levelpp.com/
總結
以上是生活随笔為你收集整理的unity判断鼠标移动方向_【反向元气骑士】用unity实现俯视角射击是一种怎样的体验...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机博士美国学校推荐,留学随笔:一位计
- 下一篇: python验证码_Python验证码登