Unity3d學習之路-簡單AR遊戲
簡單AR遊戲
遊戲規則
識別指定圖片,顯示玩家和防禦塔,點選按鍵對玩家進行上下左右移動,點選射擊,在射程範圍內會對防禦塔進行射擊,若玩家或者防禦塔死亡遊戲結束。
遊戲實現
遊戲場景的搭建
- 識別圖
在Vuforia官網上上傳兩張識別圖分別命名為Tower和Player,然後下載這兩個Targets。在Unity中準備好Vuforia開發環境,匯入下載好的兩個Database。
然後按照下圖設定,這裡的Max Simultaneous Tracked Images本次遊戲設定為2,可以同時識別2張圖
將Vuforia預製件ImageTarget拖入場景中兩次,然後分別設定它的Database和Image Target
- 模型
在Unity的Asset Store中下載模型,我本次遊戲使用的是ToonyTinyPeople和CanonTower,匯入場景中,將人物和防禦塔分別掛載在兩張ImageTarget下,調整合適的大小,分別命名為Player和Tower。
為兩個模型新增血條,血條的新增是參考分別使用IMGUI和UGUI實現血條的預製設計中的UGUI實現方法。
建立一個Sphere命名為Bullet作為防禦塔發射的子彈。在Tower的發射子彈的口的位置建立一個空物體叫做open,作為Tower的子物體,方便定位子彈發射時候的位置。
給Player建立Animator Controller
遊戲邏輯的實現
- 玩家
玩家可以進行移動也可以攻擊防禦塔,受到子彈攻擊後會減血。移動是通過使用者點選按鈕實現(實現效果很差),因為我這次最後是在移動端進行遊戲,所以最好是使用與觸控有關來進行移動。點選攻擊按鈕,玩家會播放攻擊動畫,如果塔在射程內,則塔掉血。受到子彈攻擊是通過兩個物體的碰撞檢測來實現的。部分函式如下:
//玩家攻擊
public void PlayerAttack()
{
//播放攻擊動畫
player.GetComponent<Animator>().SetTrigger("shoot");
//如果玩家在塔的範圍內,塔掉血
float dis = Vector3.Distance(tower.transform.position, player.transform.position);
if (dis < distance)
{
tower.GetComponent<TowerController>().ReduceBlood();
}
}
- 防禦塔
防禦塔在檢測到玩家進入射程範圍內會間隔2s發射一次子彈,因為子彈時間飛行比發射間隔快,所以場景中一直只有一顆子彈重複利用。防禦塔是一直朝向玩家。部分函式如下:
void Update ()
{
if(player != null && !gameover)
{
float dis = Vector3.Distance(transform.position, player.transform.position);
if(dis < attackDistance)
{
if(player.GetComponent<PlayerController>().getPlayerLife()>0)
{
transform.LookAt(player.transform);
time += Time.deltaTime;
if(time >= 2)
{
//發射子彈
shoot(player.transform.position);
time = 0;
}
}
}
//子彈朝玩家發射
if (bullet.activeSelf)
bullet.transform.position = Vector3.MoveTowards(bullet.transform.position, player.transform.position, Time.deltaTime * speed);
if (bullet.transform.position == player.transform.position)
{
bullet.SetActive(false);
}
}
}
//發射子彈
void shoot(Vector3 position)
{
bullet.transform.position = open.position;
bullet.SetActive(true);
}
遊戲指令碼掛載
在場景中建立一個空物體,掛載
SceneController
和UserAction
,在Player上掛載PlayerController
,在Tower上掛載TowerController
。
遊戲打包到安卓平臺
在Edit->Preference->External Tools中配置好JDK和SDK的路徑
然後點選Files->Build Setings,將場景新增並且平臺切換成Andriod。點選Player settings修改Other Settings下的 Bundle Identifier 中的com.Company.ProductName為自己的自定義的,例如:com.sysu.test。並選擇Android 版本,版本不能低於自己的手機版本。配置好之後點選build儲存apk檔案。
實現效果
小結
這次AR遊戲製作得比較簡單,但是在移動端移動使用按鍵向四周移動體驗不是很好,可以製作搖桿或者根據觸碰方向移動。程式碼的耦合度有一點高,還需要改進。塔的位置因為使用LookAt函式有一些不穩定。有時間的話重新再做一次吧。
完整專案和遊戲視訊請點選傳送門