NPC配置总览
NPC的配置文件在project/config/npc/目录下,以json格式存储,每个NPC一个文件,文件名为NPC的姓名。
NPC的初始化有两种方式,一种是通过NPC配置文件,一种是通过UDP数据包。
支持对NPC的人设、记忆、情绪、状态进行配置。
NPC配置方法
配置文件初始化
绝大多数NPC都应当以 “NPC_NAME.json”的方式放在project/config/npc/目录下,然后在Scenario配置文件中引用。
在Scenario初始化的时候,会自动读取NPC的配置文件,将NPC的初始状态加载到引擎。
如果一个NPC在多个Scenario中被初始化,只有第一次是有效的,后续的初始化会被忽略。 下面是一个例子:
# project/config/npc/村长.json
{
"name": "村长", # 角色姓名
"desc": "村长有着浓密的白色胡须,出生于1940年,喜欢抽中华烟,他白天会在瓜田工作,晚上会在广场上遛弯,如果遇到矛盾他会主持调节,太晚了的时候就会回家睡觉。村长最喜欢吃西瓜。", # 角色描述,一般包含外貌、出生日期、兴趣爱好、生活习惯等
"mood": "开心", # 当前的角色情绪
"npc_state": { # 角色当前状态
"position": "李大爷家", # 角色所在位置
"observation": { # 角色观测到的信息
"people": [ # 角色观测到的人
"王大妈",
"村长",
"隐形李飞飞"
],
"items": [ # 角色观测到的物体
"椅子#1",
"椅子#2",
"椅子#3[李大爷占用]",
"床[包括:被子、枕头、床单、床垫、私房钱]"
],
"locations": [ # 角色观测到的地点
"李大爷家大门",
"李大爷家后门",
"李大爷家院子"
]
},
"backpack": [ # 角色随身携带的物体
"中华烟[剩余4根]",
"1000元",
"吃了一半的西瓜"
]
},
"action_space": ["mov", "chat"], # 人物的动作空间(在实际执行的时候,场景的all_actions和人物action_space取交集)
"memory": [ # 角色的记忆,一般按照时间顺序列举, 引擎运行时可以参考,同时会更新一部分
"11年前由于对村子做出巨大贡献被村民们推举为新一任村长。",
"9年前调节某村民婚礼期间发生的纠纷。",
"7年前管理的村子被评为十佳美丽乡村。"
], # [可以留空 但是必须存在该字段]
"purpose": "村长想去广场散步,因为他喜欢晚上在广场上遛弯,享受清新的空气和宁静的夜晚。", # 角色当前的意图,一般指短期意图[仅作调试用 可以不包含这个字段 其不会生效 NPC在引擎关闭的时候会自动生成到这里 供你查看]
"action": { # 角色当前执行的动作[仅调试用 可以不包含这个字段]
"action": "mov",
"object": "广场",
"parameters": "",
"npc_name": "村长",
"name": "action"
}
}
UDP方式初始化
UDP方式是对NPC配置文件的补充,可以在游戏运行过程中动态的添加新的NPC。(存在则覆盖)
Engine关闭后,新NPC的状态会被保存到project/config/npc/目录下的NPC配置文件中。
init_packet = {
"func": "init",
# 必填字段,代表在什么场景初始化
"scene_name": "雁栖村",
"language": "C",
# 下面是🉑️选
"npc": [
{
"name": "渔夫阿强",
"desc": "渔夫阿强是一个老练的渔民,擅长捕鱼和航海。他有一头浓密的白发和一双狡猾的眼睛。阿强经验丰富,对海洋和天气变化有着敏锐的观察力。",
"mood": "满足",
"npc_state": {
"position": "河边钓鱼点",
"observation": {
"people": [],
"items": ["船舱", "渔网", "渔具", "航海地图", "渔获"],
"locations": ["船舱内部", "甲板"]
},
"backpack": ["鱼饵", "渔具维修工具"]
},
"action_space": ["mov", "chat"], # 人物的动作空间(在实际执行的时候,场景的all_actions和人物action_space取交集)
"memory": [
"从小就跟随父亲学习捕鱼技巧。",
"曾多次出海捕鱼,积累丰富的经验。",
"对海洋生态保护有着浓厚的兴趣。",
"帮助其他渔民修理损坏的渔具。",
"梦想拥有一艘自己的渔船,开展独立的渔业。"
]
},
{
"name": "猎人阿明",
"desc": "猎人阿明是一位勇敢而机敏的猎人。他身材魁梧,肌肉发达,眼神犀利。阿明擅长追踪和狩猎各种野生动物,具有过人的耐力和狙击技巧。",
"mood": "专注",
"npc_state": {
"position": "猎人小屋",
"observation": {
"people": [],
"items": ["猎枪", "弓箭", "追踪装备", "野外求生工具"],
"locations": ["猎人小屋内部", "周围的森林"]
},
"backpack": ["干粮", "水壶", "急救包"]
},
"action_space": ["mov", "chat"], # 人物的动作空间(在实际执行的时候,场景的all_actions和人物action_space取交集)
"memory": [
"从小生活在山区,接受父亲的猎人训练。",
"熟悉各种野生动物的习性和行踪。",
"常常在附近的森林中追踪并捕获猎物。",
"有着长时间在野外生存的经验。",
"一日作息:清晨起床后进行锻炼和瞄准训练,白天进行狩猎和追踪,傍晚返回小屋整理装备并准备晚餐,晚上休息并回顾一天的狩猎经历。"
]
}
], # 可以留空,默认按照scene.json初始化场景NPC。非空则在之前基础上添加。
}