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> < ...
随机推荐
- 用bootstrap结合php搭建MIS系统框架【转载】
bootstrap目前比较火,抽空简单了解一下 官方介绍:Bootstrap, from Twitter基于HTML,CSS,JAVASCRIPT的简洁灵活的流行前端框架及交互组件集 http://t ...
- hibernate之自定义持久化实现
- docker-compose 工具安装
centos 7 安装 之前测试过相关安装方法 pip python 安装不行 还是用下面这个办法搞定 curl -L https://github.com/docker/compose/releas ...
- timestamp ---自动更新修改时间 与 记录首次插入时间
自动更新修改时间: mysql> create table z(a int ,b timestamp on update current_timestamp); mysql> insert ...
- css考核点整理(十二)-能描述下你在项目中都用到了哪些符合逐渐增强和优雅降级的理念的技巧吗
能描述下你在项目中都用到了哪些符合逐渐增强和优雅降级的理念的技巧吗
- 使用附加导航(affix)实现内容切换
<!DOCTYPE html> <html> <head> <title> new document </title> <meta c ...
- CGLIB学习笔记
0 概述 CGLIB基于ASM实现.提供比反射更为强大的动态特性.使用CGLIB可以非常方便的实现的动态代理. 0.1 CGLIB包结构 net.sf.cglib.core 底层字节码处理类. ...
- mac 下安装安卓模拟器
mac下的安卓模拟器——bluestacks 下载:http://pan.baidu.com/s/1kVvZyYz 该安卓模拟器除了能网络下载apk,本地还能安装apk,但是与win版不同,安装不是那 ...
- Android开发手记(30) 触摸及手势操作
触摸操作在现在智能手机系统中起到举足轻重的作用,本文将对安卓中的触摸以及一些简单手势的操作进行简单的介绍. 1.触摸 首先是关于触摸的判断,有两种方法可以判断的触摸操作. (1)setOnTouchL ...
- ^(bitwise exclusive Or).
一个数,进行异或同一个数两次,将得到原来的数,例如: 6 ^ 4 ^ 4 = 6; 0000-0000-0000-0110 ^ 0000-0000-0000-0100 ---------------- ...