【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

这篇具有很好参考价值的文章主要介绍了【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前两天考完蓝桥杯稍微休息了一下,昨天做了一个动画控制,但是想到写出来可能会字很多,我就搁置到今天来写了,unity learn是一个官方教程平台,里面有unity assert store的配套教程,全是文档,比看视频高效太多了,想学习unity的可以去这里学习

 文章来源地址https://www.toymoban.com/news/detail-411856.html

网址

unity learn:Unity3d 教程 | Unity 中文课堂 (u3d.cn)

unity assert store:Unity 资源商店 - 优质3D 2D游戏制作资源平台

人物的移动已经做过了,大概就是修改transform组件的position属性,即坐标,enemy

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 我们场景中现有一个敌人对象

现在我们给它添加自由移动的脚本

然后它就会到处乱跑了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyEnemyController : MonoBehaviour
{
    public float Speed = 0.1f;
    public bool vertical;//是否垂直方向
    public float changeTime = 3.0f;//剩余改变时间
    Rigidbody2D Rd;
    float timer;
    int direction = 1;
    private float _timer = 0f;
    // Start is called before the first frame update
    void Start()
    {
        Rd = GetComponent<Rigidbody2D>();//获取刚体组件
        timer = changeTime;//改变方向的剩余时间
    }

    // Update is called once per frame
    private void Update()
    {
        timer -= Time.deltaTime;//deltaTime为Updata每一帧的时间
        if(timer < 0)
        {
            direction = -direction;//方向取反方向
            timer = changeTime;//再次开始计时
        }
        
    }
    void FixedUpdate()
    {
        float dt = Time.fixedDeltaTime;//跟上面的deltaTime同理
        _timer -= dt;//
        if (_timer < 0)
        {
            _timer = Random.Range(0.3f, 2.0f);
            vertical = !vertical;//垂直与水平相互换
        }
        Vector2 position = Rd.position;
        if (vertical)
        {
            position.y = position.y + Time.deltaTime * Speed * direction;//垂直修改y
        }
        else
        {
            position.x = position.x + Time.deltaTime * Speed * direction;//水平修改x
        }
        Rd.MovePosition(position);//MovePosition:导入一个vector向量来修改当前position位置
    }
}

Ruby

然后就是动画部分,不得不说,这一部分东西有点多。

首先,我们要把四个机器人移动的动画做出来,使用的是unity window窗口的animation工具

路径是 window->Animation->Animation

然后我们选中我们的enemy预制件

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 这个窗口会出现create按钮

点击create然后保存,建议建一个单独的文件夹

然后按住shift选中动画中需要插入的图片(这里的是assert提供的已经画好了的,所以直接用就行了)

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 然后拖到Add Property按钮这里,unity会自动为你排列好动画

点击预览可查看,注意这里Samples要调低一点,没有Samples的要在右边的三个点这里点击 show Samples

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

然后上走下走如法炮制即可,右走可以通过左走镜像得到

方法是点击Add Property按钮展开点击 Flip X,反转X轴

 【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 动画制作好后我们要制作动作树,这个机器人的比较简单,只要一个树就行了,涉及到主角的时候会有一堆动作的衔接,还挺多的

给你们个图自己体会一下

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 机器人的就没这么麻烦

我们一开始会看到四个动作

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 全部删掉

然后右键,Create State->from new Blend Tree

建好以后,我们点击Inspector的Motion下面的加号

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 把做好的动作拖入这里

再对角色进行控制,就是检测到坐标的变化,然后播放相应的动画,向X轴左移动就x-1,其他以此类推即可

同时我们Parameter栏这里我们要确定好两个参数名,可以用MoveX和MoveY

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 点击加号添加,然后右边的Parameter调用就行

东西都准备好了

我们为enemy对象来添加Animator 组件然后再写代码控制动画播放即可

在此之前我们要在文件夹建立一个Animation controller文件,并命名为Robot

再添加到enemy对象中的Animator组件中

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 再之后就是代码环节了

代码环节就是通过Animator.SetFloat方法来改变刚才Parmeters中的两个属性来改变动画的播放

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

核心就这么几行代码
private Animator animator;//定义Animator对象
animator.SetFloat("MoveX", 0);//上两行垂直移动,下两行水平移动,原理是修改参数来控制动画
animator.SetFloat("MoveY", direction);
animator.SetFloat("MoveX",direction );
animator.SetFloat("MoveY",0 );
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyEnemyController : MonoBehaviour
{
    public float Speed = 0.1f;
    public bool vertical;
    public float changeTime = 3.0f;
    Rigidbody2D Rd;
    float timer;
    int direction = 1;
    private float _timer = 0f;
    private Animator animator;
    // Start is called before the first frame update
    void Start()
    {
        Rd = GetComponent<Rigidbody2D>();
        timer = changeTime;
        animator = this.GetComponent<Animator>();
    }

    // Update is called once per frame
    private void Update()
    {
        timer -= Time.deltaTime;
        if(timer < 0)
        {
            direction = -direction;
            timer = changeTime;
        }
        
    }
    void FixedUpdate()
    {
        float dt = Time.fixedDeltaTime;
        _timer -= dt;
        if (_timer < 0)
        {
            _timer = Random.Range(0.3f, 2.0f);
            vertical = !vertical;
        }
        Vector2 position = Rd.position;
        if (vertical)
        {
            position.y = position.y + Time.deltaTime * Speed * direction;
            animator.SetFloat("MoveX", 0);
            animator.SetFloat("MoveY", direction);
        }
        else
        {
            position.x = position.x + Time.deltaTime * Speed * direction;
            animator.SetFloat("MoveX",direction );
            animator.SetFloat("MoveY",0 );
        }
        Rd.MovePosition(position);//MovePosition:导入一个vector向量来修改当前position位置
    }
    void OnCollisionEnter2D(Collision2D other)
    {
        MyRubyController player = other.gameObject.GetComponent<MyRubyController>();
        if (player != null)
        {
            player.ChangeHealth(-1);
        }
    }
}

敌人的就这么多了,主角的比较复杂,有左待机右待机等一系列动作,再然后就是左受击右受击,左发射右发射等等,方向也是跟用户输入挂钩,工作量有点大不过跟敌人大体差不多,这里就不一一赘述了

最后成果如下

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

 

到了这里,关于【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity随机创造敌人

    先说思路,创建一个大的空物体,然后再创建几个子空物体,子空物体就是敌人的出生点,敌人随机在这些点之上创建。 有了思路,就开始行动 然后创建一个脚本挂在大的空物体上,然后脚本如下

    2024年02月12日
    浏览(39)
  • 在 Unity 中引入第二个敌人运动

    这里的练习演示了敌人额外移动的实现,该移动从屏幕左端角以倾斜角度开始,在到达屏幕近一半时,倾斜到另一个角度以退出窗口。 在进一步讨论之前,请确保敌人和生成管理器(spawn manager)对象处于良好状态,因为需要它们在此处添加此功能。 这是高级伪代码。 首先在检

    2024年01月22日
    浏览(67)
  • Unity中敌人简单逻辑的实现(来回走动,攻击)2D

    unity自带一套自动巡航系统,但是目前应该先了解最基本的使用代码控制敌人实现逻辑(1来回走动,2发现玩家时追着玩家,3进入敌人攻击范围时进行攻击),一般来说这是最基本的敌人的功能 分析完敌人所具备的能力后,就将敌人的能力进行拆解,分别进行实现 一 来回走

    2024年02月12日
    浏览(44)
  • Unity Dotween插件的运动曲线(Ease)介绍Ease选项Ease效果示例以及C#修改动画曲线功能

    我们在制作动画时经常使用这个Dotween插件,在移动、旋转、透明度等等参数的控制都可以使用该插件,而且在这个插件上的控制动画可以设置曲线,内置的曲线有这些: 以InOutSine的曲线进行往右移动: 效果是这样的: 能看出开始是从0提速,最后是慢慢减速至0的效果。 4个

    2024年02月01日
    浏览(80)
  • 【unity造轮子】2d使用A*Pathfinding插件实现敌人AI,并自动躲避障碍物

    最终效果 插件下载链接: https://download.csdn.net/download/qq_36303853/87762376 可以前往官网下载和查看开发文档 https://arongranberg.com/astar/download 导入AI插件 新建空物体,添加PathFinder组件,用在地图导航 渲染导航路径,绘制出来的蓝色部分则为可行走区域,非蓝色区域是我配置的碰撞

    2024年02月12日
    浏览(52)
  • 【unity小技巧】使用贝塞尔曲线实现导弹随机攻击敌人,也可以用于平滑拾取物品

    参考原视频链接: 【视频】:https://www.bilibili.com/video/BV1aU4y1v7yM/ 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入

    2024年02月13日
    浏览(38)
  • Unity核心7——2D动画

    ​ 我们最常见的序列帧动画就是我们看的日本动画片,以固定时间间隔按序列切换图片,就是序列帧动画的本质 ​ 当固定时间间隔足够短时,我们肉眼就会认为图片是连续动态的,进而形成动画(会动的画面) ​ 它的本质和游戏的帧率概念有点类似,原理就是在一个循环

    2024年02月11日
    浏览(43)
  • Unity动画系统学习笔记(二)根运动、动画事件与状态机行为

    在学习根运动前需要了解两个名词: 身体变换 :身体变换是角色的质心。它用于 Mecanim 的重定向引擎,并提供最稳定的移位模型。身体方向是相对于 Avatar T 形姿势的下身和上身方向的平均值。身体变换和方向存储在动画剪辑中(使用 Avatar 中设置的肌肉定义)。它们是动画

    2023年04月11日
    浏览(47)
  • 【Unity3D】2D动画

    1 图片处理         本文完整资源见→Unity3D 人物行走 2D 动画。         通过 PS 软件将以下 gif 文件中的黑色背景删除,并将其中的 18 个图层分别保存为 png 格式图片。 2 游戏对象         1)游戏对象层级结构          2)Transform组件参数 Name Type Position Rotation S

    2023年04月13日
    浏览(58)
  • Unity学习笔记---2D光照渲染、美术、动画

    Unity 提供三个渲染管线 :一个内置渲染管线和两个可编程渲染管线 (SRP)。两个 SRP 为通用渲染管线 (URP) 和高清渲染管线 (HDRP)。URP 适用于所有平台,而 HDRP 则 旨在用于针对高端 PC 和主机的游戏。 注意 :如果在 Unity 2021 或更高版本中启动一个新项目,则称为 2D (U

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包