一、基本操作演練
下載 Fantasy Skybox FREE, 構建自己的遊戲場景
首先上Assert Store下載Skybox,我下載的是這一個:
之後我在unity中,把下載好的天空盒拖入攝像機中:
最後成品如下:
二、編程實踐
牧師與魔鬼 動作分離版
【2019新要求】:設計一個裁判類,當遊戲達到結束條件時,通知場景控制器遊戲結束
根據老師給出的類圖:
我們新建的SSActionManager類需要將動作與遊戲場景分離出來,其中包含的方法是characterIsClicked方法,這樣能夠將FirstController的功能減少:
//動作管理基類 – SSActionManager
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SSActionManager : MonoBehaviour
{
public Judge jd;
public void icharacterIsClicked(CharacterModel characterCtrl,BoatModel boat,CoastModel to_Coast,CoastModel from_Coast, UserGUI userGUI)
{
if (characterCtrl.isOnBoat())
{
CoastModel whichCoast;
// -1to、1from
if (boat.get_to_from() == -1)
{
whichCoast = to_Coast;
}
else
{
whichCoast = from_Coast;
}
boat.GetOffBoat(characterCtrl.getName());
characterCtrl.moveToPosition(whichCoast.getEmptyPosition());
characterCtrl.getOnCoast(whichCoast);
whichCoast.getOnCoast(characterCtrl);
}
else//Character在岸上
{
CoastModel whichCoast = characterCtrl.getCoastController();
//船是滿的
if (boat.getEmptyNum() == -1)
{
return;
}
//船和目標岸位置不同
if (whichCoast.get_to_or_from() != boat.get_to_from())
return;
whichCoast.getOffCoast(characterCtrl.getName());
characterCtrl.moveToPosition(boat.getEmptyPosition());
characterCtrl.getOnBoat(boat);
boat.GetOnBoat(characterCtrl);
}
userGUI.status = jd.icheck_game_status(boat,to_Coast, from_Coast);
}
}
另外新增的裁判類Judge判斷遊戲的狀態:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Judge : MonoBehaviour
{
public int icheck_game_status(BoatModel boat, CoastModel to_Coast, CoastModel from_Coast)
{
int from_priest = 0;
int from_devil = 0;
int to_priest = 0;
int to_devil = 0;
int[] fromCount = from_Coast.getCharacterNum();
from_priest += fromCount[0];
from_devil += fromCount[1];
int[] toCount = to_Coast.getCharacterNum();
to_priest += toCount[0];
to_devil += toCount[1];
//勝利
if (to_priest + to_devil == 6)
return 2;
int[] boatCount = boat.getCharacterNum();
//遊戲繼續
//船在對岸
if (boat.get_to_from() == -1)
{
to_priest += boatCount[0];
to_devil += boatCount[1];
}
//船在初始岸
else
{
from_priest += boatCount[0];
from_devil += boatCount[1];
}
//失敗
if (from_priest < from_devil && from_priest > 0)
{
return 1;
}
if (to_priest < to_devil && to_priest > 0)
{
return 1;
}
return 0;
}
}