写在前面:项目的关卡功能和数据库基础实现是小组其他成员实现的部分,这里作为学习总结。关卡功能块使用C#语言编写脚本,在Unity3D游戏引擎的环境中实现,数据库功能块使用PHP作为服务端获取MySQL中的数据。


按键决定碰撞盒的触发 碰撞消除物体增减值
按钮实现的场景切换
一、碰撞盒
  • 按键决定碰撞盒的触发。
  • 物体有时障碍阻碍玩家前进,有时则是玩家通过一个悬崖的必须道具。
  • 按键不同决定了这些物体的碰撞盒是否触发,如按J键时星星的碰撞盒不触发,按K键时星星的碰撞盒触发,玩家可以利用星星来跳过障碍物。
  • 关键类:↓
  1. private void OnCollisionEnter(Collision collision)  两个物体的碰撞盒互相接触所触发的事件,如销毁物体,切换场景等。
  2. Start,bird,duck   按键决定碰撞盒的触发。如按J键时星星的碰撞盒不触发,按K键时星星的碰撞盒触发。
  3. tree   当树碰到tag为Player的人物时,跳转场景。或在第三关时人物碰到tag为tree的树时跳转到结局动画。
  4. Animal   当人物碰到tag为animal的物体时,物体销毁。
  • 思路:伪代码 ↓

if (按下J键) {

背景图片切换到changeSprite01

} {

星星的碰撞盒被触发tempCo.isTrigger = true,鸟和鸭子的碰撞盒不被触发

} else if (按下K键) {

背景图片切换到changeSprite02

} {

鸟的碰撞盒被触发,星星和鸭子的碰撞盒不被触发

} else if (按下L键) {

背景图片切换到changeSprite03

} {

鸭子的碰撞盒被触发,鸟和星星的碰撞盒不被触发

}

//关键代码片段  star.cs
using UnityEngine;
using System.Collections; public class star : MonoBehaviour {
private Collider[] starColliders;
void Start () {
starColliders = GetComponents<Collider>();
} void Update () {
if (Input.GetKeyDown(KeyCode.K))
{
foreach (Collider tempCo in starColliders)
{
tempCo.isTrigger = true;
}
}
else if (Input.GetKeyDown(KeyCode.J))
{
foreach (Collider tempCo in starColliders)
{
tempCo.isTrigger = false;
}
}
}
}
二、增减值
  • 碰撞消除物体。
  • 物体加上刚体和碰撞盒,触发者加上Tag。
  • 被消除物体根据接触物体的Tag来判断是否destroy自己。
  • 每杀一只动物,玩家的生命值和杀戮值都上升一点。
  • 当生命值掉到0点的时候,玩家死亡。
  • 杀戮值不同游戏的结局也不同。
  • 关键类: ↓
  1. DontDestroyOnLoad(transform.gameObject)   物体不可摧毁,加在人物上,人物死亡后销毁人物。

  2. kills   每杀一只动物,玩家的生命值和杀戮值都上升一点。当生命值掉到0点的时候,玩家死亡。

  3. canvas   Canvas成为人物的子物体,与人物一样不可摧毁。从第一关开始携带的分数,只要人物不死亡就能一直携带到结局。

  4. void SetCountText()   将canvas上的text与生命,杀戮等数值联系起来。
  • 思路: 伪代码 ↓

if (碰到的物体tag为animal) {

销毁animal物体,生命值+1和杀戮值+1

} else if (碰到的物体tag为Dead) {

生命值-1

if (生命值= 0) {

跳转到dead场景 销毁人物

}

} if (杀戮值=0) {

跳转到好结局;

} else if (杀戮值=1或者杀戮值=2) {

跳转到正常结局 ;

} else if (杀戮值= 3) {

跳转到坏结局;

}

//关键代码片段  kills.cs → OnCollisionEnter
private void OnCollisionEnter(Collision mCollider)
{
//如果碰到的是动物,则动物消失,数目加1;
if (mCollider.gameObject.tag == "animal")
{
Destroy(mCollider.gameObject);
//Add one to the current value of our count variable.
count = count + ;
count01 = count01 + ;
//Update the currently displayed count by calling the SetCountText function.
SetCountText(); }
else if (mCollider.gameObject.tag == "Dead")
{
count01 = count01 - ;
SetCountText();
if (count01 == )
{
Application.LoadLevel("dead");
Destroy(gameObject);
}
}
else if (mCollider.gameObject.tag == "tree")
{
Destroy(gameObject);
if (count == )
{
Application.LoadLevel("gd");
}
else if (count == || count==)
{
Application.LoadLevel("ne");
}
else if (count == )
{
Application.LoadLevel("be");
}
}
}
void SetCountText()
{
countText.text = "杀戮值: " + count.ToString();
countText01.text = "生命值: " + count01.ToString();
}
public void CreateScores(string id,int count,int count01){
WWWForm form = new WWWForm ();
form.AddField ("idPost", id);
form.AddField ("scorePost", count);
form.AddField ("lifePost", count01); WWW www = new WWW (CreateScoresURL,form);
} void Awake()
{
DontDestroyOnLoad(transform.gameObject);
}
}
三、场景
  • 按钮实现的场景切换。
  • 给按钮加上public void Click_test() { } 的代码,将按钮与代码联系在一起。
  • 点击按钮触发场景切换,或是通过碰撞盒实现场景的切换。
  • 关键类:↓
  1. public void Click_test()   点击按钮,切换游戏场景

  2. Application.LoadLevel("dead")    切换场景代码

  3. OnCollisionEnter   碰撞切换场景
  • 思路:伪代码↓

public void点击按钮{

Application.LoadLevel(切换到另一场景);

}

Private void OnCollisionEnter(Collision collision) {

if(碰到了tag为Player的物体) {

Application.LoadLevel(“vi切换到另一场景");

}

}

//关键代码片段  OnCollisionEnter
private void OnCollisionEnter(Collision collision)
{ if (collision.gameObject.tag == "Player")
{
Debug.Log("dead");
changeSpriteRenderer.sprite = changeSprite;
Destroy(gameObject, lifeTime); }
}
四、Unity连接数据库
  • 思路:
  1. 用php语言获取localhost的用户名,密码和数据库 →  $servername = "localhost";  $server_username = "root";  $server_password = "";  $dbName = "game";
  2. $_POST[]  获取unity上数据进行存储  →  $id = $_POST["idPost"];
  3. 连接mysql  →  $conn = new mysqli($servername, $server_username, $server_password, $dbName);
  4. 然后用insert into 将数据插入到数据库中 $result 用来检测数据是否正常插入到数据库中,正常显示Everything ok. 否则 显示 there was an error 如果与数据库连接失败则显示Connection Failed. 并返回错误原因。
//关键代码片段  InsertUser.php
<?php
$servername ="localhost";
$server_username ="root";
$server_password = "";
$dbName = "game"; $id = $_POST["idPost"];
$password = $_POST["passwordPost"];
//$score = $_POST["scorePost"];
//$life = $_POST["lifePost"];
//$schedule = $_POST["schedulePost"]; $conn = new mysqli($servername,$server_username,$server_password,$dbName); if(!$conn){
die("Connection Failed." . mysqli_connect_error());
} $sql = "INSERT INTO gamer (id , password)
VALUES('".$id."', '".$password."')";
$result = mysqli_query($conn,$sql); if(!result) echo "there was an error";
else echo"Everything ok.";
?>
五、获取Unity中的信息
  • 思路:
  1. 在cs文件中,先用string CreateUserURL = “localhost/数据库名/.php文件” 获取本地数据库位置。

  2. 用CreateUser(string ,sring) 函数获取unity中,想要传输到数据库的信息。

  3. 通过unity中内置的  WWWForm 类 和   WWW类,运用  WWWform.AddField (String,String)  方法  通过post的表单提交方式把表单参数传递给服务器端的逻辑业务层。

  4. 在每次数据更新后,记录键盘输入的信息,将它们传送给CreateUser函数。

//关键代码片段  dl.cs → CreateUser
public void CreateUser(string id,string password){
WWWForm form = new WWWForm ();
form.AddField ("idPost", id);
form.AddField ("passwordPost", password); WWW www = new WWW (CreateUserURL,form);
}

版权声明:本文原创,非本人允许不得转载

【Salvation】——关卡功能&数据库基础实现的更多相关文章

  1. 数据库基础,表及SQL语句

    数据库基础及T-SQL语句 字符类型: int 整型 float 小数 double 小数 varchar(20) 字符串 bit 布尔型数据 datetime 日期时间类型 text 长文本 (以下 ...

  2. Oracle 数据库基础——安装

    一.数据库基础知识 1.概念 数据库全称数据库管理系统,简称DBMS,是一种在计算机中,针对数据进行管理.存储.共享的一种技术. 2.分类 数据库的发展过程中,按逻辑模型可分为以下几种: 3.关系型数 ...

  3. oracle系列--第一篇 数据库基础

    第一章 数据库基础 1.1 数据管理概述 1.1.1 什么是数据管理 与我们人类相比,计算机的最大优势就是能够高速.精准地运行,其运行的过程就是执行程序代码和操作指令.处理数据的过程.可以说,数据处理 ...

  4. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  5. SQL数据库基础知识-巩固篇<一>

    SQL数据库基础知识-巩固篇<一>... =============== 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用 ...

  6. MySQL数据库基础

    MySQL数据库基础 本文的所有操作是基于CMD环境,MySQL通过在命令行中输入SQL语句对数据库进行操作.配置问题可参考<打通MySQL的操作权限>中的内容,该文算是针对前期的环境配置 ...

  7. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  8. 【Python全栈-数据库】数据库基础

    数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...

  9. Datawhale MySQL 训练营 Task1:MySQL 安装与数据库基础

    安装 平台 Windows X64; MySQL: 直接去 MySQL 官网 下载:点击即可安装:安装过程中可能会要求 python3.7; 可以去安装一个 python3.7; 可视化工具:Navi ...

随机推荐

  1. 部署maria数据库到linux(源码编译安装)

    maria数据库是mysql原作者另外开发的一个版本,使用方法和mysql一样,可以直接用mysql的库连接. 在这下载包并解压: https://mariadb.org/download/ 建立数据 ...

  2. mongodb 3.4 集群搭建升级版 五台集群

    最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...

  3. 关于sping quartz定时执行理解与思考

    转载请注明原创出处,谢谢! 一直以为自己理解spring quartz,忽然最近几天发现自己理解的不对,在4月18号的时候,我执行了一个spring quartz的计划如下: 1 0 0 */3 * ...

  4. 翻译连载 | 第 9 章:递归(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  5. 翻译:MLAPP(2.2节 概率论简要回顾)

    笔者:尝试翻译MLAPP(Machine Learning: a Probabilistic Perspective)一书,供机器学习的学者参考,如有错误理解之处请指出,不胜感激!(如需转载,请联系本 ...

  6. ionic2+Angular2:套接口明细步骤,以登录功能为例

    1.在app.module.ts引用HttpModul,并在imports内引用.截图如下:   2.在src目录下新建http服务.命令行:ionic g provider HttpService ...

  7. NOIP2017SummerTraining0712

    个人感受:打了三个小时不到的第一题,然后也就没有多少时间去搞第二题了,特别是第二题还看到了期望这样的东西,这个难以理解,第三题的树分治,myx大佬说50分好拿,但是我觉得也挺难拿的. 单词检索 时间限 ...

  8. Deep learning:一(基础知识_1)

    本文纯转载: 主要是想系统的跟tornadomeet的顺序走一遍deeplearning; 前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程 ...

  9. vue2购物车ch1-(安装依赖、简单配置、 axios获取api的模拟数据)

    0--项目说明 说明此项目源自某课网购物车教程,但是在开发过程中,发现在开发过程中用的还是 vue-resource(宣布不更新的类$.ajx()插件),为了以后的发展使用axios.js,详情参考 ...

  10. asp.net微软图表控件使用示例

    <configuration> <system.webServer> <handlers> <remove name="ChartImageHand ...