补充UIManager脚本
1.GameUIManager()
{isGameUIManager=true;
if(UIPanelDict.Count!=0){
ClearDict();}}
2.GamePanel文件夹添加脚本继承GameBasePanel
DayNigth,GuardPanel,Hunter,Prophet,Witch,Wolf;
补充UIManager脚本
1.GameUIManager()
{isGameUIManager=true;
if(UIPanelDict.Count!=0){
ClearDict();}}
2.GamePanel文件夹添加脚本继承GameBasePanel
DayNigth,GuardPanel,Hunter,Prophet,Witch,Wolf;
sin 是锐角的对边比斜边
cos 定义是 锐角的邻边比斜边
tan 直角三角形中,锐角对应对边比邻边
推导 Cos 45°
根据勾股定理 a² + b² = c²
斜边 c² =^a² + b²
如果两条边都为1 ,即斜边 ^2
为了计算简化 分母有理化,是针对分母有无理数或无理式的分式而言的,分母有理化也就是把分式的分母变成有理数或有理式的过程。
上下分别乘以根号2
^2/2 是 分母有理化的来
Cos 45° = ^2/2
将好几个物体合并mesh
获取子物体中的meshfilter组件
创建combineinstance组件
for循环赋予combineinstance
sharemesh,局部赚世界的矩阵坐标transform.localtoworldmatrix
创建一个mesh mesh.combinemeshs
这节是贴图 然后可以加实时的阴影
Directional Light 平行光
AndroidJavaClass unityPlayer=new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity=unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass toast=new AndroidJavaClass("android.widget.Toast");
AndroidJavaObject context=currentActivity.Call<AndroidjavaObject>("getApplicationContext");
currentActivity.Call("runOnUiThread",new AndroidJavaRunnable(()=>{
tocsat.CallStatic<AndroidJavaObject>("makeText",context,"send...",tocast.GetStatic<int>("LENGTH_LONG")).Call("show");
}));
笛卡尔坐标系:
1.笛卡尔直角坐标系
2.笛卡尔斜角坐标系
3.笛卡尔坐标系的度量单位一致
4.第一象限++,第二象限-+,第三象限+-,第四--
1.Game场景调整Camera设置
2.定义GameBasePanel脚本
protected GComponent openAnimCom,closeAnimCom,guideMessage,
GMovieClip openEye,closeEye
bool firstTimeInThisPanel,isDayNightPanel;
protected GameBasePanel nextPanel;
GameBasePanel SetNextPanel(GameBasePanel nextGamePanel){nextPanel=nextGamePanel;return nextPanel;}
protected Controller messageController,MessageManager messageManager,GButton certainButton;
1.卡牌翻转效果Turn();
private void Turn()
{
if (DOTween.IsTweening(cardButton))
{
return;
}
toOpen = !toOpen;
DOTween.To(() => 0, x =>
{
if (toOpen)
{
cardBack.rotationY = x;
cardFront.rotationY = -180 + x;
if (x > 90)
{
cardBack.visible = true;
cardFront.visible = false;
}
}
else
{
cardBack.rotationY = -180 + x;
cardFront.rotationY = x;
if (x > 90)
{
cardBack.visible = false;
cardFront.visible = true;
}
}
}, 180, 0.5f).SetTarget(cardButton).SetEase(Ease.OutQuad);
}
GamePanel脚本
RotateCard方法完善
1.GamePanel脚本内变量赋值。
2.ShuffleTheCard(){
int count=0;
while(count<12){
int r=Random.range(1,13);
for(int i=0;i<randomList.Length;i++){
if(randomList[i]==r){
isTheSame=true;
break;
}
}
if(!isTheSame){
randomList[count]=r;
count++;}
isTheSame=false;
}
}
3.定义RotateCard()方法
1.定义GamePanel成员变量
transition star,loadAnim;GButton cardButton;GObject cardFront,cardBack;GComponent guideMessage;Controller messageController;GTextField tex_Number,tex_ID;bool toOpen=true;
2.1-4为狼,5-8为民,9预言家,10女巫,11猎人,12守卫
int[] RandomList=new in[12];bool isTheSame;int index,wolfIndex,villagersIndex
HelpPanel脚本
1.ShowIDInformation(int id)函数
MainPanel脚本重写OnInitPanel方法。
transition=contentPane.GetTransition("WhiteMaskAnim");
transition.Play();
Transition t=panelMask.GetTransition("MaskShow");
t.play();
contentPane.GetChild("Btn_StartGame").OnClick.Add(()=>{ToOtherPanel(UIPanelType.GamePanel);
GameManager.Instance.audioSourceManager.ChangeBGM(1);});
contentPane.GetChild("Btn_Help").OnClick.Add(()=>{ToOtherPanel(UIPanelType.HelpPanel);});
contentPane.GetChild("Btn_Set").OnClick.Add(()=>{ToOtherPanel(UIPanelType.SetPanel);});
contentPane.GetChild("Btn_ExitGame").OnClick.Add(()=>{Application.Quit();});
BasePanel脚本 进入 退出 跳转功能
1.创建EnterPanel(){
Transition t=panelMask.GetTransition(“MaskShow”);
t.play();}
2.创建protected void ToOtherPanel(UIPanelType otherType){
ExitPanel(()=>{ChangePanelCallback(otherType)});}
3.创建Protected void ExitPanel(PlayCompleteCallback playCompleteCallback){
Transition t=panelMask.GetTransition(“MaskHide”);
t.play(playCompleteCallback);
}
4.protected void ChangePanelCallback(UIPanelType otherType){
uiManager.UIPanelDict[currentUIPanelType].Hide();
uiManager.UIPanelDict[otherType].Show();
uiManager.UIPanelDict[otherType].EnterPanel();
}
1.UIManager函数定义
bool isGameUIManager;
UIPanelType currentGamePanel;
2.建立字典Dictionary<UIPanelType,BasePanel> UIPanelDict;
构造UIManager时,实例化UIPanelDict=new Dictionary<UIPanelType,BasePanel>();
3.当切换菜单场景和游戏场景时,需要清空字典
ClearDict(){
foreach(var item in UIPanelDict)
{
item.Value.Dispose();}
UIPanelDict.Clear();
}
4.创建GameUIManager和MainUIManager函数,
public void MainUIManager(){
isGameUIManager=false;
if(UIPanelDict.Count!=0){
ClearDict();}
UIPanelDict.Add(UIPanelType.MainPanel,newMainPanel("Panel_Main",UIPanelType.MainPanel,this));
UIPanelDict.Add(UIPanelType.GamePanel,new GamePanel("Panel_Game",UIPanelType.GamePanel,this));
UIPanelDict.Add(UIPanelType.HelpPanel,new HelpPanel("Panel_Help",UIPanelType.HelpPanel,this));
UIPanelDict.Add(UIPanelType.SetPanel,new SetPanel("Panel_Set",UIPanelType.SetPanel,this));
UIPanelDict[UIPanelType.MainPanel].Show();
}
5.GameManager构建UImanager时调用MainUIManager。
1.定义BasePanel内所含变量;
protected string packageName,Transition transition,Controller controller,GComponent panelMask,UIPanelType currentUIPanelType,UIManager uiManager;
2.BasePanel构造函数;
public BasePanel(string packageName,UIPanelType uiPanelType,UIManager uiManager)
{this.packageName=packageName;
currentUIPanelType=uiPanelType;
this.uiManager=uiManager;
UIPackage.AddPackage("UI/"+packageName);
}
3.protected override void OnInit()
{contentPanel=UIPackage.CreateObject(packageName,"Main").asCom;
panelMask=this.contentPanel.GetChild("PanelMask").asCom
OnInitPanel()
4.protected virtual void OnInitPanel()
}
1.UIPanel文件夹下建立文件夹GamePanel和MainPanel;
2.创建BasePanel并引入FairyGUI,继承自Window。
3.创建GamePanel,MainPanel,HelpPanel,SetPanel脚本,并都继承自BasePanel。
1.GameJudgement方法,返回GameJudgementState;
4神民 4村民 4匹狼
4神民4个int 数
4存民4狼人分别为2个数组
死亡列表,存放所有的死亡玩家
我们有一个判定列表,专门用来判定游戏的
游戏判定的方法:
//狼人是否团灭
1.需要定义一个数作为标杆num(根据它的值来进行游戏的判定)
2.我们要把当前死亡列表里的号码放进判定表列(那是因为我们判定列表每次都要清空,进行更改操作)
3.我们需要定义一个移除列表
4.两个for循环嵌套遍历的方法,来比较当前死亡列表里的int数与狼人数组里的4个数,相等的有几个。
5.如果相等,则num++;把相等的数加入移除列表。
6.如果num==4,那么好人获胜。
//神民是否团灭
7.执行上边的方法
8.num是否等于4,如果等于,那么狼人获胜。
//神民是否团灭
9.判定列表的长度是否等于4.
10.如果是,那么狼人获胜
11.那么游戏继续