首页 > 其他分享 >Unity引擎2D游戏开发,野猪基本的移动逻辑和动画

Unity引擎2D游戏开发,野猪基本的移动逻辑和动画

时间:2023-12-25 14:34:34浏览次数:32  
标签:动画 野猪 Enemy Move 2D Unity rb faceDirect public

一、类的继承

在Scripts下创建Enemy文件夹,里面再创建两个C#文件
image

将Boar文件内的代码修改为以下代码,:后的是Enemy,即继承了Enemy类

public class Boar : Enemy
{

}

在Enemy内,编写基本属性

public class Enemy : MonoBehaviour
{
    [Header("基本参数")]
    // 基本移动速度
    public float normalSpeed;
    // 追击速度
    public float chaseSpeed;
}

这样在Boar内,就能看到Enemy内的基本属性
image

二、野猪移动

野猪自动行走,撞墙则朝反方向移动

获取朝向

在Enemy中,新建一个全局变量faceDirect

// 朝向
public Vector3 faceDirect;

观察野猪的Transform中的Scale,能够看到X轴当前是1,野猪面向左侧。但是目前需要定为X轴为1时面向右侧
image

因此,需要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中,创建两个布尔变量,通过布尔变量对敌人的走路、跑步进行控制
image

在窗口中,将三个状态进行互相连线
image

只有boarRun→boarWalk的连线为run=false,walk=true
image

实现野猪移动动画

通过重写(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);

标签:动画,野猪,Enemy,Move,2D,Unity,rb,faceDirect,public
From: https://www.cnblogs.com/xinlindeyu/p/17926023.html

相关文章

  • [CSS]动画,平移到某个位置,停住
    animation-fill-mode:forwards; <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><......
  • Unity3D UI帧动画详解
    nity3D是一款非常强大的游戏开发引擎,它提供了丰富的功能和工具,使开发者能够轻松创建各种类型的游戏。其中,UI(UserInterface)是游戏开发中非常重要的一部分,它用于展示游戏中的各种信息和交互元素。在Unity3D中,我们可以使用UI帧动画来创建各种炫酷的UI效果。本文将详细介绍Unity3D中U......
  • Unity3D 中正确调用CUDA程序详解
    Unity3D是一款强大的游戏开发引擎,可以实现各种各样的游戏效果。然而,在某些情况下,使用CPU来处理游戏中的复杂计算任务可能会导致性能瓶颈。为了解决这个问题,我们可以利用CUDA来使用GPU进行并行计算,从而提高游戏的性能。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的......
  • Unity3D UDP传输大文件怎么提高速度详解
    Unity3D是一款强大的游戏开发引擎,但是在处理大文件传输时,往往会遇到速度较慢的问题。本文将详细介绍如何通过使用UDP协议来提高大文件传输的速度,并给出相应的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的......
  • Unity获取用户输入
    Unity获取用户输入基本概念​unity​中使用Input.GetAxis()​或Input.GetAxisRaw()​接口来获得用户输入,这两个接口的返回值取值范围为[-1,1],具有以下特性:该值的含义取决于输入控制的类型,例如,对于游戏杆的水平轴,值为1表示游戏杆向右推到底,值为-1表示游戏杆向左推到底;值为......
  • 2d物理引擎学习 - 角运动
    角运动(AngularMotion)或叫转动(RotationalMotion)相关公式1) 瞬时角速度(angularvelocity):ω =Δ弧度/Δt,单位:弧度/秒,方向:逆时针旋转,沿转轴向上;顺时针旋转,沿转轴向下; 2)角加速度:a=(ω1-ω0)/t,单位:弧度/秒2,方向:同角速度方向 3) 线速度:即计算单位时间内走过......
  • Unity 刷新文本
    privatevoidrefreshContentSizeFitters(){//获取contentParent下的所有ContentSizeFitter组件ContentSizeFitter[]contentSizeFitters=gameObject.GetComponentsInChildren<ContentSizeFitter>();for(inti=0;i<contentSize......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发
    https://www.cnblogs.com/wuhuacong/tag/WPF/ 在我们的SqlSugar的开发框架中,整合了Winform端、Vue3+ElementPlus的前端、以及基于UniApp+Vue+ThorUI的移动前端几个前端处理,基本上覆盖了我们日常的应用模式了,本篇随笔进一步介绍前端应用的领域,研究集成WPF的应用端,循序渐进介绍基......
  • [WPF] 使用 MVVM Toolkit 构建 MVVM 程序(CommunityToolkit.Mvvm)
    1.什么是MVVMToolkit模型-视图-视图模型(MVVM)是用于解耦UI代码和非UI代码的UI体系结构设计模式。借助MVVM,可以在XAML中以声明方式定义UI,并使用数据绑定标记将UI链接到包含数据和命令的其他层。微软虽然提出了MVVM,但又没有提供一个官方的MVVM库(多年前有过......
  • 最大工作频率为32MHz,R7F100GPL2DFA、R7F100GPL3CFA低功耗MCU,10M08SAU169C8GGB MAX® 1
    一、RL78/G23 新一代RL78微控制器,最大工作频率为32MHz,外围功能得到进一步扩展,低功耗性能也有所提升。RL78/G23微控制器是RL78系列的新一代产品,CPU工作时的功耗为41μA/MHz,STOP(保持4KBSRAM)时的功耗为210nA,其低功耗在业内首屈一指。此外,由于采用SNOOZE模式定序器,它还能大幅度减少......