Five-unity3D火箭鼠小游戏

2023-11-27 16:30
文章标签 小游戏 unity3d 火箭 five

本文主要是介绍Five-unity3D火箭鼠小游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天的游戏可以玩了,仍存在的问题:
1.激光不关闭
2.飞鼠下落状态并不是fall
3.有“!”错误提示

新内容:

1.飞鼠的死亡模式:碰到障碍物会死亡(图片-动画)
2.奖励模式:金币的随机放置(图层、脚本编写)
3.记录模式:屏幕角上记录获取到的金币数量(GUI、文字美化)
感想:今天是补课的倒数第二天,一个跑酷类小游戏已经大体成型,想了想如果把时间挤在一起做的话大概需要个一两天吧。

详细分析:

1.animator界面的操作和逻辑分析

比如新增变量die,fall后怎么连线呢?

这里写图片描述

连线后的设置不是按钮!而是点击线条!具体逻辑看你了

这里写图片描述

关键点1,下图勾上 碰撞体才能被检测到

这里写图片描述

关键点2,下面增加的变量是为了控制die,注意执行前要选中!选中!

这里写图片描述

关键点3,暂时不知道什么问题了,但是你经常忘记设置这里:

这里写图片描述

2.激光和金币的随机出现(像无穷无尽的房间一样~所以代码可以借鉴)
以下是控制本游戏中需要随机出现的上述三者 完整代码:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Room : MonoBehaviour {public GameObject[] availableRooms; //数组变量  public List<GameObject> currentRooms; //list是链表,GameObject是一种类,currentRooms是当前房间private float screenWidthInPoints;//is当前屏幕的宽度//以下随机金币public GameObject[] avaliableCoins;public List<GameObject> coins;public float objectsMinDistance = 5.0f; //随机创建的一坨金币群的 水平方向的最小和最大距离public float objectsMaxDistance = 10.0f;public float objectsMinY = -1.4f ;  //金币群的最大、最小高度public float objectsMaxY = 1.4f ;public float objectsMinRaotation = -45.0f;  //金币群的旋转幅度public float objectsMaxRaotation = 45.0f;//以上void Start () {float height = 2.0f * Camera.main.orthographicSize;//获取当前视图范围的高度screenWidthInPoints = height * Camera.main.aspect; //以上获取了长宽比 ,注意都是针对屏幕而不是背景图尺寸什么的} //当前屏幕的宽度 --he saysvoid addCoins(float lastObjectX) //金币位置{int randomCoinIndex = Random.Range(0,avaliableCoins.Length);GameObject coin = (GameObject)Instantiate(avaliableCoins [randomCoinIndex]);float coinPositionX = lastObjectX + Random.Range(objectsMinDistance,objectsMaxDistance);float randomY = Random.Range(objectsMinY,objectsMaxY );coin.transform.position = new Vector3 (coinPositionX,randomY,0);float rotation = Random.Range(objectsMinRaotation,objectsMaxRaotation);//rotation定旋转角度coin.transform.rotation = Quaternion.Euler(Vector3.forward*rotation);coins.Add(coin);}void IsGeneratorCoinsAndLaser()//金币和激光 {List<GameObject> DeleteCoinsAndLaser = new List<GameObject>();//保存将要删掉的//bool addRooms = true;//判断是否增加float playerX = transform.position.x;//获取飞鼠的位置的X轴float DeleteCoinsAndLaserX = playerX - screenWidthInPoints;//坐标计算float AddCoinsAndLaserX = playerX + screenWidthInPoints;float farCoinsAndLaserIndex = 0;foreach(var coin in coins)                  //var:任何 (对于任何在coins 里面的coin{float coinX = coin.transform.position.x;  //定义coinX来获取当前X轴坐标farCoinsAndLaserIndex = Mathf.Max(farCoinsAndLaserIndex,coinX);//返回最大值if (coinX < DeleteCoinsAndLaserX)         //判断当前获取的金币的X轴位置DeleteCoinsAndLaser.Add(coin);}foreach(var coin in DeleteCoinsAndLaser)  {coins.Remove (coin);Destroy (coin);               //这几处理是 因为不能直接删原来的链表}if (farCoinsAndLaserIndex < AddCoinsAndLaserX) //判断是否需要增加金币了addCoins(farCoinsAndLaserIndex);}void addRoom(float farRoomID)//farRoomID最远的房间,也就是最右侧的,对应着,同时删除的当然也就是最左边的{int randomRoomIndex = Random.Range(0,availableRooms.Length); //确定了room的选择范围GameObject room = (GameObject)Instantiate(availableRooms [randomRoomIndex]);float roomWidth = room.transform.FindChild("floor").localScale.x;//当前房间的宽度..//FindChild子。。"floor"和你的具体重命名一致float roomCenter = roomWidth * 0.5f + farRoomID; //中心点roomCenter = roomWidth * 0.5f一般是它房间的一半。+ farRoomID是另外一个房间多出来的部分room.transform.position = new Vector3 (roomCenter,0,0);//定义房间,然后拿上面值来用currentRooms.Add(room);}       void IsGeneratorRoom(){List<GameObject> DeleteRoom = new List<GameObject>();//保存将要删掉的房间bool addRooms = true;//判断是否增加房间float playerX = transform.position.x;//获取飞鼠的位置的X轴float DeleteRoomX = playerX - screenWidthInPoints;//坐标计算float AddRoomX = playerX + screenWidthInPoints;float farRoomIndex = 0;foreach (var room in currentRooms)//判断哪些房间需要删除{float roomWidth = room.transform.FindChild("floor").localScale.x;float roomStartX = room.transform.position.x - roomWidth * 0.5f;float roomEndX = roomStartX + roomWidth;//下面是判定的核心环节 (用if语句:  if(roomStartX > AddRoomX) addRooms = false;if(roomEndX < DeleteRoomX) DeleteRoom.Add(room);farRoomIndex = Mathf.Max(farRoomIndex,roomEndX); //知道了新增加的房间的需要的长度}foreach (var room in DeleteRoom){currentRooms.Remove(room);         Destroy(room);}if (addRooms){addRoom(farRoomIndex);}}void FixedUpdate(){IsGeneratorRoom();IsGeneratorCoinsAndLaser();}void Update () { }
}

栏内设置:

这里写图片描述

Script 脚本
序号1“所有房间”,随着所需点击更改Size值,控制着Element会出现多少个,然后可以把预制件房间拉进去了。
序号2“当前金币”,从脚本可以看出金币和其他类似物件可以通用代码(比如激光就直接拉进去了),因此只需更改Size,
比如Size=2,下面出现了Element0,Element1,分别把对象金币和激光拖进去。如果你想要其他装饰品,可以直接更改Size再加入,简单易行。
Coins 是金币的尺寸啥的。

3.游戏框外的金币统计行
对用户可见的当然需要GUI咯,主要是一些美观,绑定在哪个对象?自然也是mouse
以下是mousecontrol脚本全部代码:

using UnityEngine;
using System.Collections;public class mousecontrol : MonoBehaviour {public float jetpackFore = 75.0f; //定义一个力public float movespeed = 5.0f;public Transform groundCheckTransform; //+存储刚才创建的黄色新private bool grounded; //判断是否落地public LayerMask groundCheckLayerMask;//保存...Animator animator;//创建一个新动画  /以上fly and runpublic ParticleSystem jetpack;public Texture2D coinIocn;  //保存硬币图标private bool dead = false;//飞鼠死亡private uint coins = 0;void Start () {animator = GetComponent<Animator>(); //对它进行初始化操作}void Update () {}void OnGUI(){DisplayCoin ();}//收集金币数量void CollectCoin(Collider2D collider)//碰撞体做形参,Collider2D:二维碰撞体{coins++;Destroy(collider.gameObject); //吃掉的金币在屏幕上消失}void DisplayCoin(){Rect coinIconRect = new Rect (10,10,32,32);//定义一个矩形,写下位置GUI.DrawTexture (coinIconRect,coinIocn);GUIStyle style = new GUIStyle();style.fontSize = 30;style.fontStyle = FontStyle.Bold;style.normal.textColor = Color.yellow;Rect LabelRect = new Rect (45,10,60,32);GUI.Label(LabelRect,coins.ToString(),style);}//以下控制死亡void HitbyLaser(Collider2D laserCollider){dead = true;animator.SetBool("dead",dead);}//以上void OnTriggerEnter2D(Collider2D collider) //激光碰撞体和飞鼠的圆形碰撞体{//以下金币if (collider.gameObject.CompareTag("Coins")) //CompareTag匹配,多少个种类碰撞体就用多少个CompareTag,CollectCoin (collider);//判断碰到的碰撞体是金币,则elseHitbyLaser(collider);//如果不是金币,则是激光,就要执行其他}void UpdateGroundedStatus()//更新老鼠状态/是否落地{grounded = Physics2D.OverlapCircle(groundCheckTransform.position,0.1f,groundCheckLayerMask);//OverlapCircle专门用来做碰撞检测的 //0.1f意半径0.1f的圆animator.SetBool("grounded",grounded);//来获取bool变量的额名字,注意符合一致}void AdjustJetPack(bool jetPackActive){jetpack.enableEmission =!grounded;//jetpack.emissionRate = jetPackActive? 300.0f:75.0f;//可略,燃料启动过程,注释后就不会再空中断火了,可是渐渐地过程还在么?改天自己测试}void FixedUpdate() //区别:上者不是按照固定时间间隔,而这个是。{bool ForceActive = Input.GetKeyDown(KeyCode.W);//设置鼠标操作,所以定义一个布尔型bool ForceActive1 = Input.GetKeyDown(KeyCode.D);bool ForceActive2 = Input.GetKeyDown(KeyCode.A);ForceActive = ForceActive && !dead; //判定飞鼠活着的状态下点击WAD键盘才能有用if (ForceActive){GetComponent<Rigidbody2D>().AddForce(new Vector2(0,jetpackFore));//Rigidbody2D是与你首页增加的那个钢体名字一致,这是操作钢体的}if (!dead)//判定死亡后就不再能够前进后退{if (ForceActive1){Vector2 newVelocity = GetComponent<Rigidbody2D>().velocity;  //想要人物动也就是钢体动,所以获取钢体newVelocity.x = movespeed;GetComponent<Rigidbody2D>().velocity = newVelocity;}if (ForceActive2){Vector2 newVelocity = GetComponent<Rigidbody2D>().velocity;  //想要人物动也就是钢体动,所以获取钢体newVelocity.x = - movespeed;GetComponent<Rigidbody2D>().velocity = newVelocity;}}UpdateGroundedStatus();//飞走的代码+执行1.8AdjustJetPack(ForceActive);//粒子的代码 +实参}
}

这篇关于Five-unity3D火箭鼠小游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/428003

相关文章

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

Unity3D在2D游戏中获取触屏物体的方法

我们的需求是: 假如屏幕中一个棋盘,每个棋子是button构成的,我们希望手指或者鼠标在哪里,就显示那个位置的button信息。 网上有很多获取触屏物体信息的信息的方法如下面代码所示: Camera cam = Camera.main; // pre-defined...if (touch.phase == TouchPhase.Bagan)){ // 如果触控点状态为按下Ray

Unity3D Shader详解:只画顶点或只画线框

在Unity3D开发中,Shader是控制渲染过程的关键组件,它允许开发者自定义物体的渲染方式。有时,为了特定的视觉效果,我们可能需要只渲染模型的顶点或者只显示其线框。下面,我们将详细探讨这两种效果的技术实现,并给出相应的代码示例。 对惹,这里有一个游戏开发交流小组,大家可以点击进来一起交流一下开发经验呀! 只画顶点 在Unity中直接“只画顶点”的概念可能不是非常直观,因为顶点本身只是模型

XTOJ 1173 Five Tiger

OJ题目:click here ~~ AC_CODE int grid[6][6];int dawuhu(){return grid[1][1]&& grid[1][5]&& grid[5][1]&& grid[5][5]&& grid[3][3];}int wuhu(){int ret = 0;for(int i = 1;i <= 3;i++)for(int j = 1;j <=

Unity3D ARPG(动作角色扮演游戏)设计与实现详解

动作角色扮演游戏(Action Role-Playing Game, ARPG)结合了传统角色扮演游戏(RPG)的深度与动作游戏(Action Game)的即时反应和流畅战斗体验。Unity3D 作为一款强大的跨平台游戏开发引擎,为开发者提供了丰富的工具和资源来创建高质量的 ARPG 游戏。本文将详细介绍如何使用 Unity3D 设计和实现一个基本的 ARPG 游戏,包括技术选型、游戏架构、关键系

【简介】固体火箭发动机装药设计新方法:装药逆向设计

固体火箭发动机装药设计新方法:装药逆向设计 🚀固体火箭发动机 固体火箭发动机通常由点火器、燃烧室、喷管和装药组成。不同的装药药型(如星型、车轮型、翼柱型)会产生不同的推力~时间曲线,是设计人员重点关注的问题。 🎇装药逆向设计 装药设计是固体火箭发动机设计的核心环节,直接决定发动机的设计水平。为了满足导弹或火箭总体分配给固体火箭发动机系统的诸多指标(如总冲、工作时间、装填分数、推力性

(转)Unity3D 三种移动方式

第一种移动方式: 首先在方法外声明刚体:private Rigidbody body; 为了明显,可定义一个速度:public float speed; void Start(){ speed = 10f; body = GetCompoente(); } void Update(){ //第一种移动方式:直接修改Transform属性 //如果是球体,自身不会旋转 if(In

贪吃蛇的小游戏--用C语言实现

贪吃蛇的小游戏–用C语言实现 游戏背景 贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。 实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能 (上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分 • 蛇⾝加速、减速 • 暂停游戏 技术要点 C语⾔函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32

Unity3D中控制3D场景中游戏对象显示层级的详解

前言 在Unity3D开发中,控制游戏对象的显示层级(也称为渲染顺序或渲染层级)是一个常见的需求,特别是在处理复杂的3D场景时,如角色、道具、UI元素等的可见性和渲染顺序的管理变得尤为重要。Unity通过几种不同的机制来实现对游戏对象显示层级的控制,包括使用Sorting Layers、Sorting Order以及Camera的Culling Mask等。下面将详细解释这些机制,并提供相应的代