unity3d 场景间数据传递
在游戏项目中,常常会使用到用户信息,获取信息当然可以从数据库中获取。但是对场景多的游戏这样做是不正确的,那么我我们就需要再第一次获取用户信息之后,
同时在其它的场景中共享用户数据,避免对服务器增加负担。好的!现在上图
首先新建第一个场景,命名为one
场景中物体如下:
接着我们新建第二个场景:two
其中场景对象如下:
这样做一个简单的区分,以便测试。
制作思想:
在前一个场景中,添加新的EmptyGameObject,同时制作脚本PersistentData.cs,在脚本中添加一些全局变量。在游戏加载下一个场景的时候,使用
Object.DontDestroyOnLoad()方法进行保护。使得有关的数据得以持久化!
1、PersistentData.cs
using UnityEngine;
using System.Collections;
public class PersistentData : MonoBehaviour {
public string userName="";
public string pwd="";
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Application.isLoadingLevel)
Object.DontDestroyOnLoad(gameObject);
}
}
在场景one中,添加空游戏物体,同时附加如上的代码.
同时呢,在场景的相机上添加user.cs文件
代码如下
using UnityEngine;
using System.Collections;
public class user : MonoBehaviour {
public float width=0.0f;
public float height=0.0f;
public string levelName="";
private string _name="";
private string _pwd="";
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI() {
GUILayout.BeginVertical(GUILayout.Width(200));
GUILayout.BeginHorizontal(GUILayout.Width(200));
GUILayout.Label("Name:");
_name= GUILayout.TextField(_name,10);
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal(GUILayout.Width(200));
GUILayout.Label("passWord:");
_pwd= GUILayout.TextField(_pwd,10);
GUILayout.EndHorizontal();
if (GUILayout.Button("login",GUILayout.Width(80),GUILayout.Height(60)))
{
//save data 保存数据到PersistentData的变量中
GameObject.Find("data").GetComponent<PersistentData>().userName = _name;
GameObject.Find("data").GetComponent<PersistentData>().pwd = _pwd;
Application.LoadLevel("two");
}
GUILayout.EndVertical();
}
}
然后在场景two中,给相机添加上PersistentDataGetting.cs文件
代码如下:
using UnityEngine;
using System.Collections;
public class PersistentDataGetting : MonoBehaviour {
private string userName="";
private string pwd="";
private PersistentData pdScript;
// Use this for initialization
void Start () {
pdScript = GameObject.Find("data").GetComponent<PersistentData>();
userName = pdScript.userName;
pwd = pdScript.pwd;
}
// Update is called once per frame
void Update () {
}
void OnGUI(){
//用户信息显示
GUI.Label(new Rect(Screen.width/2,Screen.height/2,100,30),userName);
GUI.Label(new Rect(Screen.width/2, Screen.height/2+40,100,30), pwd);
}
}
最终效果:
结束语:
当然数据持久话的方式还有很多,这是其中一种,各有各的优缺点,要根据你存储的数据而定了。
欢迎大家加入梦想之家 游戏讨论群 63438968 175492844
Enjoy!
unity3d 场景间数据传递的更多相关文章
- Unity场景间数据传递方法
在游戏开发中,会常用到场景间传递数据的方法(比如关卡选择,过关后自动回到关卡选择界面,以动画方式解锁下一关),目前研究了三种: 1. 使用DontDestroyOnLoad方法: (1)在场景A中做个 ...
- 详细介绍ASP.NET页面间数据传递的使用方法
源码:http://www.jinhusns.com/Products/Download/?type=xcj 在ASP.NET中,页面间数据传递的方法有很多.下面为大家总结一下,页面间数据传递的方法. ...
- ASP.NET页面间数据传递的方法<转>
ASP.NET页面间数据传递的方法 作者: 灰色的天空2 来源: 博客园 发布时间: 2010-10-28 11:06 阅读: 822 次 推荐: 0 原文链接 [收藏] 摘要:本 ...
- ASP.NET中实现页面间数据传递的方法
说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是向Session中添加的东西太多会增加服务器的压力,页面间数据传递,数据的作用范围越小越好. ASP.NET页面间数据传递 ...
- ASP.NET 页面间数据传递的方法
在做WEB开发时,很多地方会涉及到页面间的数据传递.这几天在完善教务基础系统,遇到了这个问题,上网查了一些资料,现总结如下: 说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是 ...
- [转]Angular2-组件间数据传递的两种方式
本文转自:https://www.cnblogs.com/longhx/p/6960288.html Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一 ...
- Java并发:线程间数据传递和交换
转自:https://www.cnblogs.com/java-zzl/p/9741288.html 一.通过SynchronousQueue方式实现线程间数据传递: 线程A与线程B共同持有一个Syn ...
- Angular2-组件间数据传递的两种方式
Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一种是用单例模块传递:有两个元数据具有传递数据的功能:inputs和outputs. 一.元数据传递 1 ...
- vue 组件间数据传递
父组件向子组件传值 方法一: 子组件想要使用父组件的数据,需要通过子组件的 props 选项来获得父组件传过来的数据. 1.父组件parent.vue中代码: <template> < ...
随机推荐
- Open XML Format SDK引用
Excel的便捷使得其在非开发人员的办公中非常流行,而Excel确实也提供了很多有用的功能.很多时候我们还需要以Excel为数据源来进行处理或者将Excel作为模板来生成一些报表.在Open XML ...
- C. Tourist Problem
http://codeforces.com/problemset/problem/340/C 赛时没想出赛后却能较快想出深深的教育自己做题一定要静下心来,不要轻易放弃,认真思考,不要浮躁着急,不要太容 ...
- ZFS+Dtrace+Zones+KVM=SMARTOS + dtrace 详细文档
https://smartos.org/ http://dtrace.org/guide/chp-io.html http://blog.csdn.net/babyfacer/article/deta ...
- 关于struts2中action请求会执行两次的问题
关于struts2中action请求会执行两次的问题 在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...
- Java设计模式01:设计模式的 分类 和 设计原则
一.总体来说设计模式分为三大类: 创建型模式:对象的创建. 创建对象本身是比较耗时的操作,所以我们这里专门找人来帮我们创建对象,我们根据经验总结出来的设计成熟的思路模式. 结构型模式:对象的组成(结构 ...
- Jquery方法load之后导致js失效解决方法
Jquery方法load之后导致js失效解决方法 >>>>>>>>>>>>>>>>>>> ...
- 彻底删除mysql的方法(有隐藏文件)
1.建议使用360进行卸载,可以彻底卸载软件 2.360会提醒删除注册表 3.这个隐藏文件要删除掉 在 C:\Documents and Settings\ 路径下搜索 MySQL 文件夹(默认隐藏的 ...
- MongoDB 重启之后无法连接问题
困扰了一段时间的问题终于知道原因了,每次重启MongoDB服务器就会导致无法启动服务. 通过观察发现,每一次重启完了之后,MongoDB 会进行内存数据加载,而原来服务器内存配置过低,因此导致内存加载 ...
- iOS CGContextRef 画图小结
CGContextRef context = UIGraphicsGetCurrentContext(); //设置上下文 //画一条线 CGContextSetStrokeColorWithColo ...
- c# web 删除时弹出提示框
方法1: 在控件中增加属性 <asp:Button ID="btnSub" runat="server" Text="提交" oncl ...