1、生成鱼的脚本:

using UnityEngine;

using System.Collections;

public class GameComtroller : MonoBehaviour {

public int maxFishCount; //鱼群的最大数量
public int currentFishCount = 0; // 记录当前环境中 鱼的个数。大于maxFishCount创建鱼
float timer; //定时器
public float timerInterVal; //每间隔多久生产一条鱼

void Update () {
CreateFishes ();
}

// 创建鱼群
void CreateFishes()
{
timer += Time.deltaTime;
// 每隔timerInterVal创建一条鱼,并且 当前鱼的数量小于最大容量
if (timer >= timerInterVal) {
if (currentFishCount < maxFishCount) {
currentFishCount++;
// Object original, Vector3 position, Quaternion rotation
// 随机 获取鱼的下标 用来设置鱼的预制体
int flag = Random.Range (1, 4);
Object fish = Resources.Load ("fish" + flag); // 得到鱼的预制体
timer = 0;

// 2、视窗 -- Viewport 左下角坐标(0,0),右上角坐标(1,1)
// 取照相机Z坐标的相反数 将 位置固定到我们的背景上
float Z = -Camera.main.transform.position.z;
//得到鱼  在视窗中的相对位置
Vector3 fishPosition = new Vector3 (Random.value, Random.value, Z);
//将鱼 从视窗中的相对位置 转换到世界坐标系中
fishPosition = Camera.main.ViewportToWorldPoint (fishPosition);

// 调用鱼脚本的 创建鱼的方法 获取鱼的脚本
fishScript fs = fishScript.Birth (fish, fishPosition);
fs.sengDeathMessage += Reduce;

}
}
}
// 鱼死后 GameColltronaller需要把当前鱼的数量 -1
void Reduce()
{
currentFishCount--;
}

}

2、鱼的移动方向的脚本:

using UnityEngine;
using System.Collections;

public class fishScript : MonoBehaviour {
//鱼的朝向
enum Fish_Direction
{
right = 1,   //scale = 1
left = -1 //scale = -1
}
Fish_Direction fish_direct; 
// 声明一个 鱼死亡的 消息代理 无参无返
public delegate void SendDeathMessageDelegate ();
// 设置 消息代理的 事件
public event SendDeathMessageDelegate sengDeathMessage;
public int Hp;

void Start () {
//设置鱼的 随机 朝向
Vector3 scale = transform.localScale;
if (Random.value > 0.5f) {
fish_direct = Fish_Direction.right;
scale.x = (float)fish_direct;
} else {
fish_direct = fishScript.Fish_Direction.left;
scale.x = (float)fish_direct;
}
transform.localScale = scale;

setMotionTarget ();
}

void Update () {
UpdeteFishMotion ();
Death ();
}
//设置鱼的移动目的地
Vector3 tragetPosition; // 目标点
void setMotionTarget()
{
//判断鱼的朝向 来设置 移动的终点
if (fish_direct == Fish_Direction.right) {//往右边
// 通过 视窗 的 位置来限定 终点在世界坐标系中的位置
Vector3 Rps = new Vector3 (1, Random.value, -Camera.main.transform.position.z);
// 把 转换后 的位置赋值给 tragetPosition
tragetPosition = Camera.main.ViewportToWorldPoint (Rps);
} else {//往左边
Vector3 Lps = new Vector3 (0, Random.value, -Camera.main.transform.position.z);
tragetPosition = Camera.main.ViewportToWorldPoint (Lps);
}
}

// 鱼的游动速度
public float fishSpeed;

// 更新鱼的位置
void UpdeteFishMotion()
{
// 移动当前物体的位置到目标点,可以设置物体 每次移动的最大距离,并且返回移动后的位置
transform.position = Vector3.MoveTowards (transform.position,tragetPosition,fishSpeed * Time.deltaTime);
// 如果 物体的位置 和目标点的距离 < 0.1f
if (Vector3.Distance (transform.position, tragetPosition) ==0) {
//把鱼的朝向 改成相反的方向
fish_direct = fish_direct == Fish_Direction.right ? Fish_Direction.left : Fish_Direction.right;
Vector3 scale = transform.localScale;
//根据fish_direct的值来操作鱼的朝向
if (fish_direct == Fish_Direction.right) {
scale.x = 1;
} else {
scale.x = -1;
}
transform.localScale = scale;

setMotionTarget ();
}
}

//静态方法 脚本对象初始化之前就可以调用 返回鱼的脚本
public static fishScript Birth(Object prefab,Vector3 position)
{
GameObject fish = Instantiate (prefab, position, Quaternion.identity) as GameObject;
//得到鱼身上的脚本 返回出去 供外界使用
return fish.GetComponent<fishScript> ();
}

//鱼死亡
void Death()
{
if (Hp <= 0) {
//临死之前 去发送一条消息 告诉鱼的制造者 gameController "I am Death"
sengDeathMessage();
//制造爆炸
Object ExplosionPrefab = Resources.Load("BoomEffect"); //得到爆炸的预制体
GameObject s = Instantiate (ExplosionPrefab,transform.position,Quaternion.identity) as GameObject;
Destroy (s, 0.3f);
Destroy (gameObject);
}
}
}

3、炮口移动角度的脚本:

using UnityEngine;
using System.Collections;

public class CannonScript : MonoBehaviour {

void Update () {
//将鼠标在屏幕上的坐标转换成 世界坐标系中的坐标
Vector3 MousePosition = Camera.main.ScreenToWorldPoint
(new Vector3( Input.mousePosition.x,Input.mousePosition.y,-Camera.main.transform.position.z));
//得到 炮口到鼠标点的向量
Vector3 tempPosition = MousePosition - transform.position;
//将炮口自身的Y轴设置 为tempPosition
transform.up = tempPosition.normalized;
if (Input.GetKeyDown  (KeyCode.Space)) {
LaunchBullet ();
}
}
// 发射子弹
void LaunchBullet()
{
//获取 子弹的预设体
Object bullet = Resources.Load ("fire");
//ransform.GetChild 获取子物体的Transform组件
Instantiate(bullet,transform.GetChild(0).position,transform.rotation);
}
}

4、子弹的脚本:

using UnityEngine;
using System.Collections;

public class BulletScript : MonoBehaviour {
public float Speed;
public int damage;

void Start () {

}

void Update () {
transform.Translate (Vector3.up * Speed * Time.deltaTime);
if (transform.position.y > 7.9f || transform.position.y < -1.4f || transform.position.x < -6.7f || transform.position.x > 13f ) {
Destroy (gameObject);
}
}
//出发检测
void OnTriggerEnter2D(Collider2D other)
{
if(other.gameObject.tag =="Player" ){
//检测子弹打到了鱼上,那么鱼Hp -1
other.GetComponent<fishScript>().Hp -= damage;
Destroy (gameObject);
}
}
}

简单版捕鱼达人的制做相关推荐

  1. java版捕鱼达人----完整版补充

    java版捕鱼达人----使用IntelliJ IDEA搭建-初学者必看二 1.效果展示 2.渔网的产生 3.开始捕鱼啦 4.记录得分 1.效果展示 在上一篇博文中大家已经看到了捕鱼达人的初步展示画面 ...

  2. html5游戏开发 网页版-捕鱼达人游戏源码下载

    html5游戏开发 网页版-捕鱼达人游戏源码下载 来玩一把! 转载于:https://www.cnblogs.com/jsfoot/p/3215371.html

  3. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  4. 捕鱼达人单机版 3D捕鱼达人 免费捕鱼达人 无限金币

    波克捕鱼达人完美移植街机版捕鱼达人,游戏场景采用3D制作,各种鱼类游动姿态自然 ,炮弹打击粒子效果华丽,打击感强烈,各种鱼类游动姿态自然,炮弹打击粒子效果华丽,副本模式全新开启,完美的RPG竞技模式! ...

  5. 绝对实践,教你如何成功修改捕鱼达人ipad版 金币

    做晚终于成功修改了ipad版上的捕鱼达人,老婆很高兴. 一会儿贴出完整过程和需要的工具. 现在在实验室,没有截图.我把原理大概说一下,等回家了我把截图和相关工具整理后更新出来. 1 首先你的ipad要 ...

  6. 基于HTML5的捕鱼达人游戏网页版

    之前给大家分享了html5实现的水果忍者,愤怒的小鸟,中国象棋游戏.今天给大家分享一款捕鱼达人(fishjoy)网页版游戏的源码.可以在线玩也可以下载到本地.它使用html5技术和javascript ...

  7. html5 实现简单捕鱼达人部分功能

    html5确实强大,运用html5的元件<canvas>和js就能简单的完成捕鱼达人的部分功能. 1)代码如下 <!DOCTYPE HTML> <html> < ...

  8. 用cocos2dx做一个简单的单机捕鱼达人游戏(1)

    用cocos2dx做一个简单的单机捕鱼达人游戏(1) 我使用了cocos2dx 3.9版本和vs2017来开发 今天先做游戏开始界面 开始界面很简单,一个背景图,一个logo,3个button(三种登 ...

  9. Android测试工具ThreadingTest测试CSDN开源版手机游戏--捕鱼达人实例

    产品介绍 Threadingtest(简称"TT")是一款跨平台.多语言.集测试与辅助开发于一体的智能测试工具平台 1.智能化:连接开发与测试之间的穿线技术 第五代白盒覆盖率技术( ...

最新文章

  1. excel概率密度函数公式_干货|利用excel公式,快速对定量的化学检测方法进行测量不确定度的评定...
  2. Linux+apache+svn
  3. [css] 你了解css3的currentColor吗?举例说明它的作用是什么?
  4. 并查集——团伙(洛谷 P1892)
  5. (133)FPGA面试题-Xilinx FPGA Block RAM的三种写模式是什么?
  6. c语言内部超链接,HTML5中文本元素超链接的属性
  7. Oracle10g安装在RHEL AS 3
  8. spine骨骼动画基础一文通
  9. matlab中uigetfile函数的使用
  10. ftp下载,6步掌握ftp下载软件的使用方法
  11. 企鹅号不更新会封_我们如何为企鹅基金会筹集60,000美元
  12. (node)Warning: Accessing non-existent property ‘xxx‘ of module exports inside circular depen
  13. ATECC508A芯片开发笔记(一):初识加密芯片
  14. linux 查看内存 udimm rdimm,服务器UDIMM、LRDIMM、RDIMM三种内存如何区别
  15. Linux系统账号安全和登录控制(安全很重要)
  16. Echarts 坐标轴刻度间隔/全部显示
  17. Win10家庭版 误删winsock和winsock2注册表的解决方案
  18. 【公务员考试】结构化面试时间一般多长?
  19. 美年旅游_自由行_删除自由行
  20. houdini视图切换快捷键

热门文章

  1. c#通配符匹配符合条件文件名
  2. [历史随笔]帝国如风--元朝的另类历史
  3. 机器学习中的各种损失函数(Hinge loss,交叉熵,softmax)
  4. 焦虑症是精神病吗?缓解焦虑症的方法有哪些
  5. Java笔试面试题三(编程算法)
  6. uniapp引入字体图标库
  7. 计算并输出所有的玫瑰花数
  8. ticker定时器用法
  9. 【中级计量经济学】Lecture 5 自相关
  10. 16张扑克逻辑思维问题详解