玩家控制脚本(优化)

​
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;public class PlayerController : MonoBehaviour
{// [SerializeField] ------写在private前,使私有界面可视化private Rigidbody2D rb;private Animator anim;public float speed;public float jumpforce;[Space]public LayerMask ground;//获取地面信息public Collider2D coll;[Space]public int Cherry;public Text CherryNum;private bool isHurt;//默认是falsepublic AudioSource boom,JumpAudio,CollectionAudio,HurtAudio;public GameObject Death;public Collider2D DisColl;public Transform CeilingCheck;// Start is called before the first frame updatevoid Start(){rb = GetComponent<Rigidbody2D>();//获取Component组件anim = GetComponent<Animator>();}// Update is called once per frame//根据每一秒的实际帧数来平滑动画效果---兼容其他电脑void FixedUpdate(){if(!isHurt){Movement();}SwitchAnim();}void Movement(){//GetAxis --- 获得 -1到1 这三个数字包括其中所有的小数float horizontalmove = Input.GetAxis("Horizontal");//GetAxisRwo --- 直接获得 -1 0 1 这三个数字float facedircetion = Input.GetAxisRaw("Horizontal");//当正在移动时if(horizontalmove != 0){//获得速度的变化                    ↓方向*速度        ↓使效果更平滑   ↓没有跳跃所以y轴没有变化rb.velocity = new Vector2(horizontalmove * speed * Time.fixedDeltaTime, rb.velocity.y);//实现idle和run动画效果切换  ↓-用数学函数[绝对值]保证永远>0anim.SetFloat("running",Mathf.Abs(horizontalmove));}//判断角色面向方向if(facedircetion !=0){//获取transform下的scale             ↓输入的方向 yz轴不变transform.localScale = new Vector3(facedircetion,1,1);}//控制角色跳跃// if(Input.GetButtonDown("Jump") && coll.IsTouchingLayers(ground))// {//     rb.velocity = new Vector2(rb.velocity.x, jumpforce*Time.deltaTime);//     anim.SetBool("jumping",true);//     JumpAudio.Play();// }//优化跳跃手感if(Input.GetButton("Jump") && coll.IsTouchingLayers(ground)){rb.velocity = new Vector2(rb.velocity.x, jumpforce * Time.deltaTime);anim.SetBool("jumping", true);JumpAudio.Play();}else if (!Input.GetButton("Jump") && coll.IsTouchingLayers(ground)){anim.SetBool("jumping", false);}Crouch();}void SwitchAnim(){//优化代码(因为idle为默认启动动画,所以idle不需判断)// anim.SetBool("idle",false);if(anim.GetBool("jumping"))//判断是否处于跳跃状态{if(rb.velocity.y<0)//判断跳跃的力是否小于0{anim.SetBool("jumping",false);anim.SetBool("falling",true);}}else if(isHurt){//受伤效果anim.SetBool("hurt",true);anim.SetFloat("running",0);//当player被击退后,将状态改回不受伤状态if(Mathf.Abs(rb.velocity.x)<0.1f){anim.SetBool("hurt",false);// anim.SetBool("idle",true);isHurt = false;}}else if(coll.IsTouchingLayers(ground))//是否碰撞到ground层{anim.SetBool("falling",false);// anim.SetBool("idle",true);}}//碰撞触发器private void OnTriggerEnter2D(Collider2D collision){//通过标签碰撞检测if(collision.tag == "Collection"){//播放收集音效CollectionAudio.Play();//摧毁游戏物体Destroy(collision.gameObject);Cherry++;//UI显示Cherry的变化数值 用ToString方法进行类型转换CherryNum.text = Cherry.ToString();}//触碰死线重载场景if(collision.tag == "DeathLine"){//将所有的音频中第一个音频禁用(背景音乐那个)GetComponent<AudioSource>().enabled = false;//延迟调用Invoke("Restart",2f);}}//摧毁敌人private void OnCollisionEnter2D(Collision2D collision){//通过tag检测碰撞enemyif(collision.gameObject.tag == "Enemy"){//检测是否处于下落状态if(anim.GetBool("falling")){//踩死青蛙Destroy(collision.gameObject);//播放声音boom.Play();//然后小跳rb.velocity = new Vector2(rb.velocity.x, jumpforce*Time.deltaTime);anim.SetBool("jumping",true);//播放爆炸动画transform.position = collision.gameObject.transform.position; GameObject daeth =  Instantiate(Death,transform.position,Quaternion.identity);Destroy(daeth,0.5f);}//如果小狐狸在青蛙左边else if(transform.position.x < collision.gameObject.transform.position.x){//播放受伤音效HurtAudio.Play();//给一个向左的力rb.velocity = new Vector2(-5,rb.velocity.y);isHurt = true;}else if(transform.position.x > collision.gameObject.transform.position.x){//播放受伤音效HurtAudio.Play();//给一个向右的力rb.velocity = new Vector2(5,rb.velocity.y);isHurt = true;}}}//蹲void Crouch(){// //检测Player头上是否有碰撞物// if(!Physics2D.OverlapCircle(CeilingCheck.position,0.2f,ground))// {// if(Input.GetButton("Crouch"))//     {//         anim.SetBool("crouching",true);//         //discoll是否被启用//         DisColl.enabled = false;//     }// else if(Input.GetButtonUp("Crouch"))//     {//         anim.SetBool("crouching",false);//         //松开按键时恢复头部的boxCollider//         DisColl.enabled = true;//     }// }//评论区大佬优化代码,使其更加流畅if(!Physics2D.OverlapCircle(CeilingCheck.position,0.2f,ground)){if (Input.GetButton("Crouch")){anim.SetBool("crouching", true);DisColl.enabled = false;}else if (!Input.GetButton("Crouch")){anim.SetBool("crouching", false);DisColl.enabled = true;}}}//重载方法void Restart(){//通过获取当前活动场景的名字进行载入SceneManager.LoadScene(SceneManager.GetActiveScene().name);}}​

通过某特定方式载入下一个场景

public class EnterDoor : MonoBehaviour
{public GameObject enterDialog;private void OnTriggerEnter2D(Collider2D collision){if(collision.tag == "Player"){enterDialog.SetActive(true);}}private void OnTriggerExit2D(Collider2D collision){enterDialog.SetActive(false);}
}
public class EnterHouse : MonoBehaviour
{private void Update(){if(Input.GetKeyDown(KeyCode.E)){//                              得到当前场景的编号+1 得到下一个场景SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);}}
}

镜头跟随

public class CameraContorl : MonoBehaviour
{public Transform Player;void Update(){//获取player坐标并使镜头坐标与其相等transform.position = new Vector3(Player.position.x,0,-10f);}
}

最后是关于菜单的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Audio;public class Menu : MonoBehaviour
{   public GameObject pasueMenu;public AudioMixer audioMixer;public void PlayGame(){//点击play载入场景SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);}public void QuitGame(){Application.Quit();}//暂停按钮public void PauseGame(){pasueMenu.SetActive(true);//通过时间比例达到游戏暂停的效果Time.timeScale = 0f;}//播放按钮public void ResumeGame(){pasueMenu.SetActive(false);Time.timeScale = 1f;}//调整游戏的声音public void SetSound(float value){audioMixer.SetFloat("MainSound",value);}
}

最后

虽然我游戏做的很简陋,也不是很有趣,但这种做出来的成功感还是让我觉得十分值得

制作的过程中学到了很多很多的知识,这里也是非常的感谢麦扣老师

附上我的游戏链接,有兴趣的小伙伴可以来试试呀

Viciya.rar_免费高速下载|百度网盘-分享无限制百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1CTBbEOHiUnsYTgPLxUafPA提取码:0000  (四个零哦~)

关于b站M_Studio的学习笔记2相关推荐

  1. 关于b站M_Studio的学习笔记

    玩家控制脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEng ...

  2. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  3. python爬b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  4. 《B站-ElasticSearch》学习笔记

    目录 环境安装 安装ElasticSearch 安装ElasticSearch Hand可视化工具 安装Kibana ES核心概念 物理设计 逻辑设计 文档 类型 索引 倒排索引 IK分词器插件 什么 ...

  5. B站小迪安全学习笔记第11天-WEB漏洞必懂知识点讲解

    前言: 本章节将讲解各种 WEB 层面上的有那些漏洞类型,具体漏洞 的危害等级,以简要的影响范围测试进行实例分析,思维导图中的漏洞也 是后面我们将要学习到的各个知识点,其中针对漏洞的形成原理,如何发现 ...

  6. 【机器学习】《动手学深度学习》d2l 李沐B站视频配套学习笔记

    文章目录 各种基础铺垫 如何安装d2l包? 本书的内容框架 3-线性神经网络(基础回归模型) 3.1 内容介绍 3.4 softmax回归 补充:逻辑回归 1 线性回归模型完整代码 2代码拆解-数据准 ...

  7. B站小迪安全学习笔记第7天-CDN绕过技术

    前言: CDN 的全称是 Content Delivery Network,即内容分发网络.CDN 是 构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器, 通过中心平台的负载均衡.内容 ...

  8. B站小迪安全学习笔记第9天-信息收集APP及其他资产

    前言: 在安全测试中,若 WEB 无法取得进展或无 WEB 的情况下,我们需要 借助 APP 或其他资产在进行信息收集,从而开展后续渗透,那么其中的 信息收集就尤为重要,这里我们用案例讲解试试如何! ...

  9. B站小迪安全学习笔记第2天-数据包拓展

    网站解析对应 1.简要网站搭建过程 2.涉及到的攻击层面?(源码,搭建平台,系统,网络层等) 3.涉及到的安全问题?(目录,敏感文件,弱口令,IP 及域名等) 这几个不知道为什么开头提及了一下,就一笔 ...

最新文章

  1. 关于Mybaits,我总结了10种通用的写法
  2. 查看进程运行状态的环境变量
  3. 表单绑定 v-model —— :value @input || v-model原理
  4. N叉树的深度 python实现
  5. STL vector 用法
  6. 95-910-148-源码-FlinkSQL-Flink SQL自定义聚合函数
  7. Python读写文件说明
  8. dll domodal运行时异常_解决装备疑难,计算机丢失***.dll文件方法「设计画圈」
  9. stm32智能避障小车(三)之L298N
  10. 基于广度优先搜索的六度空间理论的验证
  11. maven clean Process terminated
  12. 搭建简单windows版NAS
  13. 恐怕你确定自己喜欢做什么
  14. 什么是增值税的进项税和销项税?
  15. 在Python里,用股票案例讲描述性统计分析方法(内容来自我的书)
  16. python 股票交易接口 github_GitHub - xiongyixiaoyang/vnpy: 基于python的开源量化交易平台开发框架...
  17. 视频特效-使用ffmpeg滤镜
  18. 这三种人不适合“裸辞”!
  19. 数字医疗产业论坛丨03期沪贵云上
  20. 杨亦涛老师分享零基础学ps笔记

热门文章

  1. 矩阵分解(EVD-SVD-Funk SVD-LFM-NCF-GMF)
  2. win10dnf服务器未响应,win10系统dnf老是未响应的解决步骤
  3. Fiddler工具使用与配置 【实例整理】
  4. 微软亚洲研究院实习生面试
  5. ZIP压缩包密码加密、解密
  6. Java Web中涉及的编解码
  7. mysql utf8mb4 emoji_mysql utf8mb4与emoji表情[转]
  8. centos刻录工具_UltraISO刻录CentOS 7安装指南
  9. O-1 4GB+的ISO镜像刻录
  10. 解决vue项目打包后文件过大导致首屏加载30s+的问题