Unity 麦扣 x 勇士传说 全解析 之 怪物基类与野猪(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

通过一阵子的学习,我是这么认为的,因为该教程是难度两星的教程 ,也就是适合学了一阵子基础组件以后的学习者

(什么都不会的学习者要是学这套课程会困难重重,如果你什么都不会那么需要学习一星教程)

所以该课程没有那么多manger,代码也不那么面向对象,但是从怪物类之后就开始有相关的内容了,建议熟练面向对象的知识以后再来学习后面的内容

C# & Unity 面向对象补全计划 之 继承(字段与属性)_unity继承属性-CSDN博客

C# & Unity 面向对象补全计划 之 初识继承方法与多态_unity 类的继承和多态-CSDN博客

C# & Unity 面向对象补全计划 之 接口-CSDN博客

本文实现结果如下 

 

1.怪物基类

思考

1.怪物要有速度,所以设置三种默认速度,追击速度,当前速度

2.怪物要有朝向,可以实时获取当前的朝向

3.怪物要移动,所以需要刚体组件

4.怪物要有动画,所以需要动画组件

5.怪物需要切换速度,所以要追加条件

代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Monster : MonoBehaviour
{[Header("速度")]public float normalSpeed;public float chaseSpeed;public float currentSpeed;[Header("面朝向")]private Vector3 headFor;[Header("组件")]private Rigidbody2D rb;private Animator animator;private void Awake() {rb = GetComponent<Rigidbody2D>();animator = GetComponent<Animator>();}private void Update() {//实时面朝向headFor = new Vector3(-this.transform.localScale.x,0,0);}private void FixedUpdate() {Move();}public void Move(){//移动算式rb.velocity=new Vector2( currentSpeed* headFor.x*Time.deltaTime,rb.velocity.y);    }
}

2.野猪的动画

思考

1.动画应该以什么条件切换?

        因为怪物不像玩家一样用按键控制加速,是监测范围内出现玩家后,触发追击,反之亦然,所以适合用bool值来切换速度响应状态,也就是切换动画

(当然麦扣老师的考量就是继承怪物类的多种怪物,不靠一种速度模式触发,这样说也合理)

2.撞墙怎么办?

撞墙和检测玩家后切换动画状态属于同一种解决方法,都是用范围检测去判断

问题1

怪物的移动方法与散步逻辑,这里还要加入检测到玩家后跑步逻辑

结合问题2的撞墙范围检测来讲,相信并不难写了 

 //移动方法protected virtual void Move(){//移动算式rb.velocity=new Vector2( currentSpeed* headFor.x*Time.deltaTime,rb.velocity.y);if(!(physicscheck.isLeftWall&& physicscheck.isRightWall)){isWalk = true;animator.SetBool("walk", isWalk); }else{isWalk = false;}}

问题2 

撞墙检测

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;public class PhysicsCheck : MonoBehaviour
{//地面检测public bool isGround;public bool isLeftWall;public bool isRightWall;//检测半径public float raduis;//检测层级private LayerMask ground;//检测偏移量[Header("偏移量")]public Vector2 positionWithOffset;public Vector2 leftOffset;public Vector2 rightOffset;private void Start() {      ground = LayerMask.GetMask("Ground");       }private void Update() {Check();}private void Check(){isGround = Physics2D.OverlapCircle((Vector2)this.transform.position + positionWithOffset, raduis, ground);isLeftWall = Physics2D.OverlapCircle((Vector2)this.transform.position + leftOffset, raduis, ground);isRightWall = Physics2D.OverlapCircle((Vector2)this.transform.position + rightOffset, raduis, ground);Debug.Log("isGround: " + isGround);Debug.Log("isLeftWall: " + isLeftWall);Debug.Log("isRightWall: " + isRightWall);}private void OnDrawGizmosSelected() {Gizmos.DrawWireSphere((Vector2)this.transform.position + positionWithOffset, raduis);Gizmos.DrawWireSphere((Vector2)this.transform.position + leftOffset, raduis);Gizmos.DrawWireSphere((Vector2)this.transform.position + rightOffset, raduis);}}

撞墙等待后转身的计时器

 //撞墙等待转身方法protected void WaitAndTurn(){ if(waitState){waitClock -= Time.deltaTime;if(waitClock<= 0){waitState=false;waitClock = waitTime; // 重置计时器this.transform.localScale = new Vector3(headFor.x,1,1);}       }}

撞墙以后原地等待同步动画的逻辑 

  //实时面朝向headFor = new Vector3(-this.transform.localScale.x,0,0);if ((headFor.x > 0 && physicscheck.isRightWall) || (headFor.x < 0 && physicscheck.isLeftWall)) {waitState = true;animator.SetBool("walk", false);}//延迟转身WaitAndTurn();

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL-事务与并发问题

在数据库管理系统中&#xff0c;事务是一个重要的概念&#xff0c;它确保了一组数据库操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而维护数据的完整性和一致性。随着多个用户同时访问数据库&#xff0c;事务的并发处理变得尤为重要。 1. 事务的定义 事务是指一组…

AI 代理参考架构

LLM Agent部署框架 围绕 ChatGPT 的讨论&#xff0c;现在已经演变为AI 代理。 图&#xff1a;AI代理平台参考架构 比尔盖茨最近设想&#xff08;CNBC 采访&#xff1a;链接&#xff09;未来我们将拥有一个能够处理和响应自然语言并完成许多不同任务的AI 代理。盖茨以计划旅行…

ETAS工具链自动化实战指南<一>

----自动化不仅是一种技术&#xff0c;更是一种思维方式&#xff0c;它将帮助我们在快节奏的工作环境中保持领先&#xff01; 目录 往期推荐 场景一&#xff1a;SWC 之间 port自动连接 命令示例 参数说明 场景二&#xff1a;SWC与ECU 自动映射 命令示例 参数说明 场景三&…

c#实现数据导出为PDF的方式

PdfSharp vs iTextSharp: C#中PDF导出功能比较 PdfSharp 优点 轻量级&#xff1a;适合简单的PDF生成任务易于学习&#xff1a;API相对简单&#xff0c;学习曲线较缓开源&#xff1a;提供开源版本&#xff0c;可自由使用和修改纯C#实现&#xff1a;不依赖外部库或COM组件支持…

对零基础想转行网络安全同学的一点建议

最近有同学在后台留言&#xff0c;0基础怎么学网络安全&#xff1f;0基础可以转行做网络安全吗&#xff1f;以前也碰到过类似的问题&#xff0c;想了想&#xff0c;今天简单写一下。 我的回答是先了解&#xff0c;再入行。 具体怎么做呢&#xff1f; 首先&#xff0c;你要确…

1.初识redis

文章目录 1.认识redis1.1 mysql和redis 对比1.2分布式系统1.2.1单机架构与分布式架构1.2.2数据库分离(应用服务器和存储服务器分离)与负载均衡1.2.3负载均衡器1.2.4 数据库读写分离1.2.5 数据库服务器引入缓存1.2.6数据库分库分表1.2.7 引入微服务 2.常见概念解释2.1 应用(Appl…

音频导出后为什么效果变差了 FL Studio音频导出设置推荐

FL Studio是一款功能强大的编曲软件&#xff0c;除了可以编曲之外&#xff0c;FL Studio还支持各种音频格式导出。有的小伙伴在使用FL Studio导出音频后&#xff0c;会发现的导出的音频效果不理想&#xff0c;这很大的原因可能是导出设置不对造成的。下面给大家详细讲解&#x…

全面解析Gerapy分布式部署:从环境搭建到定时任务,避开Crawlab的坑

Gerapy分布式部署 搭建远程服务器的环境 装好带docker服务的系统 Docker:容器可生成镜像&#xff0c;也可拉去镜像生成容器 示例&#xff1a;将一个环境打包上传到云端(远程服务器)&#xff0c;其他8个服务器需要这个环境直接向云端拉取镜像生成容器,进而使用该环境,比如有MYS…

代码块分类

局部代码块 public class Test {public static void main(String[] args) {{int a 10;}// 执行到此处时候,变量a已经从内存中消失了。 // System.out.println(a);} } 构造代码块 public class Test {private String name;private int age;{// 构造代码块System.out.…

GEC6818开发板的学习

1、开发板的简介 首先连接 开发板与电脑,需电脑安装串口驱动:例CH340 2、开发板的特性: 像素:800*480Pix分辨率:高,宽两个维度的像素点数目开发板色深为32位一个像素点占4个字节:分别为灰度保留位、RGB三原色各占一位3、为什么要内存映射 虽然LCD设备本质上也可以看作…

R语言:如何安装包“linkET”

自己在R语言中安装包“linkET”时报错不存在叫‘linket’这个名字的程辑包 尝试了install.packages("linkET")和BiocManager::install("linkET")两种安装办法都不行 >install.packages("linkET") WARNING: Rtools is required to build R pa…

【Java】对象与toString()方法

1.前言 了解toString之前&#xff0c;要先明白Object类是什么&#xff0c;Object是所有对象的父类。在Object类当中含有toString()方法&#xff0c;因此所有的对象也都包含有一个toString()方法。 2.toString 2.1 方法调用 toString()方法主要的作用&#xff0c;是对类与对象的…

错误信息“缺少msvcr120.dll”或“找不到msvcr120.dll”应该如何修复?几种方法快速修复

由于这个msvcr120.dll文件与应用程序的运行密切相关&#xff0c;任何与之相关的问题都可能导致应用程序无法正常运行。错误信息如“缺少msvcr120.dll”或“找不到msvcr120.dll”&#xff0c;通常出现在软件安装不正确或系统更新后。接下俩就教大家几种方法快速修复msvcr120.dll…

CentOS 7 安装流程详细教程

目录 前言1. CentOS 7 概述2. 安装环境准备2.1 硬件要求2.2 安装介质准备 3. CentOS 7 安装步骤3.1 引导安装程序3.2 选择语言和键盘布局3.3 配置安装源和软件包3.4 配置分区3.5 设置网络和主机名3.6 设置时间和日期3.7 设置 root 密码和创建用户3.8 开始安装并完成配置 4. 安装…

Cocos Creator2D游戏开发(14)---CocosCreator常用组件详解

Canvas RenderRoot2D 组件所在的节点是 2D 渲染组件数据收集的入口,而 Canvas&#xff08;画布&#xff09; 组件继承自 RenderRoot2D 组件&#xff0c;所以 Canvas 组件也是数据收集入口。所有 2D 渲染元素都必须作为 RenderRoot2D 的子节点才能被渲染。 Canvas还作为屏幕适配…

用基础项目来理解spring的作用

简介 spring官方的解释过于专业化&#xff0c;初学者可能比较难懂&#xff0c;接下来我将通过一个最基础的Java项目来尽可能的展示spring中的作用及spring的底层是如何来实现的。 项目结构 该项目是一个简单的JavaSE项目&#xff0c;没有maven或者tomcat等其他。只在控制台进…

《黑神话悟空》2024官方配置要求一览

黑神话悟空配置要求 1080P 高画质推荐6650xt和4060以上的显卡高画质 全景光追推荐4060 2k 高画质推荐4060ti/7700x以上的显卡 高画质全景光追推荐4070 4K 高画质推荐4070s起步 高画质全景光追推存4080S 一、官方配置要求一览 1、最低配置: 需要 64 位处理器和操作系…

什么是逃逸分析

如何快速判断是否逃逸就看方法内new的对象实体是否能够被外部方法进行调用 什么是逃逸分析 在java虚拟机中&#xff0c;对象是在java堆中分配内存的&#xff0c;这是一个普遍的常识。但是&#xff0c;有一种特殊情况&#xff0c;那就是如果经过逃逸分析&#xff08;escape an…

[HDCTF 2023]Welcome To HDCTF 2023

方法一&#xff1a;找个炸弹死掉&#xff0c;flag就出现 方法二&#xff1a;查看页面源码&#xff0c;发现底部assets/js/game.js 复制后访问看到jsfuck编码 复制到控制台查看flag

功能测试与自动化测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 什么是自动化测试? 自动化测试是指利用软件测试工具自动实现全部或部分测试&#xff0c;它是软件测试的一个重要组成 部分&#xff0c;能完成许多手工测试无法实…