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

news2025/6/21 15:26:09

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

 

网址

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

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

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

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

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

然后它就会到处乱跑了

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预制件

 

 这个窗口会出现create按钮

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

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

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

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

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

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

 

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

给你们个图自己体会一下

 机器人的就没这么麻烦

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

 全部删掉

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

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

 把做好的动作拖入这里

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

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

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

东西都准备好了

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

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

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

 

 再之后就是代码环节了

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

核心就这么几行代码
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);
        }
    }
}

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

最后成果如下

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

#java mavn安装图像验证码jar失败kaptcha-2.3.2.jar#

场景&#xff1a;在登录的时候添添加图形验证码功能&#xff0c;使用 com.google.code.kaptcha开发图像验证码&#xff0c;。通过pom引入依赖一直红色提示&#xff0c;找打不到依赖,如图所示 原因&#xff1a;kaptcha-2.3.jar 没有放在mavan的中央仓库 解决方案&#xff0c;需…

Hive笔记

目录 第3章 Hive数据类型 第 4 章 DDL 数据定义 第5章DML数据操作 第6章 查询&#xff08;语法与MySQL一样&#xff09; 第 7 章 分区表和分桶表 第 8 章 函数 第3章 Hive数据类型 如array<map<string,int>> 集合数据类型工作中不是很常用&#xff0c;最常用…

Web 攻防之业务安全:Response状态值修改测试(修改验证码返回值 绕过限制.)

Web 攻防之业务安全&#xff1a;Response状态值修改测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务…

2.17、多生产者-多消费者进程

桌子上有一只盘子&#xff0c;每次只能向其中放入一个水果。爸爸专向盘子中放苹果&#xff0c;妈妈专向盘子中放橘子&#xff0c;儿子专等着吃盘子中的橘子&#xff0c;女儿专等着吃盘子中的苹果。只有盘子空时&#xff0c;爸爸或妈妈才可向盘子中放一个水果。仅当盘子中有自己…

Linux系统应用编程(四)Linux多线程

本篇文章主要内容&#xff1a;Linux系统应用编程&#xff08;四&#xff09;Linux多线程一、线程和进程的区别二、Linux多线程1.线程的使用 - 创建、退出、等待2.线程的同步 - 互斥量&#xff08;1&#xff09;互斥量的理解&#xff08;略&#xff09;&#xff08;2&#xff09…

你真的会自动化测试?自动化测试技术选型抉择

自动化测试框架 在学习自动化测试或者实践自动化测试时&#xff0c;我们一定会对一个名词不陌生&#xff0c;那就是“自动化测试框架”&#xff0c;而有些人也将Selenium、Appium这样的工具也称之为“自动化测试框架”&#xff0c;那么到底自动化测试框架如何理解呢&#xff1…

多种文字翻译软件-翻译常用软件

整篇文档翻译软件 整篇文档翻译软件是一种实现全文翻译的自动翻译工具&#xff0c;它能够快速、准确地将整篇文档的内容翻译成目标语言。与单词、句子翻译不同&#xff0c;整篇文档翻译软件不仅需要具备准确的语言识别和翻译技术&#xff0c;还需要考虑上下文语境和文档格式等多…

【Linux】一文带你探究网络世界的基石

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;计算机网络…

JVM专题

JVM类加载 Java里有如下几种类加载器&#xff1a; 引导类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的核心类库&#xff0c;比如 rt.jar、charsets.jar等 扩展类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包应用程序…

一篇文章让你搞懂TypeScript中的??和?:和?.和!.是什么意思

TypeScript中的??和?:和?.和!.是什么意思&#xff1f;知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货???:?.!.知识回调&#xff08;不懂就看这儿&#xff01;&#xff09; 知识专栏专栏链接TypeScript知识专栏https://blog.csdn.net/xsl_…

私有化部署GPT,告别网络困扰

最近的GPT是热火朝天&#xff0c;基本人手一个。工具用的好&#xff0c;工作5分钟&#xff0c;划水一整天。 不过最近Chat的访问越来越限制了&#xff0c;访问官网都有网络的问题&#xff0c;今天给大家介绍一个方案&#xff0c;私人独享属于自己的chat&#xff0c;不再担心想…

sdx12使能bluetooth

最后的效果&#xff1a; 1.驱动使能 apps_proc/kernel/msm-5.4/arch/arm/configs/vendor/sdxnightjar.config #add bt driver CONFIG_BTy CONFIG_MSM_BT_POWERy使用的芯片是sdx12 QCA6174A-1 管脚配置如下&#xff08;如果管脚不同&#xff0c;需要修改对应的dts&#xff09…

(十)排序算法-冒泡排序

1 排序算法 1.1 介绍 排序也称为排序算法&#xff08;Sort Algorithm&#xff09;&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 1.2 排序的分类 &#xff08;1&#xff09;内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序。 &…

C/C++程序设计——const关键字

1.修饰变量 1.1 作用 功能&#xff1a;不能直接被修改 const修饰变量&#xff0c;就相当于是定义了一个常量。该变量不能直接被修改&#xff0c;但是可以通过指针修改。 作用&#xff1a;便于维护、提前发现可能错误的修改 比如程序中大量使用了一个数字10&#xff0c;且不会…

GaussDB工作级开发者认证—第一章GaussDB数据库介绍

一. GaussDB概述 GaussDB是华为基于openGauss自研生态推出的企业级分布式关系型数据库。具备企业级复杂事物混合负载能力&#xff0c;同时支持分布式事务强一致性&#xff0c;同城跨AZ部署&#xff0c;数据0丢失&#xff0c;支持1000的计算节点扩展能力&#xff0c;4PB海量存储…

springcloud2.1.0整合seata1.5.2+nacos2.10(附源码)

springcloud2.1.0整合seata1.5.2nacos2.10&#xff08;附源码&#xff09; 1.创建springboot2.2.2springcloud2.1.0的maven父子工程如下&#xff0c;不过多描述&#xff1a; 搭建过程中也出现很多问题&#xff0c;主要包括&#xff1a; 1.seataServer.properties配置文件的组…

安全配置管理 (SCM):建立安全的基础

通过确保在端点中建立和维护理想的安全配置&#xff0c;让自己在安全的基础上做好准备&#xff0c;这样公司就不会因单个漏洞而分崩离析。安全配置管理涉及持续检测端点中各个组件之间的配置偏差和错误配置&#xff0c;并使它们重新对齐。 在本文中&#xff0c;将了解 Vulnera…

<Linux开发> linux应用开发-之-进程通信之管道例程

一、简介 所谓管道&#xff0c;是指用于连接一个读进程和一个写进程&#xff0c;以实现它们之间通信的共享文件&#xff0c;又称 pipe 文件。 向管道&#xff08;共享文件&#xff09;提供输入的发送进程&#xff08;即写进程&#xff09;&#xff0c;以字符流形式将大量的数…

Windows串口出厂测试工具与使用说明

WCHUsbSerTest是一款用于WCH USB转串口系列产品出厂测试的工具软件&#xff0c;方便用户对产品进行批量化功能测试。该软件支持以下特性&#xff1a; 支持设备热插拔检测&#xff0c;插入自动测试。支持两种测试模式&#xff1a;1个设备自测、2个设备互相连接测试。支持多种串…

VMware Horizon 8 2303 - 虚拟桌面基础架构 (VDI) 和应用软件

请访问原文链接&#xff1a;https://sysin.org/blog/vmware-horizon-8/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Version2303DocumentationRelease NotesRelease Date2023-03-30 虚拟桌面基础架构 (VDI) 和应用软件 VMw…