转的别人写的状态机 还没看 预留下

//被敌人发现的距离

var awareDistance:float=15.0f;

//敌人受惊吓后引发动作的距离

var scareDistance:float=10.0f;

//玩家角色

var player:Transform;

//奔跑速度

var runSpeed:float=4.0f;

//状态机枚举 

enum AIStatus { idel=0,scared=1};

//状态机,初始化为闲置状态

private var status=AIStatus.idel;

//角色控制器

var Controller:CharacterController;

//移动方向

private var moveDistance=Vector3.zero;

//初始化函数,在Start()前被调用,整个游戏循环中只调用一次,相当于构造函数

function Awake()

{

Controller=GetComponent(CharacterController);

}
//Loop函数

function Update()

{ //检查状态机

CheckStatus();

//选择行为

switch(status)

{

case AIStatus.idel:

//闲置时动作

Idel();

break;

case AIStatus.scared:

//跑动

Run();

}

}
//检查状态机函数

function CheckStatus(){

//求两个点之间的距离,magnitude是sqrt((x-x1)^2+(y-y1)^2+(z-z1)^2)的值

var dist=(player.position-transform.position).magnitude;

//如果两个物体之间的距离小于<敌人被惊吓的距离>,那么触动受惊状态机

if(dist < scareDistance)

{

status=AIStatus.scared;

}

//如果两个物体之间的距离大于<被敌人发现的距离>,那么触动闲置状态机

else if(dist > awareDistance)

{

status=AIStatus.idel;

}

}

//敌人跑动函数

function Run(){ }

//敌人闲置函数

function Idel(){ }

你可能感兴趣的:(状态机)