在这16个位置生成鱼,也就是创建16个空项目来装出生点,设置锚点和坐标,尺寸合适


并且将所有出生点的红轴旋转指向地图

创建一个空项目然后挂脚本
MakeFish.cs

    public class MakeFish : MonoBehaviour {// 存储生成位置的数组public Transform[] genPosition;// 存储鱼预制体的数组public GameObject[] fishPrefabs;// 事先创建的fishHolderpublic Transform fishHolder;


鱼的移动和转弯都专门写一个脚本来运行,因为以后的金币或者其他的特效也会使用到
Ef_AutoMove.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Ef_AutoMove : MonoBehaviour {// 移动的速度public float speed = 1f;// 移动的方向public Vector3 dir = Vector3.right;void Update () {// 自动移动transform.Translate(dir * speed * Time.deltaTime);}
}

Ef_AutoRotate.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Ef_AutoRotate : MonoBehaviour {// 自动旋转的脚本public float speed = 1f;void Update () {// 随着时间转动一定角度transform.Rotate(Vector3.forward, speed + Time.deltaTime);}
}

还需要一个脚本来声明最大速度和最多数量的属性
FishAttribute.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FishAttribute : MonoBehaviour {public int maxNum;public int maxSpeed;
}

消除判处屏幕的鱼






给边界加上tag

MakeFish.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;public class MakeFish : MonoBehaviour {// 存储生成位置的数组public Transform[] genPosition;// 存储鱼预制体的数组public GameObject[] fishPrefabs;// 事先创建的fishHolderpublic Transform fishHolder;// 生成一波鱼的时间间隔public float waveGenWaitingTime = 0.3f;// 生成一波鱼中一条鱼的间隔public float fishGenWaitingTime = 0.5f;void MakeFishs() {// 从该数组中随机挑选一个位置生成鱼int genPositionIndex = Random.Range(0, genPosition.Length);// 随机生成鱼的种类int fishPreIndex = Random.Range(0, fishPrefabs.Length);// todo:生成金鲨或者银鲨的概率降低// 获取生成鱼的最大数量int maxNum = fishPrefabs[fishPreIndex].GetComponent<FishAttribute>().maxNum;// 获取生成鱼的最大速度int maxSpeed = fishPrefabs[fishPreIndex].GetComponent<FishAttribute>().maxSpeed;// 生成鱼的数量// 因为金鲨的最大数是1,除以2之后没有,将就鱼int num = Random.Range((maxNum / 2) + 1, maxNum);// 生成鱼的速度int speed = Random.Range((maxSpeed / 2), maxSpeed);// 移动的模式:   0:直走;1:转弯int moveType = Random.Range(0, 2);// 直走的斜率int angleOffSet;// 转弯的角速度int angleSpeed;if(moveType == 0){// 生成直走鱼群// 22 —— -22 差不多就是45°的范围,可以将所有鱼生成到屏幕上angleOffSet = Random.Range(22, -22);// 调用函数生成直线的鱼// 使用IEnumerator的,调用方法要用StartCoroutineStartCoroutine(GenStraightFish(genPositionIndex, fishPreIndex, num, speed, angleOffSet));}else{// 生成转弯鱼群// 百分之五十的几率正方向的角速度if (Random.Range (0, 2) == 0) {// angleSpeed = Random.Range (-2, -1);// 旋转角度暂时没有是设置到合适的,就直接用1angleSpeed = -1;}// 百分之五十的几率反方向的角速度else{// angleSpeed = Random.Range (1, 2);// 旋转角度暂时没有是设置到合适的,就直接用1angleSpeed = 1;}// 调用函数生成转弯的鱼StartCoroutine(GenTurnFish(genPositionIndex, fishPreIndex, num, speed, angleSpeed));}}//p1:生成鱼的位置,p2:生成鱼的种类,p3:生成鱼的数量,p4:生成鱼移动的速度,p5:鱼直走的斜率IEnumerator  GenStraightFish(int genPosiIndex, int fishPreIndex, int num, int speed, int angleOffSet){for (int i = 0; i < num; i++){// 实例化GameObject fish = Instantiate(fishPrefabs[fishPreIndex]);// 设置父体,false:不保留世界坐标的位置fish.transform.SetParent(fishHolder, false);// 调节fish的localPosition和localRotationfish.transform.localPosition = genPosition[genPosiIndex].localPosition;fish.transform.localRotation = genPosition[genPosiIndex].localRotation;// 让鱼旋转fish.transform.Rotate(0, 0, angleOffSet);// 有些鱼太长,重叠的鱼Unity并不知道渲染哪一个,会出现闪烁// 就在层内排序加i,让所有的鱼层级不一样,就不会闪烁fish.GetComponent<SpriteRenderer>().sortingOrder += i;// 给生成的鱼挂上移动的脚本fish.AddComponent<Ef_AutoMove>().speed = speed;// System.Collections中IEnumerator可以让函数等待时间yield return new WaitForSeconds(fishGenWaitingTime);}}IEnumerator  GenTurnFish(int genPosiIndex, int fishPreIndex, int num, int speed, int angleSpeed){for (int i = 0; i < num; i++){// 实例化GameObject fish = Instantiate(fishPrefabs[fishPreIndex]);// 设置父体,false:不保留世界坐标的位置fish.transform.SetParent(fishHolder, false);// 调节fish的localPosition和localRotationfish.transform.localPosition = genPosition[genPosiIndex].localPosition;fish.transform.localRotation = genPosition[genPosiIndex].localRotation;// 有些鱼太长,重叠的鱼Unity并不知道渲染哪一个,会出现闪烁// 就在层内排序加i,让所有的鱼层级不一样,就不会闪烁fish.GetComponent<SpriteRenderer>().sortingOrder += i;// 给生成的鱼挂上移动的脚本fish.AddComponent<Ef_AutoMove>().speed = speed;// 给生成的鱼挂上旋转的脚本fish.AddComponent<Ef_AutoRotate> ().speed = angleSpeed;// System.Collections中IEnumerator可以让函数等待时间yield return new WaitForSeconds(fishGenWaitingTime);}}void Start () {InvokeRepeating("MakeFishs", 0, waveGenWaitingTime);}void Update () {}
}

Unity-3D捕鱼达人小游戏开发 —— 生成鱼相关推荐

  1. Unity-3D捕鱼达人小游戏开发 —— 起因和开始的设置以及准备工作

    起因 假期里的软件实践课,使用Unity-3D写一个游戏,试想也不能太low,但是奈何素材和资源太难找,在论坛上逛到了捕鱼达人的素材,便来试一试 开始 素材毕竟是从网上扒的,我觉得也不好放出来,存在网 ...

  2. Unity-3D捕鱼达人小游戏开发 —— 开始场景

    创建Image 对创建的Canvas进行设置 对Image进行属性修改 按住 option (mac) 或者 alt (win),会发生变化,选择了右下角的那个 拖入背景图 创建LogoImage 在 ...

  3. Unity-3D捕鱼达人小游戏开发 —— 游戏中场景

    复制场景 可以沿用start的场景,删除Logo和按钮即可 通过command+D复制start修改名字 添加水波纹 创建一个3D的plane 先将plane清零,取出碰撞体,坐标不是固定的,由实际情 ...

  4. Unity-3D捕鱼达人小游戏开发 —— 枪威力的修改

    切换枪下了一个脚本 GameController.cs using System.Collections; using System.Collections.Generic; using UnityE ...

  5. Unity-3D捕鱼达人小游戏开发 —— 炮台子弹发射

    为子弹创建出生地 在点击按钮的时候一样会射出子弹,使用 EventSystem.current.IsPointerOverGameObject() == false; 来解决,但是现在一个子弹都射不出 ...

  6. Unity-3D捕鱼达人小游戏开发 —— 游戏中精灵动画的制作

    创建好的精灵动画拖进归类空项目之后一定要修改z轴,还有order in layer,从1开始依次增加5,越珍贵的鱼值越大 拖入右边保存预制体,删除左边的精灵动画 将鱼.鱼死亡.子弹的精灵动画全做成预制 ...

  7. Unity-3D捕鱼达人小游戏开发 —— 鱼的死亡

    为鱼挂上属性脚本,并且将鱼死亡动画创作预制件,赋值 当然还需要给鱼初始化生命值 FishAttribute.cs using System.Collections; using System.Coll ...

  8. Unity 3D数学\图形学基础-游戏开发(向量)

    Unity 3D数学\图形学基础-游戏开发(向量) 向量运算的几何意义 标量与向量的计算 向量的模长 标准化向量 normalize 0向量 向量与向量的加减法 两点间距离公式(向量间距离) 点积,点 ...

  9. H5 canvas基础入门到捕鱼达人小游戏实现(1)

    为什么学习canvas? 看见别人网页一些非常炫酷的效果,羡慕不已,于是对canvas产生了浓厚的兴趣,所以想仔细学习学习canvas.下面就一起来学习吧,本文为系列文章,最后会编写一个简单版的捕鱼达 ...

最新文章

  1. 正则表达式re模块使用介绍
  2. QC中设置组权限-隐藏筛选器
  3. android4.4.2fragment不显示,Android应用中使用Fragment组件的一些问题及解决方案总结...
  4. centos7中置空一个文件的内容
  5. linux less命令简介
  6. boost之lexical_cast
  7. 统计文章中字母出现频率
  8. RabbitMQ生产者和消费者Java实现
  9. pta数据结构实验在数组中查找指定元素_如何从一个数组中查找指定的元素,并返回这个元素在数组中的位置...
  10. mysql命令 show_mysql show 相关命令
  11. SpringBoot 之Thymeleaf模板
  12. easyui基本布局
  13. Java获取当前电脑的ip地址
  14. 手把手教你进行微信小程序开发案例1---计算器
  15. 《Windows 程序设计(第3版)》——导读
  16. linux常用命令(六)命令执行顺序控制与管道
  17. 通过Java实现求水仙花数
  18. 哪个大学有计算机专业博士授权,哪些学校有计算机应用博士点
  19. builder模式构建JavaBean
  20. 风变编程——小白也能学会的编程课!

热门文章

  1. Java Date equals()方法具有什么功能呢?
  2. 陈凯:面向未来的多云管理平台
  3. 数据结构——图的存储结构
  4. zw版_Halcon-delphi系列教程_卫星航拍精确打击目标自动识别
  5. 今天修改了个仿新浪爱问的知识人系统,真累,部署真麻烦。
  6. 成电复试c语言历年真题,中大考研电子工程基础综合完整版复试真题
  7. 安徽省16市什么企业适合做知识产权贯标申报好处和什么材料汇编整理
  8. 高新技术企业认定申报工作网,高新认定申报系统激活
  9. 福建省高职单招计算机上机试题,福建省高职单招计算机类试卷二
  10. 如何在C语言程序中统计输入汉字的个数