项目6实现业务逻辑模块.ppt

上传人:小飞机 文档编号:5888720 上传时间:2023-08-29 格式:PPT 页数:50 大小:259.50KB
返回 下载 相关 举报
项目6实现业务逻辑模块.ppt_第1页
第1页 / 共50页
项目6实现业务逻辑模块.ppt_第2页
第2页 / 共50页
项目6实现业务逻辑模块.ppt_第3页
第3页 / 共50页
项目6实现业务逻辑模块.ppt_第4页
第4页 / 共50页
项目6实现业务逻辑模块.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《项目6实现业务逻辑模块.ppt》由会员分享,可在线阅读,更多相关《项目6实现业务逻辑模块.ppt(50页珍藏版)》请在三一办公上搜索。

1、腾讯云游戏应用开发,实现业务逻辑模块,项目6,学习目标,实现游戏的几个重要业务逻辑 掌握CS模式下协议的使用 掌握登录注册功能的基本实现方法,1,实现登录功能,1.实现客户端请求登录方法,当用户在登录界面中单击“登录”按钮后,后台尝试与服务器建立连接,连接成功后发送登录协议,协议格式为login;id;password;。修改LoginPanel.cs脚本中的OnLoginClick方法,代码如下。,/*登录按钮事件*/publicvoidOnLoginClick()if(idInput.text=|pwInput.text=)/*打开提示框*/PanelMgr.instance.OpenPa

2、nel(用户名密码不能为空!);return;/如果服务器没有连接,连接服务器)NetMgr.instance.proto=newProtocolStr();/*连接*/if(!NetMgr.instance.Connect()PanelMgr.instance.OpenPanel(连接服务器失败!);,1,实现登录功能,1.实现客户端请求登录方法,/发送登录协议ProtocolStrprotocol=newProtocolStr();protocol.AddString(login);protocol.AddString(idInput.text);protocol.AddString(pw

3、Input.text);/*一次性监听*/NetMgr.instance.Send(protocol,OnLoginBack);,1,实现登录功能,2.实现服务端登录协议处理方法,在HandleConnMsg类中添加Msglogin方法,当服务端收到login协议时,分发给Mgslogin方法处理,publicvoidMsglogin(Connconn,ProtocolBaseprotoBase)stringid,pw;ProtocolStrprotocol=(ProtocolStr)protoBase;id=protocol.GetString(1);pw=protocol.GetStrin

4、g(2);/*构建返回协议*/ProtocolStrprotocolRet=newProtocolStr();protocolRet.AddString(login);/*数据库校验*/如果用户名密码校验失败if(!DataMgr.instance.CheckPassWord(id,pw)Console.WriteLine(Msglogin登录失败:用户名和密码错误+conn.GetAddress();protocolRet.AddInt(-1);/返回失败结果conn.Send(protocolRet);return;,1,实现登录功能,2.实现服务端登录协议处理方法,if(!ServNet

5、.instance.KickOff(id)/如果踢下线失败Console.WriteLine(Msglogin登录失败:挤下线失败+conn.player.id);/返回失败结果protocolRet.AddInt(-1);conn.Send(protocolRet);return;PlayerDataplayerData=DataMgr.instance.GetPlayerData(id);/获取玩家数据if(playerData=null)Console.WriteLine(Msglogin登录失败:获取账户信息失败+conn.player.id);protocolRet.AddInt(-

6、1);/返回失败结果conn.Send(protocolRet);return;conn.player=newPlayer(id,conn,playerData);/登入账户,加载数据protocolRet.AddInt(0);/返回成功结果conn.Send(protocolRet);,1,实现登录功能,3.实现客户端处理回发结果方法,添加OnLoginBack方法,/*登录协议回执*/publicvoidOnLoginBack(ProtocolBaseprotocol)/*构建协议*/ProtocolStrproto=(ProtocolStr)protocol;/*校验登录结果*/intr

7、esult=proto.GetInt(1);if(result=0)GameMgr.instance.id=idInput.text;/保存账号IDPanelMgr.instance.OpenPanel(登录成功!);PanelMgr.instance.OpenPanel();/*进入游戏大厅*/PanelMgr.instance.ClosePanel(this);elseNetMgr.instance.Close();/断开连接PanelMgr.instance.OpenPanel(登录失败,请检查用户名密码!);,1,实现登录功能,4.实现踢下线模块,如果该角色在游戏中,则把它踢下线。并且

8、发送Logout协议,向被踢下线的客户端发送通知。在ServNet中添加KickOff方法,代码如下。,/*如果某id已经在线就踢下线*/publicboolKickOff(stringid)for(inti=0;iconns.Length;i+)if(connsi=null)continue;if(!connsi.isUse)continue;if(connsi.player=null)continue;/*如果该玩家已经在线*/if(connsi.player.id=id)lock(connsi.player)Console.WriteLine(检查到+id+已在线,踢下线);/*通知客户

9、端下线*/ProtocolStrprotocolLogout=newProtocolStr();protocolLogout.AddString(logout);connsi.Send(protocolLogout);returnconnsi.player.Logout();returntrue;,2,实现获取自身数据功能,1.实现客户端发送请求方法,在LobbyPanel.cs脚本的OnShowing方法的最后添加相关代码,如下。,/*请求加载自身数据*/ProtocolStrproto=newProtocolStr();proto.AddString(getachieve);/发送协议,并

10、注册接收方法NetMgr.instance.Send(proto,RecvGetAchieve);,2,实现获取自身数据功能,2.实现服务端处理协议的方法,当服务端接收到协议时,分发给对应的方法,将玩家的胜负场次写入协议返回给玩家。在HandlePlayerMsg类中添加协议处理方法Msggetachieve方法,代码如下。,/*获取玩家自身数据*/*返回协议getachieve,win,lost,*/publicvoidMsggetachieve(Playerplayer,ProtocolBaseprotoBase)ProtocolStrprotocolRet=newProtocolStr(

11、);protocolRet.AddString(getachieve);protocolRet.AddString(player.id);protocolRet.AddInt(player.playerData.win);protocolRet.AddInt(player.playerData.fail);player.conn.Send(protocolRet);return;,2,实现获取自身数据功能,3.实现客户端处理回发结果,客户端收到返回协议并更新到UI上,代码如下。,/*个人信息协议接收*/publicvoidRecvGetAchieve(ProtocolBaseprotocol)

12、/*解析协议*/ProtocolStrproto=(ProtocolStr)protocol;IDtext.text=玩家:;IDtext.text+=proto.GetString(1);IDtext.text+=,胜场:;IDtext.text+=proto.GetInt(2);IDtext.text+=,负场:;IDtext.text+=proto.GetInt(3);,3,实现注册功能,1.实现客户端请求注册方法,当用户在注册界面中单击“注册”按钮后,后台尝试与服务器建立连接,连接成功后发送注册协议,协议格式为register;id;password;。修改RegPanel.cs脚本中

13、的OnRegClick方法,代码如下。,/*注册按钮事件*/publicvoidOnRegClick()/*本地校验*/用户名密码为空if(idInput.text=|pwInput.text=)PanelMgr.instance.OpenPanel(用户名密码不能为空!);return;/两次密码不同if(pwInput.text!=repInput.text)PanelMgr.instance.OpenPanel(两次输入的密码不同!);return;,3,实现注册功能,1.实现客户端请求注册方法,/连接服务器if(NetMgr.instance.status!=NetMgr.Status

14、.Connected)NetMgr.instance.proto=newProtocolStr();if(!NetMgr.instance.Connect()PanelMgr.instance.OpenPanel(连接服务器失败!);/构建协议ProtocolStrprotocol=newProtocolStr();protocol.AddString(register);protocol.AddString(idInput.text);protocol.AddString(pwInput.text);/发送NetMgr.instance.Send(protocol,OnRegBack);,3

15、,实现注册功能,2.实现服务端注册协议处理方法,当服务端收到register协议时,分发给Msgregister方法处理。该方法首先解析协议中的用户名和密码。调用GetXXX是获取协议数值的一种方法。然后调用向user中表添加数据,如果添加失败,则通过protocol.AddInt(0)构造参数为0的返回协议。最后通过CreatePlayer创建角色,并返回协议给客户端,代码如下。,/*注册协议*/publicvoidMsgregister(Connconn,ProtocolBaseprotoBase)/*解析协议*/stringid,pw;ProtocolStrprotocol=(Proto

16、colStr)protoBase;id=protocol.GetString(1);pw=protocol.GetString(2);Console.WriteLine(Msgregister处理注册协议:+conn.GetAddress()+用户名:+id+密码:+pw);/*注册*/boolresult=DataMgr.instance.Register(id,pw);,3,实现注册功能,2.实现服务端注册协议处理方法,/构建返回协议ProtocolStrprotocolRet=newProtocolStr();protocolRet.AddString(register);if(resu

17、lt)Console.WriteLine(Msgregister注册成功+conn.GetAddress();protocolRet.AddInt(0);elseConsole.WriteLine(Msgregister注册失败+conn.GetAddress();protocolRet.AddInt(-1);/返回协议给客户端conn.Send(protocolRet);,3,实现注册功能,3.实现客户端处理回发结果方法,服务端处理协议后,会返回处理结果,格式为register;result;。result为0表示成功,-1表示失败。客户端收到返回协议再做出响应。注册成功则关闭注册界面。注册

18、失败则提示注册失败。添加OnRegBack方法,代码如下。,/*注册协议回执*/publicvoidOnRegBack(ProtocolBaseprotocol)/*解析协议*/ProtocolStrproto=(ProtocolStr)protocol;intresult=proto.GetInt(1);if(result=0)PanelMgr.instance.OpenPanel(注册成功!);/*返回登录界面*/PanelMgr.instance.ClosePanel(this);elseNetMgr.instance.Close();PanelMgr.instance.OpenPane

19、l(注册失败,请更换用户名!);,4,实现匹配功能,1.实现客户端的匹配请求,单击“匹配”按钮,发送相关协议。在LobbyPanel.cs中添加新字段,代码如下。,/*匹配状态*/enumMatchStateMatching,NoneMatchStatestate=MatchState.None;,4,实现匹配功能,1.实现客户端的匹配请求,修改LobbyPanel.cs中的OnMatchClick方法,代码如下。,/匹配按钮事件publicvoidOnMatchClick()if(state=MatchState.None)ProtocolStrprotocol=newProtocolStr

20、();protocol.AddString(matchin);NetMgr.instance.Send(protocol);state=MatchState.Matching;btnText.text=匹配中n(点击取消);elseProtocolStrprotocol=newProtocolStr();protocol.AddString(matchout);NetMgr.instance.Send(protocol);state=MatchState.None;btnText.text=匹配n(点击开始);,4,实现匹配功能,2.创建服务端匹配管理类MatchMgr,MatchMgr类主要

21、负责以下工作:定义匹配队列。当匹配队列满足人数要求时,创建房间,并将这些玩家添加到房间的玩家列表里。定义游戏开始要求的人数。当队列满足人数要求的时候,将队列最前面的几个人放到一个新建的房间类里。控制队列的进入与离开。添加MatchMgr匹配管理类,代码如下。,usingSystem;/*匹配管理*/usingSystem.Collections.Generic;publicclassMatchMgr/单例publicstaticMatchMgrinstance;/匹配列表publicListlist=newList();/开始游戏需要的人数publicintbeginNum=4;,4,实现匹配

22、功能,2.创建服务端匹配管理类MatchMgr,/*构造方法*/publicMatchMgr()instance=this;/*判断匹配队列中是否已经足够开局*/publicvoidCanBegin()if(list.Count=beginNum)Console.WriteLine(匹配成功,创建房间);Roomroom=newRoom();for(inti=0;ibeginNum;i+)room.AddPlayer(list0);list.Remove(list0);/*通知所有匹配上的玩家进入房间*/room.MatchOK();,4,实现匹配功能,2.创建服务端匹配管理类MatchMgr

23、,publicvoidAddPlayer(Playerplayer)lock(list)if(list.Contains(player)return;list.Add(player);player.tempData.status=PlayerTempData.Status.Matching;Console.WriteLine(Msgmatchin进入匹配队列+player.id);CanBegin();/*将玩家移出匹配队列*/publicvoidRemovePlayer(Playerplayer)lock(list)if(!list.Contains(player)return;player

24、.tempData.status=PlayerTempData.Status.None;list.Remove(player);Console.WriteLine(Msgmatchout离开匹配队列+player.id);,4,实现匹配功能,3.创建服务端房间类Room,Room类主要负责以下工作:当匹配队列满足人数要求时,创建房间,并将这些玩家添加到房间的玩家列表里。创建房间时,向房间中所有玩家发送匹配成功协议。分配队伍,以错开的方式,比如135是红队、246是蓝队。添加Room房间类,代码如下。,usingSystem;usingSystem.Collections.Generic;usi

25、ngSystem.Linq;/房间publicclassRoom/状态publicenumStatus/*准备中*/Prepare=1,/*游戏中*/Fight=2,4,实现匹配功能,3.创建服务端房间类Room,publicStatusstatus=Status.Prepare;publicintmaxPlayers=2;/玩家/*已准备的玩家*/intreadyNum=0;/*玩家列表*/publicDictionaryplayerlist=newDictionary();/*座位数组*/publicRoom();publicboolAddPlayer(Playerplayer)/添加玩家

26、lock(playerlist)if(playerlist.Count=maxPlayers)returnfalse;/*修改玩家临时数据*/player.tempData.room=this;player.tempData.team=SwitchTeam();player.tempData.status=PlayerTempData.Status.Room;/*写入*/playerlist.Add(player.id,player);returntrue;,4,实现匹配功能,3.创建服务端房间类Room,/*分配队伍*/*返回一个队伍的ID*/publicintSwitchTeam()int

27、count1=0;intcount2=0;foreach(Playerplayerinplayerlist.Values)if(player.tempData.team=1)count1+;if(player.tempData.team=2)count2+;if(count1=count2)return1;elsereturn2;,4,实现匹配功能,3.创建服务端房间类Room,/广播publicvoidBroadcast(ProtocolBaseprotocol)lock(playerlist)foreach(Playerplayerinplayerlist.Values)player.co

28、nn.Send(protocol);/*匹配成功*/*通知所有玩家进入房间,并广播房间中所有玩家的信息*/publicvoidMatchOK()ProtocolStrprotocol=newProtocolStr();protocol.AddString(enterroom);Broadcast(protocol);,4,实现匹配功能,4.创建服务端协议处理方法,添加HandleMatchMsg.cs文件用来处理匹配协议,它有两个协议处理方法Msgmatchin和Msgmatchout,代码如下。,usingSystem;usingSystem.Collections.Generic;publ

29、icpartialclassHandlePlayerMsg/进入匹配队列publicvoidMsgmatchin(Playerplayer,ProtocolBaseprotoBase)MatchMgr.instance.AddPlayer(player);/离开匹配队列publicvoidMsgmatchout(Playerplayer,ProtocolBaseprotoBase)MatchMgr.instance.RemovePlayer(player);,4,实现匹配功能,5.客户端响应匹配结果,当匹配成功后,服务端会发送enterroom协议,客户端接收协议后进入到房间。在OnShowi

30、ng方法的最后注册进入房间的协议,代码如下。,/*添加事件监听,匹配成功进入房间*/NetMgr.instance.msgDist.AddListener(enterroom,RecvEnterRoom);,添加回调方法,代码如下。,/*协议回发*/publicvoidRecvEnterRoom(ProtocolBaseprotocol)Debug.Log(RecvEnterRoom);PanelMgr.instance.OpenPanel();PanelMgr.instance.ClosePanel(this);,5,实现准备功能,1.客户端发送准备通知,当玩家单击“确认”按钮(也就是游戏中

31、常说的准备)后,向服务端发送choosedhero协议。修改确认按钮的点击事件,代码如下。,/确认选择按钮事件publicvoidOnYesClick()/*通知服务器*/ProtocolStrprotocol=newProtocolStr();protocol.AddString(choosedhero);protocol.AddString(Archer);NetMgr.instance.Send(protocol);/*点击一次准备按钮后,按钮就失效*/yesBtn.onClick.RemoveAllListeners();,5,实现准备功能,2.服务端处理准备结果,在HandleMat

32、chMsg中添加处理choosedhero协议的方法,代码如下。,/选择英雄publicvoidMsgchoosedhero(Playerplayer,ProtocolBaseprotoBase)/*解析协议*/ProtocolStrprotocol=(ProtocolStr)protoBase;stringheroName=protocol.GetString(1);/*检查是否可以开始*/player.tempData.room.ChoosedHero(player,heroName);,5,实现准备功能,2.服务端处理准备结果,每当有一个玩家提交选择英雄协议时进行判断,是否可以开始战斗。

33、在Room类中添加相关方法,代码如下。,/*选择英雄*/publicvoidChoosedHero(Playerplayer,stringheroName)/修改玩家临时数据player.tempData.heroName=heroName;/当前房间中准备的玩家数量+1readyNum+;/*是否可以开始游戏*/intbeginNum=playerlist.Count;Console.WriteLine(readyNum+位玩家已选择英雄);/如果准备的玩家=所有玩家,则可以开始if(readyNum=beginNum)Console.WriteLine(所有玩家选择完毕,开始战斗!);St

34、artFight();,5,实现准备功能,2.服务端处理准备结果,当所有玩家都准备完毕时,向所有玩家发送游戏开始协议.在Room类中添加方法,代码如下。,/*开始游戏*/publicvoidStartFight()/*构建fight协议*/ProtocolStrprotocol=newProtocolStr();protocol.AddString(fight);status=Status.Fight;intteamPos1=1;intteamPos2=1;lock(playerlist)protocol.AddInt(playerlist.Count);/*将每一个玩家的信息逐一添加到协议中

35、*/foreach(Playerpinplayerlist.Values)/*玩家ID*/protocol.AddString(p.id);,5,实现准备功能,2.服务端处理准备结果,/*选择的英雄*/protocol.AddString(p.tempData.heroName);/*所在队伍*/protocol.AddInt(p.tempData.team);/*队伍位置*/if(p.tempData.team=1)protocol.AddInt(teamPos1+);elseprotocol.AddInt(teamPos2+);/*修改所有玩家的临时数据*/p.tempData.statu

36、s=PlayerTempData.Status.Fight;p.tempData.isAlive=true;/*广播*/Broadcast(protocol);,5,实现准备功能,3.客户端处理回发协议,当服务端确定可以开始游戏时,会向房间中每一个玩家发送一个fight协议,客户端接收fight协议,开始处理战场。添加协议监听并在关闭面板时注销,代码如下。,/*添加监听*/NetMgr.instance.msgDist.AddListener(fight,RecvFight);,在OnClosing方法中删除监听,代码如下。,publicoverridevoidOnClosing()NetMg

37、r.instance.msgDist.DelListener(fight,RecvFight);,5,实现准备功能,3.客户端处理回发协议,实现RecvFight方法,代码如下。,/*处理fight协议*/publicvoidRecvFight(ProtocolBaseprotocol)ProtocolStrproto=(ProtocolStr)protocol;/*开始战斗*/PanelMgr.instance.OpenPanel();PanelMgr.instance.ClosePanel(this);/初始化战场,稍后实现/BattleManager.instance.StartBatt

38、le(proto);,6,实现战场管理功能,1.创建BattleManager战场管理类,添加BattleManager.cs脚本用来处理战场布置,代码如下。,usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassBattleManager:MonoBehaviour/*角色的预制体*/publicGameObjectarcherPre;/*战场中的所有玩家*/publicDictionarylist=newDictionary();/*单例*/publicstaticBattle

39、Managerinstance;/*皮肤*/publicMaterialmat1,mat2;voidAwake()instance=this;,6,实现战场管理功能,2.添加初始化战场的方法,用StartBattle方法解析fight协议,实例化协议中的每个玩家,代码如下。,/*开始战斗*/*处理一切战斗准备和预设*/publicvoidStartBattle(ProtocolStrproto)/*解析协议*/stringprotoName=proto.GetString(0);intcount=proto.GetInt(1);/玩家总数/清理场景ClearBattle();/实例化每一个玩家

40、for(inti=0;icount;i+)stringid=proto.GetString(4*i+2);stringheroName=proto.GetString(4*i+3);intteam=proto.GetInt(4*i+4);/*出生点ID*/intswopID=proto.GetInt(4*i+5);/实例化角色GenerateBattleHero(id,heroName,team,swopID);,6,实现战场管理功能,3.添加清理战场方法,每次开启新战斗之前需要清理战场,包括清空玩家列表,恢复主摄像机的跟随状态,销毁所有角色和辅助物体(如准心)。添加ClearBattle方法

41、,代码如下。,publicvoidClearBattle()/清除玩家列表list.Clear();/恢复主摄像机父级Camera.main.transform.SetParent(transform);/*销毁所有的角色*/GameObjectheros=GameObject.FindGameObjectsWithTag(Archer);for(inti=0;iheros.Length;i+)Destroy(herosi);/*销毁所有的辅助物体*/foreach(GameObjectginGameObject.FindGameObjectsWithTag(Helper)GameObject

42、.Destroy(g);,6,实现战场管理功能,4.创建角色名称,由于是多人对战,为了更好地识别队友和敌人,可以在角色的头上增加一个3D text模型,并且让模型始终面向主摄像机。在Archer中添加子物体3D Text,重命名为ID,Text字体大小设置为0.3,Position设为(0,1.32,0),6,实现战场管理功能,4.创建角色名称,为了让名称一直面向玩家,需要给ID添加一个脚本FaceToCamera.cs,代码如下。,usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publiccl

43、assFaceToCamera:MonoBehaviourvoidUpdate()transform.rotation=Camera.current.transform.rotation;,6,实现战场管理功能,5.创建出生点,游戏设定有两组队伍,每队两人。地图上需要预先设置好玩家的出生点,在场景中新建空游戏对象Spawn,如图6-6-2所示。,具体位置玩家可以自己设置,注意出生点不可以放到地形的下面,不然角色出生的时候会掉出地图。,6,实现战场管理功能,6.实例化玩家,GenerateBattleHero主要实现以下几点:实例化角色模型,并将模型放到对应出生点的位置。为角色添加控制组件,为主

44、角添加PlayerCtrl,为其他角色添加NetCtrl。为主角设置相机跟随。为其他角色设置刚体。针对不同队伍,设置材质和ID的颜色。添加GenerateBattleHero方法,代码如下。,/*实例化战场角色*/voidGenerateBattleHero(stringid,stringheroName,intteam,intswopID)/*获取出生点*/Transformsp=GameObject.Find(Spawn).transform;TransformswopTrans;if(team!=1,6,实现战场管理功能,6.实例化玩家,if(swopID5)Debug.LogError

45、(swopID的格式不正确);return;/查找出生点对象swopTrans=sp.GetChild(team-1).GetChild(swopID-1);if(swopTrans=null)Debug.LogError(GenerateBattleHero出生点错误!);return;if(archerPre=null)Debug.LogError(GenerateBattleHero找不到预制体!);return;,6,实现战场管理功能,6.实例化玩家,/*实例化角色*/实例化模型GameObjectheroObj=(GameObject)Instantiate(archerPre);/

46、名称heroObj.name=id;/*位置*/heroObj.transform.localPosition=Vector3.zero;heroObj.transform.position=swopTrans.position;heroObj.transform.rotation=swopTrans.rotation;/*添加组件*/如果这个是玩家自身if(id=GameMgr.instance.id)/添加玩家控制器PlayerCtrlpc=heroObj.AddComponent();pc.aimPoint=Resources.Load(Prefabs/AimMark,typeof(Ga

47、meObject)asGameObject;pc.arrowPrefab=Resources.Load(Prefabs/Arrow,typeof(GameObject)asGameObject;,6,实现战场管理功能,6.实例化玩家,/附着主摄像机Camera.main.GetComponent().SetTarget(heroObj.transform);else/添加网络控制器NetCtrlnc=heroObj.AddComponent();nc.arrowPrefab=Resources.Load(Prefabs/Arrow,typeof(GameObject)asGameObject;

48、/*设置刚体*/Rigidbodyrrb=heroObj.GetComponent();rrb.useGravity=false;rrb.isKinematic=true;/*根据队伍处理材质*/如果是队伍1if(team=1),6,实现战场管理功能,6.实例化玩家,Rendererrs=heroObj.GetComponentsInChildren();/设置ID之外模型的材质foreach(Rendererrinrs)if(r.name!=ID)r.material=mat1;/*设置ID的颜色*/TextMeshtm=heroObj.transform.Find(ID).GetCompo

49、nent();tm.color=Color.red;tm.text=id;elseRendererrs=heroObj.GetComponentsInChildren();/设置ID之外模型的材质foreach(Rendererrinrs)if(r.name!=ID)r.material=mat2;,6,实现战场管理功能,6.实例化玩家,/*设置ID的颜色*/TextMeshtm=heroObj.transform.Find(ID).GetComponent();tm.color=Color.blue;tm.text=id;/列表处理BattleArcherba=newBattleArcher

50、();ba.archer=heroObj.GetComponent();ba.team=team;list.Add(id,ba);,6,实现战场管理功能,6.实例化玩家,usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassNetCtrl:MonoBehaviour,NerCtrl是网络同步控制脚本,被添加在非玩家控制的其他角色身上。脚本具体的内容会在项目7中实现,本任务中只创建NerCtrl脚本,代码如下。,6,实现战场管理功能,7.添加相机动态跟随脚本,usingSystem.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号