【2023unity游戏制作-mango的冒险】-7.玩法实现

news2024/11/24 2:51:54

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity常用API
在这里插入图片描述


女神节专题篇


文章目录

    • 女神节专题篇
    • 🎶前言
    • 🎶(==A==)触发宝箱吃东西
    • 🎶(==火==)触发宝藏逻辑实现
    • 🎶(==土==)宝箱特效逻辑实现
    • 🎶(==木==)法球上下的移动效果
    • 🎶(==金==)炮管的旋转和发射
    • 🎶(==电==)人物的移动和法球的生成
    • 🎶(==水==)运动状态的跟随移动
    • 🎶(==霾==)人物的移动
    • ⭐相关文章⭐


🎶前言


🅰️ 让CSDN的浪漫弥漫女神节💕


🎶(A触发宝箱吃东西


在这里插入图片描述

请添加图片描述


🎶(触发宝藏逻辑实现


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//----------------------
//--作用: 宝箱触发宝藏
//----------------------
public class showApple : MonoBehaviour
{
    public Animator Colltor;
    private GameObject apple;
    void Start()
    {
        Colltor = GetComponent<Animator>();
    }
    void Update()
    {
        
    }
    private void OnTriggerEnter2D(Collider2D collision) //设置触发器
    {
      
        if(collision.transform .tag =="Palyer")
        {
            Colltor.SetBool("swtch", true);
            Invoke("CreatApple", 0.1f); //延时生成
        }
    }

    private void CreatApple()
    {
        //实例化Apple
        apple = Resources.Load<GameObject>(@"prefab1/apple");
        Instantiate<GameObject>(apple, new Vector3(-5.59f, -1.36f, 0), Quaternion.identity);

    }
}


🎶(宝箱特效逻辑实现


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//----------------------
//--作用: 宝箱特效
//----------------------
public class destory : MonoBehaviour
{
    public SpriteRenderer SRender;
    private bool Switch1;
    private float i = 20;
    private void Start()
    {
        SRender = GetComponent<SpriteRenderer>();  
    }
    void Update()
    {
        if(Switch1 == true ) //进行恶魔果实的特效变换
        {
            Apple();
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision .name =="Mango")
        {
            print("触发了");
            Switch1 = true;
            BallMove B_switch = collision.GetComponent<BallMove>();   //脚本调用获得打开法球冲散开关
            B_switch.switchCrush = true;
            print("恶魔果实效果开启");
        }
        /*  }
          private void OnTriggerExit2D(Collider2D collision)
          {
              if (collision.name == "Mango")
              {  
                  Destroy(gameObject);
              }  */
    }

    private  void Apple()
    {
        SRender.sprite = Resources.Load<Sprite>(@"prefab1/wow1"); //特效替换
        SRender.sortingOrder = 1;
        SRender.transform.localScale += new Vector3(1, 1, 0) * Time.deltaTime;
        i = i - 0.1f;
        SRender.color = new Color(255 ,0, 0,i)*Time.deltaTime;
        if (i == 0) //当透明度alpha为0时销毁
        {
            Destroy(gameObject);
        }
    }
}

🎶(法球上下的移动效果


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//----------------------
//--作用:法球的上下效果晃动
//----------------------
public class BallShape : MonoBehaviour
{

    private float UpDown;//申明上下变化的数值
    private float YPell;
    private float endTime = 2;
    private Vector2 Ball;
    void Start()
    {
        YPell = transform.position.y; //将mango辅助点的位置作为初始值并固定
    }
    void FixedUpdate()
    {
        //运用了倒计时的作用
        endTime = Mathf.MoveTowards(endTime, 0, 0.1f);
        if (endTime == 0)
        {
            BallJump();
            endTime = 2;
        }
    }
    private void BallJump()
    {
        UpDown = Random.Range(-1, 1f) * 5;
        Ball = new Vector2(transform.position.x, YPell +UpDown );
        transform.position = Vector2.Lerp(transform.position, Ball, 0.05f);
    }
}


🎶(炮管的旋转和发射


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//----------------------
//--作用: 炮管旋转和发射
//----------------------
public class ShootRotation : MonoBehaviour
{
    private float Angle;

    private bool swtich;  //step1:设置使用开关(Bool)
    void Start()
    {
        
    }
    void Update()
    {
        if(swtich  == true  )
        {
            Angle = Input.mouseScrollDelta.y*5;
            
           transform.localRotation = new Quaternion(0, 0, Angle, 0);
           

        }
    }

    //step2:设置触发检测
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.transform.tag =="Player")
        {
            swtich = true;
        }
    }
}


🎶(人物的移动和法球的生成


using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.PlayerLoop;
using UnityEngine.UIElements;
//----------------------
//--作用:mango的移动和法球的生成
//----------------------
public class Movetowords : MonoBehaviour
{
    private GameObject point, profab;
    private Animator mangoAni;
    private Transform[] Allpoint = new Transform[8];
    private GameObject[] AllIea = new GameObject[4];
    private float time = 5;
    void Start()
    {
        point = GameObject.Find("add");
        profab = Resources.Load<GameObject>(@"prefab1/iea");
        mangoAni = GetComponent<Animator>();
        for (int i = 0; i < Allpoint .Length ; i++)
        {
            Allpoint[i] = GameObject.Find("Allpoint").transform.GetChild(i);

        }
        Invoke("Creatball", 5);
    }
    private void Update()
    {
        //当位置到达后,动画转为吟唱动画
        if (gameObject.transform.position.x == point.transform.position.x)
        {
            mangoAni.CrossFade("LookUp", 0f); //
        }
    }
    void FixedUpdate()
    {
        time = Mathf.MoveTowards(time, 0, 0.1f);//倒计时,相当于起到一个延时调用的作用
        if (time == 0)
        {
            gameObject.transform.position = Vector2.MoveTowards(gameObject.transform.position, point.transform.position, 0.1f);
        }
    }
    private void Creatball()  //创建法球
    {
        for (int i = 0; i < AllIea.Length ; i++)
        {
           //1.法球生成
            AllIea[i] = Instantiate<GameObject>(profab, Allpoint[i].position, Quaternion.identity);
            if (i == 3) //3.法球渲染层级设置
            {
                AllIea[i].GetComponent<SpriteRenderer>().sortingOrder = 3;
            }
            //2.实现法球移动效果
            IeaMove mation = AllIea[i].GetComponent<IeaMove>();//给实例化的物体添加上了脚本IeaMove
            mation.Pball  = Allpoint[i + 4] ; 
         }
    }
 
}


🎶(运动状态的跟随移动


using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.PlayerLoop;
using UnityEngine.Rendering;
//-----------------------
//--作用:运动状态法球的跟随移动(以及Crush情况)
//-----------------------

public class BallMove : MonoBehaviour
{
    // Start is called before the first frame update
    private GameObject fab1,fab2;                        //首先声明两个不同层级的法球预制体
    public Transform  [] emptyP =  new Transform[5];   //为储存四个辅助点的位置
    private GameObject [] Fball  = new GameObject[5];   //为生成四个实例化法球做载体
    private IeaMove[] BALL = new IeaMove[5] ;
    public Transform stopBall;   //声明恶魔效果散落位置的母体
    public bool switchCrush = false;
   
    void Start()
    {
        //使用资源加载的API
        fab1 = Resources.Load<GameObject>(@"prefab1/iea1");
        fab2 = Resources.Load<GameObject>(@"prefab1/iea2");
        for (int i = 1; i < emptyP.Length; i++)
        {
            emptyP[i] = transform.GetChild(i); 
        }
        creatMove();
    }
    private void Update()
    {
        if (switchCrush == true )
        {
            print("碰到恶魔果实!");
            CrushBall();
        }
    }
    private void creatMove()
    {
        for (int i = 1; i < emptyP.Length; i++)
        {
            //使用判断语句的目的就是分两部分实例化法球,高层及和低层级
            if (i < 3)
            {
                Fball[i] = Instantiate<GameObject>(fab1, emptyP[i].position, Quaternion.identity);
            }
            else if(i>=3)
            {
                Fball[i] = Instantiate<GameObject>(fab2, emptyP[i].position, Quaternion.identity);
            }

            BALL[i] = Fball[i].AddComponent<IeaMove>(); //给物体添加脚本
            BALL[i].Pball = emptyP[i];
     
        }

    }

    private  void CrushBall() // 更新法球停留的辅助点位置
    {
           for(int i = 1; i<BALL.Length; i++ )
        {
            //四散的效果         
            Fball[i].  transform.Translate(Fball[i].transform .position .x , -2, 0);
            BALL[i].Pball = stopBall.GetChild(i-1);
            BALL[i].speed = 0.1f;
            print("法球失散!");
            BALL[i].swtich = true;
            BALL[i].M_sprite = Resources.Load<Sprite>(@"prefab1/wow"+(i+1));

        }
        switchCrush = false;
    }
    

    }












🎶(人物的移动


using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEditor.Rendering;
using UnityEngine;

//-----------------------
//--作用:mango的移动
//-----------------------
public class mangoMove : MonoBehaviour
{
    // Start is called before the first frame update
    private float x;
    private float y;
    private Rigidbody2D Rmango;
    private Vector2 mangoMovex,mangoMovey;
    private float SpeedVauel = 5;
    public  float JumpSpeed = 5000;
    private  Animator MGanimator;
    private bool isGrounp,Switch1;
    private GameObject bow;

    void Start()
    {
        Rmango = GetComponent<Rigidbody2D>();
        MGanimator = GetComponent<Animator>();
    }

    private void Update()
    {
        x = Input.GetAxis("Horizontal"); // 按AD键获取类型为Float的数值作为系数范围为【-1,1】      
         AmationJump();
    }
    void FixedUpdate()
    {
        Move();
        closeShoot();
    }

    private void Move() //Mango的移动
    {
        //实现转向
        if (x > 0)       //当按下A的时候 x是负数 ,按下D的时候x是正数
        {
            transform.localScale = new Vector3(0.75f, 0.75f, 1);
        }
        else if (x < 0)
        {
            transform.localScale = new Vector3(-0.75f, 0.75f, 1);
        }
        //通过刚体组件实现物体的移动,我们只需要将刚体速度的大小和方向进行赋值即可
        //mangoMovex 和 mangoMoveY 都是vector2 类型的变量
        mangoMovex = Vector2.right * x * SpeedVauel;       //x轴的速度
        mangoMovey = new Vector2(0, Rmango.velocity.y);    //y轴的速度
        //速度向量的合成,有大小并且有方向的
        Rmango.velocity = mangoMovex + mangoMovey;
        MGanimator.SetFloat("Run", Mathf.Abs(Rmango .velocity .x));
    }

   

    private void AmationJump() //跳跃动画切换功能
    {

        //当按下空格键和 符合 在地面的条件时 
      
        if (Input.GetKeyDown(KeyCode.Space) && isGrounp == true )
        {
       
            Rmango.AddForce (Vector2 .up *JumpSpeed);
          
        }
    
      
    }

     private void closeShoot() //法炮发射功能
    {
        
            if (Input.GetKeyDown(KeyCode.K))
            {

            MGanimator.CrossFade("Attack", 0.2f);

            bow = Instantiate(Resources.Load<GameObject>(@"prefab1/bow"), transform.GetChild(6).position, Quaternion.identity);
            Rigidbody2D dd = new Rigidbody2D();
            dd = bow.AddComponent<Rigidbody2D>();
            dd.AddForce(new Vector2(transform.localScale.x * 5000, transform.position.y));
            MGanimator.SetBool("Attack", false);             
        }     
    }

    private void  damage(bool swtich) //Mango受伤动画的切换
    {
        print("来切换动画了");
        if(swtich == true)
         {
            MGanimator.SetBool("hurt", true);
        }
        else
        {
            MGanimator.SetBool("hurt", false);
        }
       
    }

    //碰撞器方法
    private void OnCollisionStay2D(Collision2D collision)
    {
        //接触的物体标签为Grounp的时候

        if (collision.contactCount == 1&& collision.transform.tag == "grounp" )
        {
            isGrounp = collision.gameObject.CompareTag("grounp");
            MGanimator.SetFloat("Jump", 0);
        }
        if (collision.transform.tag == "damage")
        {
            damage(true);
            print("注意,正在接触陷阱");
        }

    }
    private void OnCollisionExit2D(Collision2D collision) //也可以说是跳跃状态的时候
    {
    

        if (collision.transform.tag == "grounp" && collision.contactCount == 0)
        {
         
            MGanimator.SetFloat("Jump", 3);
           
        }
        isGrounp = false;
        if (collision.transform.tag == "damage")
        {
          
                damage(false);
            print("退出了");

        }
    }


}

⭐相关文章⭐

⭐【2023unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

⭐【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

⭐【2023unity游戏制作-mango的冒险】-2.始画面API制作

⭐【2023unity游戏制作-mango的冒险】-1.场景搭建

⭐“狂飙”游戏制作—游戏分类图鉴(网易游学)

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!
请添加图片描述

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

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

相关文章

0805曲面及其方程-向量代数与空间解析几何

文章目录 1 曲面研究的基本问题2 旋转曲面3 柱面4 二次曲面4.1 定义4.2 研究方法4.3 九种二次曲面 结语 1 曲面研究的基本问题 曲面研究的两个基本问题&#xff1a; 已知一曲面作为点的几何轨迹时&#xff0c;建立这曲面的方程&#xff1b;已知x,y和z直接的一个方程时&#x…

如何在 Ubuntu 上实现 Nuxeo 与 ONLYOFFICE 文档集成

1. 概览 我们持续提供一系列易于使用的教程&#xff0c;向大家介绍如何将开源办公套件 ONLYOFFICE 文档集成到第三方 Web 服务中。ONLYOFFICE 文档根据 AGPLv.3 许可分发&#xff0c;包含处理文本文档、电子表格和演示文稿的编辑器&#xff0c;提供全套编辑及格式设置工具&…

Linux之进程间通信之管道

进程间通信的目的: 1、数据传输&#xff1a;一个进程需要将它的数据发售那个给另外一个进程。 2、资源共享&#xff1a;多个进程之间需要共享同样的资源。 3、通知事件&#xff1a;一个进程需要向另外一个或者一组进程发送消息&#xff0c;通知它们发生了某种事件(比如&…

java中避免使用“isSuccess“作为变量名的原因和解决方法

阿里巴巴Java开发手册的说法 在阿里巴巴Java开发手册中关于这一点&#xff0c;有过一个『强制性』规定&#xff1a; 其他原因 另外根据Java命名约定&#xff0c;方法名应该以动词开头&#xff0c;而变量名应该以名词或形容词开头。使用"isSuccess"作为变量名可能…

AAAI 2023 | 语言模型如何增强视觉模型的零样本能力 ?

文章链接&#xff1a;https://arxiv.org/abs/2207.01328 项目地址&#xff1a;https://github.com/zjukg/DUET 该论文设计了一种新的零样本学习范式&#xff0c;通过迁移语言模型中的先验语义知识&#xff0c;与视觉模型的特征感知能力进行对齐&#xff0c;以增强后者对于未见过…

nacos集成springcloud实现配置中心功能

1. 在nacos控制台创建namespace 2. 创建SpringCloud项目 大家注意springboot和springcloud的版本对应&#xff0c;可以去官网查看。 https://spring.io/projects/spring-cloud#learn <properties><java.version>11</java.version><poi.version>5.2.…

VSCode使用CodeWhisperer(AI编程)

安装AWS Toolkit插件&#xff0c;点击侧边插件搜索并安装 2.点击aws ->CodeWhisperer ->Start 3.在下拉菜单中点击Use a personal email to sign up and sign in with AWS Builder ID 4.点Copy Code and Proceed&#xff0c;这会自动复制一些东西 5. 收到提示打开外部网…

高德API JS 地图获取多个坐标点的中心点

高德API JS 地图获取多个坐标点的中心点 一、需求 我需要&#xff1a; 在地图上展示多个地点地图缩放到合适的大小&#xff0c;要求刚好能显示全部点位边缘留有一部分间隔。 做成如图所示这样。 二、需要用到的 AMap 类库 经过一下午的研究&#xff0c;弄出来了。 需要以…

【计算机网络自顶向下】简答题习题总结(一)

计算机网络是什么 两个及以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。 计算机网络两大功能 连通性和共享 如何描述Internet 分为两方面 具体构成 计算机互连设备、通信链路、分组交换设备 提供服务&#xff1a; 提供网络应用基础架构为分布式…

计网第二章实验2:DNS

DNS实验pdf下载地址(科学上网)&#xff1a;Wireshark_DNS_v7.0 (umass.edu) 实验前置知识 nslookup命令 nslookup –option1 –option2 host-to-find dns-server 如果dns-server不指定的话那么就是默认的&#xff1a;本地DNS服务器 选项其一 -typeNS or -typeA 所代表的意思不…

文心一言 VS 讯飞星火 VS chatgpt (43)-- 算法导论5.4 7题

七、为使特征序列长度的下界变得更精确&#xff0c;请说明在 n 次硬币的公平抛掷中&#xff0c;不出现比Ign - 2lglgn 更长的连续正面特征序列的概率小于 1/n。 文心一言&#xff1a; 在 n 次硬币的公平抛掷中&#xff0c;每个硬币正、反面朝上的概率均为 1/2。让我们考虑一个…

【人工智能技术专题】「入门到精通系列教程」零基础带你进军人工智能领域的全流程技术体系和实战指南(LLM、AGI和AIGC都是什么)

零基础带你掌握人工智能全流程技术体系和实战指南&#xff08;LLM、AGI和AIGC都是什么&#xff09; 前言专栏介绍专栏说明学习大纲前提条件面向读者学习目标核心重点三连问核心学习目标和方向 什么是LLM大语言模型概念定义训练方式机器学习的类型LLM与无监督学习什么是无监督学…

视频剪辑培训班要学多久 视频剪辑的培训班有用吗

视频剪辑培训班要学多久&#xff1f;视学员的基础而定&#xff0c;零基础的学员可能需要花费较多的时间&#xff0c;而有基础的学员则更快上手。另外&#xff0c;学习的内容也会影响到学习周期。视频剪辑的培训班有用吗&#xff1f;靠谱的培训班会比自学更有用&#xff0c;效率…

为什么老板宁愿招年轻测试员?

测试员&#xff0c;30岁是一个分水岭&#xff0c;年龄越大越难找工作&#xff0c;为何&#xff1f;下面通过几方面来谈谈&#xff0c;为什么老板宁愿招年轻测试员。 可塑性强 年老的测试员可塑性不强了&#xff0c;通俗来讲&#xff0c;不会被老板画的大饼忽悠了。 而年轻人&…

canvas绘制s形曲线

<!DOCTYPE html> <html> <head><title>S形曲线示例</title> </head> <body><canvas id"canvas" width"400" height"400"></canvas><script>var canvas document.getElementById(c…

VUE-3组合API

1、为什么学vue3&#xff1f; 2020年09月18日&#xff0c;正式发布vue3.0版本。但是由于刚发布周边生态不支持&#xff0c;大多数开发者处于观望。 现在主流组件库都已经发布了支持vue3.0的版本&#xff0c;其他生态也在不断地完善中&#xff0c;这是趋势。 element-plus A Vue…

spring.freemarker 2306

Springboot Properties 2306 >spring.freemarker 模板属性 NameDescriptionDefault Valuespring.freemarker.allow-request-overrideWhether HttpServletRequest attributes are allowed to override (hide) controller generated model attributes of the same name.falses…

Cisco MPLS VPN Option A

一、拓扑 二、思路 1、AS 100内运行OSPF&#xff0c; AS 200运行OSPF打通底层网络 2、AS 100和200运行LDP协议&#xff0c;分发标签 3、PE1和ASBR-PE1建立VPNV4邻居关系&#xff08;可以看成是两个单域的PE建立VPNV4邻居关系&#xff09;&#xff0c;PE2和ASBR-PE2建立VPNV4…

Github拉取老版本或releases稳定版本的仓库

Github拉取老版本或releases稳定版本的仓库 文章目录 Github拉取老版本或releases稳定版本的仓库拉取老版本方法一&#xff1a;clone方法二&#xff1a;checkout 下载 releases 版本 拉取老版本 方法一&#xff1a;clone 随便进入一个仓库&#xff0c;查看分支信息 针对要拉取…

spring-security -oauth2 整合 JWT

前言 在这个基础上&#xff0c;进行整合。 spring security oauth2学习 -- 快速入门_本郡主是喵的博客-CSDN博客 1.jwt的一般使用 先把 reids,common-pools 等依赖删掉。 删掉redis的下相关配置 1.1 导入依赖 <!--jjwt--><dependency><groupId>io.json…