前言
本文章是我学习SIKI学院Scanvenger项目所做笔记,原视频请自行搜索,
材质等相关资源请微信搜索SIKI学院公众号,回复120获取。源码也在里面。
游戏引擎:Unity3D2020.3
之前的Prefabs内容
一、创建敌人脚本和BoxCollider
二、修改碰撞脚本

三、修改移动脚本
public class Enemy : MonoBehaviour
{
// 目标位置
private Vector2 targetPosition;
// 获取主角标签
private Transform player;
// 移动速度
public float smoothing = 3;
// 使用刚体控制运动
private Rigidbody2D rigidbody;
private void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
rigidbody = GetComponent<Rigidbody2D>();
targetPosition = transform.position;
}
private void Update()
{
rigidbody.MovePosition(Vector2.Lerp(transform.position, targetPosition, smoothing * Time.deltaTime));
}
public void Move()
{
Vector2 offset = player.position - transform.position; // 判断主角的偏移
if (offset.magnitude < 1.1f)
{
// 攻击
}
else
{
float x = 0, y = 0; // 默认移动都是0
// 判断是离Y偏移还是X偏移
if (Mathf.Abs(offset.y) > Mathf.Abs(offset.x))
{
// 按照Y轴移动
if(offset.y < 0)
{
y = -1;
}
else
{
y = 1;
}
}
else
{
// 按照X轴移动
if (offset.x > 0)
{
x = 1;
}
else
{
x = -1;
}
}
targetPosition += new Vector2(x, y);
}
}
}
四、存放所有敌人
在gameManager中找到所有的敌人

在enemy中存放所有敌人

通知GameManager玩家移动

设置玩家移动两步,敌人移动一步的规则
创建一个bool型记录玩家是否在休息

系列链接
Scanvenger游戏制作笔记(一)Unity3D状态机转换
Scanvenger游戏制作笔记(二)控制玩家操作
Scanvenger游戏制作笔记(三)Unity3D创建对墙体的攻击
Scanvenger游戏制作笔记(四)Unity3D控制角色吃食物
Scanvenger游戏制作笔记(五)控制敌人的移动
Scanvenger游戏制作笔记(六)Unity3D创建游戏UI的显示
Scanvenger游戏制作笔记(七)Unity3D控制游戏的失败
Scanvenger游戏制作笔记(八)Unity3D关卡胜利条件的判断
Scanvenger游戏制作笔记(九)Unity3D创建声音

本文介绍了如何在Unity3D中创建敌人的移动脚本,包括使用BoxCollider、碰撞检测和基于玩家位置的移动逻辑。通过敌我距离判断和方向调整,实现了敌人的智能移动。系列链接可供进一步学习。
569

被折叠的 条评论
为什么被折叠?



