Npc制作,实用Enemy AI制作一个游戏中可用的Npc

37 篇文章 1 订阅

接续上面一篇没写完的东东。我们看下这个,我们看下动画中的2个npc一个走到立方体前停了下来进行攻击,另一个继续行走,这只是这个插件系统其中的两种模式,通过预制件的调整脚本挂载生成5种Ai模式,仙剑Demo因为是回合制战斗,所以战斗相关的两种模式我们不需要考虑,另外我们的npc需要与玩家做交互,所以需要的只有两种模式,一种是固定地点的Idle行为,就是npc站在原地不动,一种就是巡逻,但当遇到玩家化身时停在化身跟前等待化身对npc做操作,如动画我们制作一个我们希望看到的效果,记得上一篇我们做了一个会跑会跳的韩菱纱,那么我们就把韩菱纱作为玩家化身,我们把她托到hierarchy窗体中,然后改名为Player tag设置成Player,然后拖动脚本到Player上,如图我们看下控件的值都是如何设定的

我们可以看到这些参数的数值,因为这个韩菱纱我们可以不要求她动,所以navmeshagent的数值其实是没用的,我们这里把她看成是主角,我们现在做另外一个npc,我们希望的是npc走到韩菱纱的面前停下来,怎么做呢?看下面

我们导入一个慕容紫英的模型设置方法与韩菱纱的一样,可以看前面的篇章,然后一样拖到hierarchy窗体


与韩菱纱不同的就是我们选中了patrol这个脚本,而这个脚本里面设置了npc行走的路点,我们看下结果是什么样的

我们制作的最终效果就是这个,后面我们说一下

EnemyAnimator控制器,看看里面的内容



我们看下这个动画控制器使用了多个层,ik手柄,以及2个遮罩,所以想修改这个控制器加入人物独特动画 时候记得ik手柄,遮罩也要同步修改,否则可能会出现加入了新动画,但人物却没有动的情况,最后完成的结果是看着紫英在韩菱纱面前停了下来,我们今天要做的工作算是完成了。

制作沙盒冒险生存游戏的代码需要考虑游戏的功能和玩法,这里提供一些常见的游戏功能和对应的代码: 1. 玩家移动和操作 ```python # 玩家移动 def move_player(direction): if direction == 'up': player_y -= 1 elif direction == 'down': player_y += 1 elif direction == 'left': player_x -= 1 elif direction == 'right': player_x += 1 # 玩家操作 def player_action(action): if action == 'collect': collect_resource(player_x, player_y) elif action == 'build': build_structure(player_x, player_y) elif action == 'attack': attack_enemy(player_x, player_y) ``` 2. 资源采集和制作 ```python # 资源采集 def collect_resource(x, y): resource = get_resource(x, y) if resource: player_inventory.add_resource(resource) # 制作物品 def craft_item(item): for recipe in item_recipes: if recipe['item'] == item and recipe['resources'] in player_inventory: player_inventory.remove_resources(recipe['resources']) player_inventory.add_item(item) break ``` 3. 建造和拆除结构 ```python # 建造结构 def build_structure(x, y, structure_type): if player_inventory.has_resources(structure_type.resources): player_inventory.remove_resources(structure_type.resources) structures.add(Structure(x, y, structure_type)) # 拆除结构 def destroy_structure(x, y): for structure in structures: if structure.x == x and structure.y == y: player_inventory.add_resources(structure.resources) structures.remove(structure) break ``` 4. 敌人生成和AI ```python # 敌人生成 def spawn_enemy(): enemy_type = random.choice(enemy_types) x, y = get_random_location() enemies.add(Enemy(x, y, enemy_type)) # 敌人AI def enemy_ai(enemy): if player_distance(enemy) < enemy_type.attack_range: attack_player(enemy) else: move_enemy_towards_player(enemy) ``` 5. 多人游戏和网络通信 ```python # 网络通信 def send_data(data): connection.sendall(data.encode()) def receive_data(): data = connection.recv(1024).decode() return data # 多人游戏 def multiplayer_game(): while True: data = receive_data() # 处理游戏数据 send_data(game_state) ``` 以上是一些常见的游戏功能和对应的代码,你可以根据自己的需求进行修改和扩展。注意,在实际开发,还需要考虑代码的组织结构、错误处理、调试和测试等方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值