游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   LoserY

人物与NPC交互的设计(代码是unity C#)

个人分类: 设计 | 2018-9-27 11:48
对于写NPC交互设计时,虽然写着挺简单,但每次写交互,都是重新开始写,所以想着代码能不能复用,不用的游戏中也可以用以前的代码,提高自己的效率,所以有了一些想法。

1: NPC的行为
1:对于NPC,玩家的每次靠近(Close), 激活(Active), 交互(Interaction),退出交互,也就是退出激活(UnActive), 离开(Exit)
大多数NPC的行为都是这样,如,靠近后,NPC播放动画等等
所以可以对这几个行为创建一个借口

public interface INPC {
void PlayerClose();
void PlayerExit();
void Active();
void Interaction();
void unActive();
}
2:对于每一类NPC,有不同的类型,如发布任务的NPC,提供线索如交谈的NPC
所以在INPC里可以添加一个获得的类型,给玩家提供获得该NPC的类型的方法,其中NPCType是创建的一个枚举类
public interface INPC {
void PlayerClose();
void PlayerExit();
void Active();
void Interaction();
void unActive();
NPCType getNPCType();
}

2:玩家的行为
玩家的行为和npc相同,但是是由玩家去触发NPC的行为,同时也要加上检测是否靠近NPC
可以对玩家行为进行抽象

public abstract class IPlayer : MonoBehaviour{
public INPC nowInteractiveNPC;
public virtual void Updata(){
checkNPC();
}
protected virtual void Close(){
nowInteractiveNPC.GetComponent<INPC>().PlayerClose();
}
protected virtual void Active(){
nowInteractiveNPC.GetComponent<INPC>().Active();
}
protected virtual void Exit(){
nowInteractiveNPC.GetComponent<INPC>().PlayerExit();
}
protected virtual void Interaction(){
nowInteractiveNPC.GetComponent<INPC>().Interaction();
}
protected virtual void unActive(){
nowInteractiveNPC.GetComponent<INPC>().unActive();
}

protect virtual void CheckNPC(){
// 使用射线检测,碰撞体检测都可以
}
}
0 0

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号
返回顶部