Unity引擎2D游戏开发,野猪基本的移动逻辑和动画
一、类的继承
在Scripts下创建Enemy
文件夹,里面再创建两个C#文件
将Boar文件内的代码修改为以下代码,:后的是Enemy,即继承了Enemy类
public class Boar : Enemy
{
}
在Enemy内,编写基本属性
public class Enemy : MonoBehaviour
{
[Header("基本参数")]
// 基本移动速度
public float normalSpeed;
// 追击速度
public float chaseSpeed;
}
这样在Boar内,就能看到Enemy内的基本属性
二、野猪移动
野猪自动行走,撞墙则朝反方向移动
获取朝向
在Enemy中,新建一个全局变量faceDirect
// 朝向
public Vector3 faceDirect;
观察野猪的Transform中的Scale
,能够看到X轴当前是1,野猪面向左侧。但是目前需要定为X轴为1时面向右侧
因此,需要faceDirect中的值,将Scale中的X修改为负数,并实时获取野猪的朝向。则在Enemy中新建一个update()
方法,并在内部实时获取朝向
private void Update()
{
// 实时方向
faceDirect = new Vector3(-transform.localScale.x, 0, 0);
}
移动的实现
然后新建Move()
方法,内部实现移动功能
public void Move()
{
rb.velocity = new Vector2(currentSpeed * faceDirect.x * Time.deltaTime, rb.velocity.y);
}
创建野猪的待机、步行、跑动的动画
Animation创建过程略
Animator
中,创建两个布尔变量,通过布尔变量对敌人的走路、跑步进行控制
在窗口中,将三个状态进行互相连线
只有boarRun→boarWalk
的连线为run=false,walk=true
实现野猪移动动画
通过重写(Override)父类Move()方法实现
Enemy的Move()方法加上virtual关键字
public virtual void Move()
{
rb.velocity = new Vector2(currentSpeed * faceDirect.x * Time.deltaTime, rb.velocity.y);
}
Boar子类进行重写
public override void Move()
{
base.Move();
}
base.Move()意为,保留父类方法内的代码
Enemy中,rb和animator变量将访问修饰符改为protected
protected Rigidbody2D rb;
protected Animator animator;
然后在Boar子类Move()内部写入以下代码
animator.SetBool("walk", true);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?