设置Room类
创建一枚举RoomState房间状态
{
1、等待加入(WaitingJoin)
2、等待战斗(WaitingBattle)
3、战斗状态(Battle)
4、战斗结束(End)
}
在Server要对Room进行管理
创建一个RoomController
在Common中
{
1、房间列表(ListRoom)
2、创建房间(CreateRoom)
3、加入房间(Joinroom)
}
设置Room类
创建一枚举RoomState房间状态
{
1、等待加入(WaitingJoin)
2、等待战斗(WaitingBattle)
3、战斗状态(Battle)
4、战斗结束(End)
}
在Server要对Room进行管理
创建一个RoomController
在Common中
{
1、房间列表(ListRoom)
2、创建房间(CreateRoom)
3、加入房间(Joinroom)
}
设置战绩表Result
CG数据类型
--------------------------
float
half
int
fixed
bool
simpler
sampler
profile
string
==========
float[n] {data_0, data_1 ... data_n};
struct
{
};
添加RoomListPanel预制体
创建房间
创建空物体 RoomPlanel
个人信息BattleRes
{
用户名UserName
总场数TotalCount
胜利场数WinCount
}
房间列表 RoomList
提供播放背景声音方法
PlayBgSound(string soundName){
}
提供正常按键声音方法
PlayNormSound(string soundName){
}
在AudioManager统一管理音乐
定义路径
定义AudioSunde
在OnInit()里进行创建实例{
GameObject audioSourceGo = new GameObject("AudioSource");
bgAudioSource = audioSourceGo.AddComponent<AudioSource>();
normAudioSource = audioSourceGo.AddComponent<AudioSource>();
bgAudioSource.clip = LoadSound(Sound_Bg_moderate);
PlaySound(bgAudioSource, LoadSound(Sound_Bg_moderate), true);
}
定义一个LoadSound(audioName)方法返回AudioClip 进行加载音乐{
return Resources.Load<AudioClip>(Path_Prefix + audioName);
}
定义PlaySound(AudioSource audioSource, AudioClip audioClip, bool loop = true)方法{
audioSource.clip = audioClip;
audioSource.loop = loop;
audioSource.Play();
}
合并事件流: Merge
基本格式:
Observable.观察
Timer 定时器
Subscribe. 订阅者
AddTo Api 添加到Gameobject 和mono
就可以获得到OnDestroy事件与销毁事件绑定
实现了IDisposable接口就可以使用。
那么⽤用这个销毁事件⼲干嘛呢?
答案是⽤用来 进⾏行行与 UniRx 进⾏行行销毁事件的绑定,也就是当 GameObject 或者 MonoBehaviour 被销毁
时,同样去销毁正在进⾏行行的 UniRx 任务。
这就是 AddTo API 的作⽤用。
其实⽤用起来很简单,代码如下:
Observable.Timer(TimeSpan.FromSeconds(1.0f)
.Subscribe()
.AddTo(this); // Or gameObejct
2
这样,当 this 所在的 GameObject 销毁时,这个 Timer 就会被销毁。
能做什么:
有了 AddTo,在开启 Observable.EveryUpdate 时调⽤用 当前脚本的⽅方法,则不不会造成引⽤用异常等错误,它使得 UniRx 的使⽤用更更加安全。
Observable.
.EveryUIdata()//开启事件监听
.Where(_=>Input.GetMouseBunttonDown(0));//过滤
.First() //只处理第一次
.Subscribe(_=>{Debug.Log("mo")};
Updata事件监听
7 怪物生成思路
1 生成怪物:根据随机百分比生成概率的敌人,
法线变换
--------------------------
M^T · G = I
G = (M^(-1))^T
如果M是正交矩阵
M^(-1) = M^T
(M^(-1))^T = M
正交:旋转变换
旋转和统一缩放 (M^T)^(-1) = (1/k)M
热更分为资源热更,逻辑热更。
资源服务器:搭建
热更新集成在ResKit 完成资源的加载和卸载
1 集合表达:
字典:xxx4xxx 4表示For
或使用类型后缀 todoDict
Queue Stack :推荐使用后缀方式,一般使用在框架插件工具层
2 计算限定词:
count number num index total sum average
max min record 除了num 建议都放在后边
数据类型string/char
3 bool类型
使用动词+时态
done
finished
completed
updating
enabled
使用is+名词 isEnemy
形容词 active
4 枚举
状态:
LoadBegan,
Loading,
LoadEnded
事件:
On。。。事件监听
UpData 指令 动词
结果:名词和形容词
Success,
Fail
5 untiy 特有:GameObject Transform
Buntton Image
后缀或前缀 Obj Trans btn Image
权限:外界访问大写首字母
不被外界访问_
类型:int m_nAge
string m_strName
描述:事物 名词
状态 过去式 进行时 形容词
其他 委托 On......
命名的力量:
命名入门:
命名要考虑的三点:
描述
权限
类型
命名规则
团队和个人:都要有一套自己的命名规则
命名规则的制订:
私有变量:由m或_
public 首字母大写
临时变量 首字母小写
方法:大写驼峰式
代码大全第11章。
第二个准则:
一个好几的名字:反应解决问题的名字
变量命名准则1:变量名要完