前文:https://blog.csdn.net/Jaihk662/article/details/86766196(物体实例化)

https://blog.csdn.net/Jaihk662/article/details/86766324(物体销毁)

前面已经实现了“物体随机刷新”,代码如下,利用flag全局变量使金币每15帧刷新一次

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinPrint : MonoBehaviour
{int flag;public GameObject Mycoin;void Start(){flag = 0;}void Update(){flag++;if (flag % 15 == 0){float x, z;x = Random.Range(-5f, 4.2f);        //-5f和(float)-5效果一样z = Random.Range(-5f, 4.2f);GameObject.Instantiate(Mycoin, new Vector3(x, (float)0.05, z), Quaternion.identity);}}
}

那么假设不以帧计时,那么有没有专门的API可以实现计时呢?

一、Invoke函数

  • Invoke(string, float):在float秒后执行函数string,只会执行一次
  • InvokeRepeating(string,float1,float2):在float1秒后执行函数string,接下来每float2秒执行一次
  • CancelInvoke():使这个脚本中所有的Invoke调用失效

同等代码如下:除此之外,当按下C键之后,所有的刷新都会停止

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinPrint : MonoBehaviour
{public GameObject Mycoin;void Start(){InvokeRepeating("CreateCoin", 3, 0.3f);        //3秒之后开始出现金币,每0.3秒刷新一次}void Update(){if (Input.GetKey(KeyCode.C))        //按下C键后不再生成金币{CancelInvoke();}}void CreateCoin()       //先封装成一个方法{float x, z;x = Random.Range(-5f, 4.2f);z = Random.Range(-5f, 4.2f);GameObject.Instantiate(Mycoin, new Vector3(x, (float)0.05, z), Quaternion.identity);}
}

Invoke 相关的函数都在 MonoBehaviour 类里面,我们所有写的脚本类都是 MonoBehaviour 类的子类,所以我们可以直接通过方法名来调用父类中的方法

二、碰撞销毁

当主角碰撞到金币时,金币应该马上被销毁,不然就可以“反复刷分”,这显然是不合理的

方法如下:因为Coin太多,而名字是唯一的,所以要先建立Tag标签

之后只需要编写代码实现:当主角与标签为Tag的物体发生碰撞的时候,销毁这个物体即可,如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Text1: MonoBehaviour
{private Transform myTransform;      //实例化Transform对象private Rigidbody myRigidbody;void Start(){myTransform = gameObject.GetComponent<Transform>();myRigidbody = gameObject.GetComponent<Rigidbody>();}// Update is called once per framevoid Update(){if (!Input.GetKey(KeyCode.LeftControl)){if (Input.GetKeyDown(KeyCode.UpArrow))      //箭头上{//Debug.Log("刚体向前移动");myRigidbody.MovePosition(myTransform.position + (new Vector3(0, 0, 1)));}//……}}//……void OnCollisionEnter(Collision coll)       //发生碰撞{Debug.Log("sdsd");if(coll.gameObject.tag=="Coin")     //如果是和金币发生碰撞{GameObject.Destroy(coll.gameObject);        //销毁金币}}
}

除此之外,最好将主角方块的质量设的特别大,这样主角就基本不会发生碰撞效果

实现结果:

当然,还可以将碰撞改为触发,并移除金币的刚体组件,给金币加上自动旋转效果,金币脚本和效果如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinDest: MonoBehaviour
{public GameObject Mycoin;private Transform myTransform;void Start(){myTransform = gameObject.GetComponent<Transform>();GameObject.Destroy(gameObject, 8);}void Update(){myTransform.Rotate(new Vector3(0,0,1), 10f);        //自动旋转}
}

Unity3D基础28:Invoke计时函数与碰撞销毁相关推荐

  1. 【Unity3D基础2-8】Unity3D导航系统的使用

    一.引言 目录:[Unity3D从入门到进阶]文章目录及设置这个专栏的初衷 二.导航系统面板 Agents模块: Name:设置烘培Agents的名字 Radius:烘培的半径,也就是物体的烘培

  2. Unity3D基础27:C#随机函数与物体销毁

    前文:https://blog.csdn.net/Jaihk662/article/details/86766196(物体实例化) 在很多游戏中,都有那种类似"奖励分"的游戏道具, ...

  3. Unity3D基础29:消息发送

    前文:https://blog.csdn.net/Jaihk662/article/details/86766641(Invoke计时函数与碰撞销毁) 一.SendMessage消息发送 gameOb ...

  4. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D...

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  5. Python基础(五)--函数

    目录 Python基础(五)--函数 1 函数的作用 1.1 函数定义与调用 1.2 函数的作用 1.3 空语句 2 参数与返回值 2.1 函数的参数 2.2 函数的返回值 2.3 返回多个值 3 参 ...

  6. 前端面试 - JS总结(1) - 基础 (数据类型, 事件与函数, 原型链)

    你不走出舒适圈,又怎么知道自己多坚强?! 前端面试 - JS总结(1) - 基础 (数据类型, 事件与函数, 原型链) 前端面试 - JS总结(2) - ES6 (let, 箭头函数, this) 前 ...

  7. 痞子衡嵌入式:嵌入式里通用微秒(microseconds)计时函数框架设计与实现

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里通用微秒(microseconds)计时函数框架设计与实现. 在嵌入式软件开发里,计时可以说是非常基础的功能模块了,其应用也非常 ...

  8. Rosetta基础(3)--Rosetta能量函数简介

    Rosetta基础(3)–Rosetta能量函数简介 作者:谷雨 来源:https://zhuanlan.zhihu.com/p/262211868 在Rosetta中评估一个模型的好坏,最直观的方法 ...

  9. python 基础(1)函数 字符串

    小白到精英必备的100多个Python函数汇总   练习题 前言: 作者 吉多·范罗苏姆(Guido van Rossum) 荷兰人 应用场景 web开发 执行脚本类似于shell 统计类 计算程序 ...

最新文章

  1. Asp.NET中常用的一些优化性能的方法
  2. python监控mysql数据改变_python3小脚本-监控服务器性能并插入mysql数据库
  3. Simulink仿真教程1---一个简单的仿真例子
  4. 小白的算法初识课堂(part3)--递归
  5. 对线程与进程的区别以及对多线程并发的理解
  6. Python:程序员在每天不同时间发微信消息给女友
  7. Reg“.NET研究”exOptions.Compiled的含义和使用
  8. py的征途2之简例分享
  9. java 检查 死链接_如何检查网站死链(网站死链接如何简易识别及处理)
  10. python登录系统三次锁定_Python基础篇-账号登录错误三次锁定
  11. sync.Pool 使用
  12. Java相同类型的两个对象比较属性值,得到不同属性的名称和对应的值,附代码实例
  13. python调用百度AI接口实现人像分割
  14. 3blue1brown线性代数的本质笔记
  15. 【游戏开发教程】Unity Cinemachine快速上手,详细案例讲解(虚拟相机系统 新发出品 良心教程)
  16. android开发之欢迎界面
  17. 上班消磨时光的看txt小说神器,很好用
  18. 如何预防嗓音障碍使其健康
  19. (HTML+css)学习小征程!!!
  20. C语言指针的算术运算

热门文章

  1. python是什么意思中文-python是什么意思中文
  2. python基础教程3下载-Python基础教程第3版中国PDF电子书免费下载
  3. swagger python自动化用例_自动生成robot自动化测试用例
  4. java商城源码_盘点这些年被黑的最惨的语言,Java瑟瑟发抖
  5. 我与CSDN的2020年
  6. echarts 饼图
  7. 蓝桥杯2014c++真题:扑克序列(next_permutation)
  8. 【数据结构和算法笔记】哈夫曼树的概念,构造和应用(利用哈夫曼编码压缩文本)
  9. 12v电源正负极区分_UPS不间断电源的安装、配电计算及相关故障处理方法!
  10. 前端图片点击按钮加载更多内容_前端开发规范