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

news2024/12/26 1:12:35

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

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

所以该课程没有那么多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.coloradmin.cn/o/2050473.html

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

相关文章

基于asp.net的webform框架的校园点餐系统源码

今天给大家分享一套基于asp.net的webform框架的网页点餐系统&#xff0c;适合课程设计参考及其自己学习&#xff0c;需要的小伙伴自己参考下&#xff0c;下载链接我放在后面了 主要功功能 系统的主要功能包含&#xff1a;前端点餐页面、加入购物车、商品食物浏览、我的购 物车…

ffmpeg开发者视频剪辑器

5G 时代的来临&#xff0c;加速了视频类作品的创作&#xff0c;由于现在的流量越来越便宜&#xff0c;网速越来越快&#xff0c;特别是流量无限用套餐&#xff0c;大家更愿意去看视频作品&#xff0c;特别是抖音的兴起&#xff0c;更是加速了小视频的流量。不会剪辑的我们该如何…

windows安装android studio

下载 https://developer.android.google.cn/studio?hlzh-cn 安装 打开cmd输入如下命令 android-studio-2024.1.1.12-windows.exe /NCRC 注意 运行命令后可能还报错&#xff0c;但是会出现弹窗 如果还是报错可以选择zip 运行 不设置代理 等待下载即可&#xff0c;…

SAP LE学习笔记04 - MM与WM跨模块收货到仓库的流程中 如何既创建TR又同时立即在前台创建TO

上一章讲了在MM模块的IM(在库管理)中收货到仓库的流程,以及关联WM移动Type与IM移动Type。 SAP LE学习笔记03 - 在IM(在库管理)中收货到仓库的流程&#xff0c;关联 WM移动Type与IM移动Type-CSDN博客 本章继续将LE的其他知识。 - MM与WM跨模块收货到仓库的流程中&#xff0c;如…

深入探索Amazon EC2:解锁云端计算的无限可能

欢迎来到本次的实验教程&#xff0c;这将引导您在功能强大且充满活力的 Amazon Web Services (AWS) 云中启动并配置虚拟机。 在本次实验中&#xff0c;您将亲身体验如何利用 Amazon 机器映像 (AMI) 启动 Amazon EC2 实例&#xff0c;并掌握使用密钥对进行 SSH 认证登录实例的技…

第18 章探讨 C++新标准.可变参数模板,模板和函数参数包,展开参数包

第18 章探讨 C新标准.可变参数模板,模板和函数参数包,展开参数包 第18 章探讨 C新标准.可变参数模板,模板和函数参数包,展开参数包 文章目录 第18 章探讨 C新标准.可变参数模板,模板和函数参数包,展开参数包18.6 可变参数模板18.6.1 模板和函数参数包18.6.2 展开参数包18.6.3 …

Bootstrap个人技术博客响应式网页模板

Bootstrap个人技术博客响应式模板基于Bootstrap3.3.5制作&#xff0c;自适应分辨率&#xff0c;兼容PC端和移动端&#xff0c;全套模板&#xff0c;包括首页、关于、网页配色、内容页、友情链接、读者墙、标签云、点赞等网站模板页面。模板下载地址http://m.bokequ.com/moban/1…

我在高职教STM32——I2C通信之SHT20传感器(2)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助CSDN平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分…

ubuntu基于sealos搭建k8s集群,helm3安装配置自动化扩容Prometheus,grafana出图展示,以及动态web搭建

1.项目简介 大方向&#xff1a;k8s云原生方向&#xff0c;运维技术&#xff0c;配置问题解决 解决技术:ubuntu模板机安装&#xff0c;配置远程xshell连接ubuntu&#xff0c;设置静态ip&#xff0c;换ubuntu阿里云源&#xff0c;配置集群间域名解析&#xff0c;解决双IP冲突网…

I2C的10-bit地址空间

10-bit地址空间&#xff1a; I2C支持 10-bit的设备地址&#xff0c;此时的时序如下图所示&#xff1a; 在 10-bit地址的 I2C系统中&#xff0c;需要两个帧来传输 slave的地址。第一个帧的前 5个 bit固定为 b11110&#xff0c;后接 slave地址的高 2位&#xff0c;第 8位仍然是 …

牛客面经学习笔记(四)

这种拨码开关在PLC里面很是常用&#xff1a; 这种弧型线就很漂亮&#xff1a; 这个白色按键很漂亮&#xff1a; 快恢复保险丝&#xff1a; 继电器电路&#xff1a; 这里的续流二极管很重要&#xff0c;因为继电器是感性元件&#xff1a; 【【必考】5招搞清楚&#xff01;单点接…

关于pytorch后续学习需要下载的包太慢怎么办?tensorboard为例

启发&#xff1a; anaconda python3.7安装TensorFlow 1.9.0&#xff08;CPU版&#xff09; 和这个佬的 我是CPU版本&#xff08;好像是需要找anaconda对应版本&#xff0c;我不知道咋找版本&#xff0c;不知道不同版本的对应关系&#xff09; 此时&#xff0c;我们可以浅浅pip…

民航网上订票系统设计和实现--论文pf

TOC springboot427民航网上订票系统设计和实现--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和…

【系统分析师】-综合知识-系统架构

1、设计模式 1&#xff09;观察者模式定义了对象间的一种一对多依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新【消息订阅】。在该模式中&#xff0c;发生改变的对象称为观察目标&#xff0c;被通知的对象称为观察者&…

泰坦尼克号 - 从灾难中学习机器学习/Titanic - Machine Learning from Disaster(kaggle竞赛)第二集(加载数据)

此次目的&#xff1a; hello大家好&#xff0c;俺是没事爱瞎捣鼓又分享欲爆棚的叶同学&#xff01;&#xff01;&#xff01;准备出几期博客来记录我学习kaggle数据科学入门竞赛的过程&#xff0c;顺便也将其中所学习到的知识分享出来。这是第一集&#xff08;了解赛题&#x…

Ansible可视化管理之web界面集成使用探究(未完待续)

一、前言 因某集成商管理的客户资源涉及4A接入管控要求&#xff0c;其中密码必须3个月更新一次&#xff0c;随着纳管主机的数量增多&#xff0c;手动去修改密码变得不现实&#xff0c;考虑无侵入性和资源耗用&#xff0c;便捷性等因素&#xff0c;首先选用Ansible作为此需求的…

武汉君耐营销策划有限公司员工信息管理系统pf

TOC springboot428武汉君耐营销策划有限公司员工信息管理系统pf 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这个…

【Harmony OS 4.0】待办列表案例

src/main/ets/example1/Models.ets // 定义class类数据模型 export class TaskDataModel {// private 私有属性&#xff0c;在类对象外不允许随意更改数据&#xff0c;必须本地初始化。private tasks: Array<string> [早起晨练, 准备早餐, 阅读名著, 学习ArkTs, 玩游戏…

答题情况和每题得分

文章目录 1.提交答题情况1.PracticeDetailController.java2.PracticeDetailService.java3.PracticeDetailServiceImpl.java4.PracticeDetailDao.java5.PracticeDetailDao.xml6.reqSubmitSubjectDetailReq.java 7.dto1.SubjectDetailDTO.java2.SubjectDTO.java3.SubjectOptionDT…

算法的学习笔记—合并两个排序的链表(牛客JZ25)

&#x1f600;前言 在算法面试中&#xff0c;链表问题是经常遇到的考点之一&#xff0c;其中合并两个排序链表是一个非常经典的问题。本文将详细介绍如何通过递归和迭代两种方式实现两个有序链表的合并。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f600;合并…