【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流

一、关于 显示分数时,如何让函数之间相互交流

这是一个非常好的逻辑问题

1 思路:主要涉及到两个脚本文件   1是主逻辑GameController脚本      2是挂在被击碎会加分的敌人身上的Collision脚本

GameController脚本(挂载在Hierarchy中的空物体GameController上)

public class GameController : MonoBehaviour
{private int score;private void Start()//函数1{   score = 0;UpdateScore();  }void UpdateScore()//函数2{   tips.text = "Score:" + score;  }   // 这个地方也要注意,tips.text的返回值是string类型,而score的值是int类型。规范的写,应该把 + score; 改成 + score.tostring(); 不过unity会自动帮助修改。public void AddScore(int newScoreValue)//函数3{   score += newScoreValue;UpdateScore();  }}

?逻辑是这样的:a、函数1是一个初始化,让分数重置为0 然后调用了函数2(函数2用于更新显示面板分数,但不是实际的去改变核心数值Score)

b、函数2的目的是更新显示面板的分数。但不负责核心变量Score的变化。

c、函数3是真正的增加了核心变量Score的数值。通过外部传递参数进来,改变核心变量Score的具体数值。但之后,更新面板的事情,交给函数2去做。

?总结:三个函数分别实现了 初始化;更新面板;更新分数 。 这三个函数最大限度地拆开了所有功能,将每个步骤都分开,这样外部调用会很方便,逻辑清晰。

Collision脚本(挂载在所有敌人的预制件上)

public class Collision : MonoBehaviour {public GameObject explo;public GameObject playerExplo;public int scoreValue;private GameController gameCon;private void Start()//函数1{   GameObject temporaryGC = GameObject.FindGameObjectWithTag("GameController");//这一部分非常重要!gameCon = temporaryGC.GetComponent<GameController>();     }private void OnTriggerEnter(Collider other)//函数2{  if(other.tag == "Bullet")//如果传递进来的参数,其标签是子弹,{Instantiate(explo, transform.position, transform.rotation);//那么就实例化一个explo,(explo是共有的,也就是说需要在Inspector面板里,拖拽一个 实际上是爆炸的特效)  而位置旋转参数,就跟这个脚本所挂载的游戏物体本身一样。 gameCon.AddScore(scoreValue); //通过GameController类的对象,调用增加分数函数。其参数scoreValue,是public类型,可以在Inspector面板上修改分值,达到“一个脚本作用于多个敌人时,有多个分值变化”。}Destroy(other.gameObject);  //销毁与它碰撞的任何物体       Destroy(gameObject);//销毁挂载此脚本的物体}
}

?逻辑是这样的:?a、函数1是最重要的逻辑,让每一个敌人都得到游戏物体GameController实例化之后所拥有的核心参数score。

?讨论一下是如何获得的:

目的:让每个敌人爆炸时,都能增加游戏物体GameController的score值。

核心:1 找到游戏物体GameController。2 获得它实例化后的组件。3 一旦爆炸,立刻调用组件里的函数加分。

?这里之前有一个疑惑:获取组件语句是在Start函数里调用的,也就是说敌人刚被实例化,就获取组件了,而敌人不一定什么时候被打死,那么当晚生成的敌人(即晚获取组件)先死掉,也加了分,而先获取组件的敌人后死掉,

但是他早就获取了组件,这个组件是没有更新晚生成却先死掉的得分的(获取组件方法是在Start函数里写的,是一次性的,不存在实时更新),那么会不会出现分数覆盖的情况?

?如果你问这个问题,那你犯了一个致命的错误(也就是我):没搞明白什么叫实例化!

我们看看实例化的定义:实例化是指在面向对象的编程中,通常把用类创建对象的过程称为实例化。格式为      类名 对象名 = new 类名(参数1,参数2...参数n)。如Date date=new Date();

实例化是在内存里开辟了一个空间(new),存放这个类的一个对象。而Collision脚本只是引用,根本没有创建新的对象。它就像一个指针一样,始终与原对象同步更新。

?b、函数2用于检测敌人是否被子弹碰撞到,如果是,就增加相应的分数。

存一些大神截图:

posted on 2018-02-08 17:02 喜欢我就给我买栗子 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lizitang/p/8432330.html

【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...相关推荐

  1. unity 彩带粒子_[Unity3D] 官方案例——粒子系统制作火焰效果

    1. 导入资源 打开素材里面的Shuriken场景,然后通过菜单GameObject->Particle System创建一个粒子系统对象,并将物体移至火把位置,此时效果如下: 2. 设置粒子系 ...

  2. Unity3D官方案例1-星际航行游戏Space Shooter

    Unity3D官方案例1-星际航行游戏Space Shooter [1]学习中的使用的类 1.Input:使用此类读取常规游戏设置中的轴,访问移动设备的多点触控和加速度. 本例使用到的方法: GetA ...

  3. ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

    ubuntu 安装Pangolin 过程_余辉亮的学习笔记的博客-CSDN博客_pangolin安装

  4. 青岛大学_王卓老师【数据结构与算法】Week04_12_案例分析与实现2_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频. 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的<数据结构与算法>的学习视频. 如有侵权,请留言作删文处理. 课程视频 ...

  5. 太赞了!开源下载机器学习经典书 PRML所有相关资料:中文译本,官方代码,课程视频,学习笔记...

    今天给大家推荐一本机器学习.深度学习的人都应该听说过一本经典教材:<Pattern Recognition and Machine Learning>,中文译名<模式识别与机器学习& ...

  6. 第2课第3节_Java面向对象编程_继承性_P【学习笔记】

    摘要:韦东山android视频学习笔记  面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...

  7. unity3d怎么让模型动起来_Unity3D 学习笔记(一) 创建3d人物并让其动起来

    Unity3D 学习笔记 创建3d人物并让其动起来 2020年2月9日 17:03 学习内容:b站傅老师的U3D黑魂复刻课程 # 创建地板,添加地板砖材质 调整大小,调整贴图 # 创建一个胶囊,并添加 ...

  8. 基于Duffing系统的分数阶混沌研究【基于matlab的动力学模型学习笔记_5】

    /*仅当作学习笔记,若有纰漏欢迎友好交流指正,此外若能提供一点帮助将会十分荣幸*/ 前面的几篇博文我们提到提到的都是整数阶模型,这里我们将对分数阶模型进行一个简单的研究. 摘要:与整数阶混沌相比,分数 ...

  9. 指数高通滤波器代码_影像组学学习笔记1-2——高通滤波法及应用

    笔记1-1中,我和大家一起学习了一种基于空域变换的图像增强法,今天在1-2我将介绍一种基于频域滤波增强的方法--高通滤波法. 图像的频域滤波增强是利用图像变换方法将原来图像空间中的图像以某种形式转换到 ...

最新文章

  1. 数学建模之图像处理---颜色建模
  2. JCIFS实现单点登录
  3. 【SSL】调用HTTPS://服务遇到错误:unable to find valid certification path to requested target
  4. docker安装redis并将配置文件和数据文件映射到外部
  5. php post fsockopen,php_fsockopen_post
  6. Nginx 快速安装手册及如何修改端口号
  7. 【专栏】国内外物联网平台初探(篇二:阿里云物联网套件)
  8. 阿里P8前端工程师:如何成为一名优秀的前端工程师!
  9. Lua开发工作笔记0003---Windows下搭建Lua开发环境
  10. DARPA Grand挑战赛Overbot的软硬件架构,轨迹规划和车辆控制
  11. Android挂断、接听电话
  12. python生成器函数的使用(模拟cycle函数)
  13. android x86 oreo,Android-x86 8.1 RC1发布:PC上运行Android Oreo
  14. 浅谈C#的垃圾回收-关于GC、析构函数、Dispose、and Finalize asp.net GC之析构函数详解...
  15. 干货 | 一文弄懂机器学习中偏差、方差
  16. 【爬虫学得好,JY进得早】:urllib模块详解
  17. 参会记录|全国多媒体取证暨第二届多媒体智能安全学术研讨会(MAS‘2023)
  18. 良好的研发团队文化是怎样「长」成的?一句成功的十四字真言!
  19. 微生物群落组装过程(assembly processes)
  20. 万分之二用百分之怎么表示_万分之三怎么写?

热门文章

  1. python子进程通信_python执行子进程实现进程间通信的方法
  2. 请编写出一个html页面 令其输出,javaweb程序设计案例教程_课后习题1.pdf
  3. 舵机弹跳机器人_这个小小的机器人外形呆萌 弹跳能力绝对比你好
  4. mysql事务手写笔记_兴奋了!阿里技术官手写“MySQL笔记”,传授你年薪百万级干货...
  5. 影响线型缩聚物分子量的因素_【CRPS】通过硼烷引发剂实现氧气引发的超高分子量聚合物的可控合成...
  6. 设计MM32-LINK自动复位器,上电复位
  7. 如何打赢一场唯快不破的比赛,看看他们的绝招
  8. 智能车竞赛技术报告 | 智能车视觉 - 中国矿业大学 - 会飞的车
  9. 飞机为什么能飞起来?直到今天,科学家仍然没有答案
  10. 简易无线电能接收方法