EnemyAttackState
EnemyChaseState
EnemyFSMSystem
IEnemyState
EnemyAttackState
EnemyChaseState
EnemyFSMSystem
IEnemyState
如果直接销毁,会导致敌人列表出现空指针,还会导致重新再用的时候会消耗性能
死亡后不需要 导航,不需要动画,不需要AI
不是为了装B使用设计模式
using System;
using UnityEngine;
public class Strategy
{
void Start()
{
StrategyContext context = new StrategyContext();
context.startegy = new ConcreteStrategyA();
context.startegy = new ConcreteStrategyB();
context.Cal();
}
}
public class StrategyContext
{
public IStartegy startegy;
public void Cal()
{
startegy.cal();
}
}
public interface IStartegy
{
void cal();
}
public class ConcreteStrategyA:IStartegy
{
public void cal
{
Debug.Log("use strategy A");
}
}
public class ConcreteStrategyB : IStartegy
{
public void cal
{
Debug.Log("use strategy B");
}
}
将状态设置为一个枚举
用State Id区分状态。
AddTransition添加转换条件
删除转换条件
从字典里面寻找转换条件
开闭原则:对修改关闭,对扩展开放
Character
RemoteAssetFac
mAo.isDone==true后面要改成fasle的(视频里没有体现,跟老师的源码对照出来的),否则菜单界面点击开始游戏按钮后不会跳转到战斗场景。
Main
开闭原则:一个软件实体应当对扩展开发,对修改关闭。
来一杯Mocha Call飞
单一职责原则
开-闭原则
依赖倒置原则
接口倒置原则
最少知识原则(迪米特法则)
少用继承多用组合
开闭原则
对扩展开发,对修改关闭
修改功能时通过增加的方式,而不是修改原有系统
几百个数据的时候这样的话会不会导致,要添加新的保存数据是会出现耦合 应该不会
一般保存的数据:
角色的扩展属性
基本数值
经验
物品等
那么保存的时候怎么保存呢?
点击保存:
在每个数据系统下:
写一个保存实例数据的方法:
里氏替换:所有父类都能替换为子类不会对其产生影响。
单一职责原则:一个对象只包含单一的职责,对于一个类,仅有一个引起
可能大部分游戏公司都是脚本与组件分离进行开发的。