简单版捕鱼达人的制做
来源:互联网 发布:网络写手在哪投稿 编辑:程序博客网 时间:2024/05/01 18:26
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);
}
}
}
- 简单版捕鱼达人的制做
- 【IOS】《捕鱼达人》的简单实现(一)
- 简单启动窗体的制做
- 简单启动窗体的制做
- 打鱼机,捕鱼游戏, 捕鱼达人
- 捕鱼达人单机版 3D捕鱼达人 免费捕鱼达人 无限金币
- html5 实现简单捕鱼达人部分功能
- 捕鱼达人---自己封装版
- 关于《捕鱼达人》
- 捕鱼达人
- Unity3D笔记---简单的捕鱼小游戏
- 程序员玩捕鱼达人
- 捕鱼达人(一)
- 捕鱼达人(二)
- 捕鱼达人(三)
- 捕鱼达人(四)
- 捕鱼达人(五)
- html5捕鱼达人游戏
- 基于matlab的快速傅里叶(fft)变换以及滤波设计
- java web开发模式
- 欢迎使用Markdown编辑器写博客
- 学习笔记Control.Tag 属性
- 简单了解celery-分布式异步任务调度系统
- 简单版捕鱼达人的制做
- 非专业人士的软件编程
- 欢迎使用CSDN-markdown编辑器
- 多态概念总结
- android ListView 工作原理
- Volley源码解析
- 各种路径遍历二维数组
- bzoj1411: [ZJOI2009]硬币游戏 找规律神题
- 算法学习之回溯法(leetcode 140. Word Break II)