精华内容
下载资源
问答
  • 天猫,自从有了淘宝,就出了各种各样的网购平台,天猫淘宝京东三个算是国内的三个大大大大的巨头了。很多天猫淘宝卖家,或者图片爱好者,想要保存天猫图片,该怎么去保存呢,怎么才能保存...登录后,复制的链接粘...

    天猫,自从有了淘宝,就出了各种各样的网购平台,天猫淘宝京东三个算是国内的三个大大大大的巨头了。很多天猫淘宝卖家,或者图片爱好者,想要保存天猫图片,该怎么去保存呢,怎么才能保存原来尺寸的天猫图片呢。
    前提条件
    下载一个下图高手
    电脑是win系统
    操作步骤
    进入天猫商城,找到你想要保存的产品在这里插入图片描述
    进入产品页面,准备复制它的链接在这里插入图片描述
    打开下图高手,第一次使用的宝贝们要先注册账号才能登录,在这里插入图片描述
    登录后,把复制的链接粘贴到地址栏中,在这里插入图片描述
    将下图选项中的“下载主图”打勾起来,在这里插入图片描述
    选择好保存位置,单击立即下载在这里插入图片描述
    下载完了,打开文件夹就可以看到在这里插入图片描述
    双击一张图片进去查看,是原图在这里插入图片描述

    展开全文
  • 那看到喜欢的微博视频,想保存下来怎么办呢?微博视频用右键是无法直接保存的,这里小编给大家介绍一个简单可行的方法。 首先,我们打开微博网页端。 然后进入自己喜欢的视频播放界面,复制该网页的链接地址。 ...

    微博近几年都很火,大家乐于在微博分享自己的生活,上传照片、视频等。那看到喜欢的微博视频,想保存下来怎么办呢?微博视频用右键是无法直接保存的,这里小编给大家介绍一个简单可行的方法。

    首先,我们打开微博网页端。

    然后进入自己喜欢的视频播放界面,复制该网页的链接地址。

    下载一个固乔视频助手,并且打开短视频下载界面。

    把微博视频播放链接粘贴进去,并且点击立即下载。

    下载完成后,打开文件夹,视频文件用标题保存,保存的都是高清原视频。

    这样下载微博视频就是非常方便了,小白都可以操作的,简单快捷。

    展开全文
  • 电脑系统:WINDOWS 7 SP1 手机系统:ANDROID 2.3.3 方法1(使用MirrorOp无线连接) MirrorOp是一款商用软件,这里介绍的是“试用版”的效果 官方网站: http://www.mirrorop.com/ 下载链接: ...
    http://blog.csdn.net/pipisorry/article/details/21294581
    安卓手机屏幕在电脑上实时同步显示(包括无线与USB有线方式含DLNA)
    设备的环境如下
    电脑系统:WINDOWS 7 SP1
    手机系统:ANDROID 2.3.3

    方法1(使用MirrorOp无线连接)
    MirrorOp是一款商用软件,这里介绍的是“试用版”的效果
    官方网站:
    下载链接:
    密码:bcf4

    提示1:使用该软件需要ROOT授权
    提示2:WINDOWS 7的用户无论使用工作网络或家庭网络都可以,实测两者皆可用,无需特别设置,即使原来为公用启动媒体流之后会自动变成家庭网络或工作网络(Vista用户一定要用专用网络才可以)
    提示3:通过网线连接无线路由器的,有兴趣的朋友可以尝试电脑也是无线连接的,反正保证电脑与手机在同一个局域网内就可以了
    提示4:当手机与电脑连屏时,可以使用鼠标和键盘对手机进行操作(例如玩手机游戏),画面尚算流畅,虽然还是不如直接在手机上面显示的流畅,但是效果比起其他有线连接的方法实在好太多了
    提示5:该软件只能同步显示屏幕内容,声音在电脑上是直接听不到的,但是利用数据线,一头连着手机的耳机位置,一头连着电脑的MIC麦克风位置,再在电脑上进行麦克风设置,打开【控制面板】->【声音】->【录制】 -> 【麦克风】属性 ->【侦听】-> 【侦听此设备】,这样从电脑的音箱也能同步听到声音
    提示6:该软件通过手机上的视频软件(例如优酷)是可以看视频的,但是看本手机录制的视频,或使用拍照功能的时候则显示黑屏


    1、在电脑上安装mirrorop手机接收端(Windows Receiver)
    2、在手机上安装mirrorop手机发送端(Android Sender),可以通过豌豆荚等软件在手机上安装该程序
    3、安装完成后打开电脑上的MirrorOp Receiver,调整好该窗口的大小
    4、打开手机上的MirrorOp Sender
    5、点击接收端(如192.168.1.101),如果没有显示接收端,则点击搜索
    7、点击播放
    8、连接成功后,可以用鼠标进行其他操作,如果想退出,点击MirrorOp Sender里面的停止键即可
    备注:经实测,如果手机为接收端(在手机上安装MirrorOp Receiver for Android),电脑为发送端(在电脑上安装MirrorOp Sender for Windows),则在电脑播放视频的时候,电脑并没有传出声音(可能涉及是电脑的声音设置问题),声音从手机里传出,由于网络的问题(不知道是不是因为无线连接会断线丢包),手机显示的视频有时候会不间断地停止了一下之后又继续正常播放了,总体而言,手机还是能够同步视频的画面以及声音的,只不过相对于电脑有一点点的延慢而已


    方法2(使用手机自带的DLNA无线连接)

    首先,要实现该功能必须在WINDOWS系统上作如下的设置:
    1、点击【控制面板】里面的【管理工具】【服务】
    3、启动两个系统服务,分别是“SSDP Discovery”和“Windows Media Player Network Sharing Service”
    4、启动完服务之后,转到【控制面板】【网络和共享中心】【更改高级共享设置】
    6、启用网络发现,启用文件和打印机共享,启用公共文件共享,启用媒体流,如果未启动则点击【媒体流选项】
    7、启用媒体流,点击“全部允许”->点击“确定”
    这时,媒体流已打开,在控制面板里面所需的设置完毕



    手机通过DLNA协议默认访问的是电脑Windows Media Player里面的音乐、视频和图片等资源,Windows Media Player的设置如下所示:
    1、点击【开始菜单】【所有程序】【Windows Media Player】
    如果是初始状态未曾使用过,则选择“推荐设置”“转至媒体库”
    2、选择【媒体流】中的“允许远程控制我的播放器”Windows Media Player的资源设置完毕

    1、以手机Andriod版本4.0.4为例,确保WLAN打开后打开自带的DLNA程序
    2、添加手机要共享的文件,在电脑上即可看到手机上共享的文件
    2.3安卓系统要想在电脑上查看手机上的媒体资源以图片为例(4.0高版本的可以直接在电脑上的其他媒体库上访问到手机的媒体资源而无需再在手机上进行任何操作),操作如下所示:
    1、打开电脑上的Windows Media Player
    2、点击手机上的【相册】
    3、点击手机上的【MENU】选择播放器
    4、选择电脑上的Windows Media Player播放器
    5、在手机点击播放后,在电脑的Windows Media Player上会自动显示手机上的图片
    备注:虽然使用DLNA比使用MirrorOp软件看视频流畅多了,但是不知道是不是因为DLNA协议允许的格式有限,有许多RMVB格式的电影无法观看,只能观看AVI、WMA、MP4之类允许的有限格式
    听说Windows XP因为缺少系统组件所以无法直接使用DLNA,但是可以通过安装第三方软件来实现
    在通过DLNA使用电脑上面的播放器播放资源的时候,想用手机上的MirrorOp Sender连电脑会出错



    要使用接下来几种同步显示连接方法所需的相关配置说明如下
    (虽然手机无需ROOT且无需在手机上安装软件,但需要USB有线连接
    一、安装“jdk-7u40-windows-i586.exe”
    下载之前如果不清楚自己的系统是32位的还是64位的,可以按照以下步骤进行查看:
    【运行】“cmd”窗口里输入“systeminfo”“系统类型”这一项
    如果是32位的,会显示X86
    如果是64的,会显示X64
    二、“adt-bundle-windows-x86”
    打开网页http://developer.android.com/sdk
    点击下载Android SDK,解压后打开文件夹“adt-bundle-windows-x86”,以当前管理员权限用户运行程序“SDK Manager.exe
    打开程序后,安装如下图所示的两个文件
    1、勾选“Android SDK Platform-tools”和extras-“Google USB Driver”,点击“Install X packages...”

    在弹出的窗口中,选择“Accept License”,点击“Install”,即确定安装刚才勾选的文件
    如下图所示,等待程序下载并安装文件
    下载并安装完成后,程序会有一个如下图所示的安装日志提示,该窗口可关闭,如想再次查看,则点击上图最右下角的图标
    三、手机设置
    “menu-设置-应用程序-开发”-“USB调试”,确保手机连接电脑的状态是以“仅充电”的方式

    http://blog.sina.com.cn/s/blog_629b09800101n0r2.html

    提示:运行“ddms.bat”不需要打开“SDK Manager.exe”
    打开文件夹“android-sdk-windows”“tools”“ddms.bat”
    继续操作之后,会出现如下图所示的窗口,显示“Online”则表示手机与程序连接成功


    提示1:可以通过点击菜单“Reset adb”来重新连接手机


     提示2:可以通过点击菜单“Screen Capture...”来截取手机屏幕上的图片

    窗口操作解释:
    Refresh:刷新显示当前手机屏幕的内容
    Rotate:旋转显示当前手机屏幕的内容
    Save:以PNG格式保存当前手机屏幕的内容
    Copy:将当前手机屏幕的内容复制到粘贴板上
    Done:关闭窗口

    https://code.google.com/p/android/issues/detail?id=12141

    在向模拟器部署运行项目时碰到下面的异常: 

    Adb connection Error:An existing connection was forcibly closed by the remote host

    两种解决办法:
    1、在命令行下执行如下命令:adb kill-server、adb kill-server
    2、在任务管理器中,强制关闭adb.exe,然后重启模拟器




    方法3(使用Android Screen Monitor)
    Android Screen Monitor是Google官方的一款在电脑桌面上显示手机屏幕的东东

    得到“asm.jar”的文件复制到“...\adt-bundle-windows-x86\sdk\platform-tools”打开该文件
    在“Select a Android Device(选择一个安卓设备)”窗口里面显示的就是成功连接的手机设备序列号(设置->关于手机->设备信息),选择需要查看的手机,点击OK即可
    操作命令如下:CTRL+D 选择设备
    CTRL+P 纵向显示
    CTRL+L 横向显示
    CTRL+5 50%显示窗口
    CTRL+7 75%显示窗口
    CTRL+1 100%显示窗口
    CTRL+0 150%显示窗口
    CTRL+2 200%显示窗口
    CTRL+S 导出图像(*.png)
    CTRL+A 关于(程序版本)



    方法4(使用“Android Screen Capture”
    以下是运行软件“Andriod Screen Capture”,即Ashot,对文件夹“adt-bundle-windows-x86”所做的必要调整(题外话:之前没有做此调整,Ashot无法运作,即使手机连接“Dalvik Debug Monitor”是“Online”的状态)
    在文件夹“adt-bundle-windows-x86”内,将文件夹“platform-tools”里的“adb.exe”文件、“AdbWinApi.dll”文件和“AdbWinUsbApi.dll”文件复制到文件夹“tools”里面  
    提示:运行程序“Andriod Screen Capture”不需要打开“ddms.bat”
    打开网页http://sourceforge.net/projects/ashot/,下载“Andriod Screen Capture”安装
    “开始”“所有程序”“Android Screen Capture”打开,第一次操作的话,系统会弹出一个对话框要你指定“adt-bundle-windows-x86\sdk”文件夹所在的路径
    提示:该对话框如果未自动弹出,则点击菜单“File”中的“Set Android SDK Folder”进行设置
    特别提示:要卸载“Andriod Screen Capture”程序,必须保证Java SDK没有被卸载,否则将不能从系统上卸载该程序



    方法5(使用Dalvik Debug Monitor)

    提示:运行“ddms.bat”不需要打开“SDK Manager.exe”
    打开文件夹“...\adt-bundle-windows-x86\sdk\tools”里面的文件“ddms.bat”
    显示“Online”则表示手机与程序连接成功

    提示1:可以通过点击菜单“Reset adb”来重新连接手机
    提示2:可以通过点击菜单“Screen Capture...”来截取手机屏幕上的图片
    窗口操作解释:
    Refresh:刷新显示当前手机屏幕的内容
    Rotate:旋转显示当前手机屏幕的内容
    Save:以PNG格式保存当前手机屏幕的内容
    Copy:将当前手机屏幕的内容复制到粘贴板上
    Done:关闭窗口



    参考网址:
    http://www.haigeer2201.com/mirrorop.html
    http://www.makeuseof.com/tag/ashot-handy-screenshot-tool-android-windows/
    http://www.mightypocket.com/2010/08/android-screenshots-screen-capture-screen-cast/
    其中第三个网址是开发Ashot这个软件的程序员对于软件的官方使用说明,如果大伙儿有任何疑问可以在上面留言。Ashot这个软件基本上没进行过任何更新,还是停留在1.1的版本上,但是在软件的“Help->About”关于说明里,有该软件的源代码(JAVA)的下载链接地址,有兴趣的朋友可以去下载源代码然后进行相关改进


    题外话:这几种方法显示的手机屏幕内容虽是实时,但会有所延慢,而且手机上的视频是看不了的,只会显示黑屏,其他图片游戏之类的还可以显示,可能和手机与电脑连接的方式以及数据传输速度有关系,不知道USB3.0会不会快点,已知的无线同步如AirPlay显示几乎是木有延迟的。曾试用过91助手和豌豆荚,但显示效果也是有所延慢。
    提示:运行“ddms.bat”不需要打开“SDK Manager.exe”

    from:http://blog.csdn.net/pipisorry/article/details/21294581

    展开全文
  • Unity 中保存和载入游戏

    万次阅读 多人点赞 2017-11-27 11:31:17
    原文:How to Save and Load a Game in Unity 作者:Anthony Uccello 译者:kmyhy 游戏现在变得越来越长,有些游戏...但如何创建一个存档文件,以及需要里面保存什么东西?你必须存档中保存玩家的设置吗?以及

    原文:How to Save and Load a Game in Unity
    作者:Anthony Uccello
    译者:kmyhy

    游戏现在变得越来越长,有些游戏已经超过了 100 个小时的内容。不可能让玩家一次就玩完整个游戏。允许玩家保存游戏是游戏最基本的一个功能——哪怕仅仅保存玩家的得分记录。

    但如何创建一个存档文件,以及需要在里面保存什么东西?你必须在存档中保存玩家的设置吗?以及如何将存档保存到 web 上允许玩家在不同设备上下载呢?

    在这篇教程中,你将学习:

    • 什么是是序列化以及反序列化。
    • 什么是 PlayerPrefs 以及如何用它保存玩家设定。
    • 如何创建游戏存档并将它保存到磁盘。
    • 如何加载游戏存档。
    • 什么是 JSON 以及如何使用它。

    假定你具备简单的 Unity 使用知识(比如创建和打开脚本),但不需要什么东西都懂,本教程很容易上手的。哪怕你是一个 C# 新手,你也能上手,只不过有几个概念你需要进一步的阅读而已。

    注意:如果你没有接触过 Unity 或者想了解更多的 Unity 技巧,你可以参考我们的其它 Unity 教程,其中你可以学到大量 Unity 主题,从 C# 到如何编写 UI。

    开始

    这里下载开始项目。你将实现保存游戏和加载的代码,以及保存玩家设定的逻辑。

    主要的存档概念

    在 Unity 中关于保存,有 4 个关键的概念:

    • PlayerPrefs: 这是一个特殊的缓存系统,在两次游戏过程中为玩家保存简单设定。许多新手程序员误以为他们能够用它来保存游戏存档,但这不是什么好的做法。它只允许你保存简单的东西,比如图形声音设置、登录信息或者其它基本的用户相关的数据。
    • 序列化:这是 Unity 真正用到的关键点。序列化将对象转换成字节流。听起来有点抽象,你可以看看这张图:

      SerializationIllustration.png

      什么是“对象”?在这里“对象”是 Unity 中的任意脚本或文件。事实上,当你创建一个 MonoBehaviour 脚本时,Unity 会通过序列化/反序列化将文件转换成 C++ 代码,然后变成你在检查器窗口中看见的 C# 代码。如果你曾经添加过 [SerializeField] 让某些东西在检查器中显示出来,你就知道怎么回事了。

    注意:如果你是一个 Java 或者 web 开发者,你可能熟悉 marshalling (编码解码)的概念。序列化和 marshalling 是几乎是同义词,如果你硬要说它们有什么不同,序列化是将对象从一种对象转换成另一种形式(比如,对象->字节),而 marshalling 是让参数从一个地方传到另一个地方。

    • 反序列化:就是它的名字所暗示的。它是序列化反面,将一个字节流转换成对象。
    • JSON:全称是 JavaScript Object Notation,是一种语言无关的发送和接收数据的常用格式。例如,你可能有一个运行在 Java 或者 PHP 下面的 web 服务器。你不能发送 C# 对象给它,但你可以发送这个对象的 JSON 形式给它,服务器会用它来重新创建一个本地版本的对象。后面的内容中你会学习更多关于这方面的内容,现在你只需要理解它是一种简单的格式化数据让它能够跨平台的方法(就像 XML)。当进行“对象->JSON”和“JSON->对象”转换时,可以分别将这两种称作称作 JSON 序列化和JSON 反序列化。

    Player Prefs

    我们创建了一个项目,以便你能将注意力集中在保存、加载游戏的逻辑上。但是,如果你想了解它是怎样运作的,不妨打开所有脚本,看看都是怎样实现的,如果需要帮助尽可到论坛中进行提问。

    打开项目,打开名为 Game 的场景,点击 play。

    1-650x263.png

    要开始游戏,点击 New Game 按钮。玩游戏时,直接用鼠标进行移动,枪会自动跟随你的动作。点击鼠标左键开火,打中目标一次(它会以不同的时间间隔上下翻转)就会计分。试玩一下,看看在 30 秒内能拿到多少分。按 esc 键可以弹出这个菜单。

    2-650x263.png

    同这个游戏一样搞笑的是,它没有音乐,显得有点枯燥。你可能看到了有一个 music 开关,但它是关着的。点击 play 启动游戏,这次点击 Music 开关将它设置为 On,你会在开始游戏后听到音乐。确保你的扬声器已打开!

    7.png

    修改音乐设定很简单,但在此点击 play 按钮会出现一个问题:音乐开关又关闭了。在修改音乐设定时,没有保存这种修改。这就是 PlayerPrefs 负责的事情。

    在 Scripts 文件夹中新建脚本 PlayerSettings。因为需要用到某些 UI 元素,在文件头部引用其他命名空间:

    using UnityEngine.UI;
    

    然后,新建几个变量:

    [SerializeField]
    private Toggle toggle;
    [SerializeField]
    private AudioSource myAudio;

    这些变量用于保存开关和 AudioSource 对象。

    然后新建一个函数:

      public void Awake ()
      {
        // 1
        if (!PlayerPrefs.HasKey("music"))
        {
          PlayerPrefs.SetInt("music", 1);
          toggle.isOn = true;
          myAudio.enabled = true;
          PlayerPrefs.Save ();
        }
        // 2
        else
        {
          if (PlayerPrefs.GetInt ("music") == 0)
          {
            myAudio.enabled = false;
            toggle.isOn = false;
          }
          else
          {
            myAudio.enabled = true;
            toggle.isOn = true;
          }
        }
      }

    在初始化时,这将:

    1. 判断 PlayerPrefs 是否有一个缓存了的 key 为 music 的值存在。如果没有,新建一个键值对,用 music 作为键,1 作为值。同时将开关设置为 on,并打开 AudioSource。这应当是玩家第一次运行游戏。值为 1 是因为不允许保存 Boolean 值(但你可以用 0 表示 false,1 表示 true)。
    2. 检查 PlayerPrefs 中的 music 键。如果它的值为 1,玩家的声音是打开的,因此打开音乐,设置开关为 On。否则,将音乐关闭,开关也 Off。

    保存脚本,返回 Unity。

    将 PlayerSettings 脚本附加到 Game 游戏对象。然后展开 UI 游戏对象下面的 Menu,显示它的子对象。然后将 Music 游戏对象拖到 PlayerSettings 脚本的 Toggle 字段。然后,选择 Game 游戏对象,将 AudioSource 拖到 MyAudio 字段。

    playersettings.png

    当游戏运行时,音乐响了(因为 Awake 函数中的代码),但你仍然需要添加玩家在游戏过程中改变对设置进行改变的代码。打开 PlayerSettings 脚本,添加函数:

      public void ToggleMusic()
      {
        if (toggle.isOn)
        {
          PlayerPrefs.SetInt ("music", 1);
          myAudio.enabled = true;
        }
        else
        {
          PlayerPrefs.SetInt ("music", 0);
          myAudio.enabled = false;
        }
        PlayerPrefs.Save ();
      }
    

    这里做的和上一段代码基本一样,除了一个关键的地方。这里它检查了音乐开关的状态,并根据情况修改和保存设置。为了让这个方法能够被调用和派上用场,你必须设置 Toggle 游戏对象的回调方法。选中 Music 游戏对象,将 Game 游戏对象拖到 OnValueChanged 节的 Object 一栏:

    toggle.png

    在下拉框中当前值为 No Functions,修改为 PlayerSettings -> ToggleMusic()。当菜单中的开关按钮被点击,它会调用 ToggleMusic 函数。

    toggleSet.png

    现在你已经用某些东西去记录音乐设定了。点击 play,试着打开/关闭 music 开关,结束游戏并重新启动游戏。

    音乐设置现在已经能保存了!干得不错——但你只是用到了序列化的皮毛而已。

    保存游戏

    PlayerPrefs 的用法很简单吧?通过它,你能够简单保存某些设置如玩家的图形设置、登录信息(比如 Facebook 或者 Twitter 的 token),以及需要保存的玩家其它设置。但是,PlayerPrefs 不是为了游戏存档而设计的。因此,你需要用到序列化。

    创建一个游戏存档文件的第一步是创建一个存档文件类。新建一个 Save 脚本,取消 MonoBehaviour 继承。删掉默认的 Start() 方法和 Update() 方法。

    添加下列变量:

    public List<int> livingTargetPositions = new List<int>();
    public List<int> livingTargetsTypes = new List<int>();
    
    public int hits = 0;
    public int shots = 0;

    为了保存游戏,你必须记录还活着的机器人在什么位置以及它们的种类。这要用到两个 List。hits 和 shots 则用 int 来保存。

    还需要添加一句非常重要的代码。在类声明之上,添加:

    [System.Serializable]
    

    这是一个属性,它标明了代码的一个元数据。它告诉 Unity 这个类可以被序列化,这意味着你可以将它转换成字节流并保存到磁盘文件中。

    注意:属性的使用非常广泛,它允许你在类、方法和变量上附加数据(这种数据叫做元数据)。甚至你可以定义自己的元数据并用于你的代码。序列化中使用了 [SerializeField] 和 [System.Serializable] 属性,这样在序列化对象时它知道要写入什么。其它属性还包括用于单元测试和依赖注入的设置,则不再本文范围之内,但你也可以研究一番。

    完整的 Save 脚本应该是这样子:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    [System.Serializable]
    public class Save
    {
      public List<int> livingTargetPositions = new List<int>();
      public List<int> livingTargetsTypes = new List<int>();
    
      public int hits = 0;
      public int shots = 0;
    }

    然后,打开 Game 脚本,添加一个方法:

    private Save CreateSaveGameObject()
    {
      Save save = new Save();
      int i = 0;
      foreach (GameObject targetGameObject in targets)
      {
        Target target = targetGameObject.GetComponent<Target>();
        if (target.activeRobot != null)
        {
          save.livingTargetPositions.Add(target.position);
          save.livingTargetsTypes.Add((int)target.activeRobot.GetComponent<Robot>().type);
          i++;
        }
      }
    
      save.hits = hits;
      save.shots = shots;
    
      return save;
    }

    这段代码创建了一个 Save 类实例,根据存活的机器人来进行赋值。同时还保存了玩家的 shots 和 hits。

    保存按钮已经链接到 Game 脚本的 SaveGame 方法,但里面没代码。将 SaveGame 函数修改为:

    
    public void SaveGame()
    {
      // 1
      Save save = CreateSaveGameObject();
    
      // 2
      BinaryFormatter bf = new BinaryFormatter();
      FileStream file = File.Create(Application.persistentDataPath + "/gamesave.save");
      bf.Serialize(file, save);
      file.Close();
    
      // 3
      hits = 0;
      shots = 0;
      shotsText.text = "Shots: " + shots;
      hitsText.text = "Hits: " + hits;
    
      ClearRobots();
      ClearBullets();
      Debug.Log("Game Saved");
    }

    代码解释如下:

    1. 创建了一个 Save 对象,同时当前游戏的所有数据都会保存到这个对象中。
    2. 创建了一个 BinaryFormatter,然后创建一个 FileStream,在创建时指定文件路径和要保存的 Save 对象。它会序列化数据(转换成字节),然后写磁盘,关闭 FileStream。现在在电脑上会多一个名为 gamesave.save 的文件。.save 后缀只是一个示例,你可以使用任意扩展名。
    3. 重置游戏,以便玩家保存后所有东西都处于默认状态。

    要保存游戏,在玩的过程中按下 esc 键,然后点击 Save 按钮。你会注意到所有东西都被重置了,控制台会显示一条消息,说游戏已经被保存。

    4.png

    在 Game 脚本中 LoadGame 方法已经连接到 Load 按钮了。打开 Game 脚本,找到 LoadGame 函数。将它修改为:

    public void LoadGame()
    { 
      // 1
      if (File.Exists(Application.persistentDataPath + "/gamesave.save"))
      {
        ClearBullets();
        ClearRobots();
        RefreshRobots();
    
        // 2
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Open(Application.persistentDataPath + "/gamesave.save", FileMode.Open);
        Save save = (Save)bf.Deserialize(file);
        file.Close();
    
        // 3
        for (int i = 0; i < save.livingTargetPositions.Count; i++)
        {
          int position = save.livingTargetPositions[i];
          Target target = targets[position].GetComponent<Target>();
          target.ActivateRobot((RobotTypes)save.livingTargetsTypes[i]);
          target.GetComponent<Target>().ResetDeathTimer();
        }
    
        // 4
        shotsText.text = "Shots: " + save.shots;
        hitsText.text = "Hits: " + save.hits;
        shots = save.shots;
        hits = save.hits;
    
        Debug.Log("Game Loaded");
    
        Unpause();
      }
      else
      {
        Debug.Log("No game saved!");
      }
    }

    细细过一遍:

    1. 判断存档文件是否存在。如果存在,它会清空机器人和分数。否则,打印控制台“没有存档文件”。
    2. 和保存文件时类似,又创建了一个 FileStream,只不过和写入不同,这次是让它读取字节流。因此直接传入存档文件的路径。然后生成一个 Save 对象并关闭 FileStream。
    3. 尽管你已经拥有了存档信息,你仍然需要将它转换成游戏状态。这个循环遍历了保存的机器人位置(或者的机器人),天后在那个位置添加一个机器人。并正确设置机器人的种类。为了简单起见,定时器被重置,但如果你愿意的话也可以删除这句。这防止机器人立马消失,让玩家有几秒钟的时间反应。同时,为了简单起见,机器人的上移动画被设置为已结束,这样当你存档时机器人只上移了一部分,但在加载游戏之后却显示了完全上移。
    4. 刷新 UI 上的 hits 和 shotsp,同时也设置了本地变量,这样当玩家开火或者击中目标时会继续从原来的分数值叠加。如果你不做这个步骤,当玩家下次开火或者击中目标时值会显示为 1。

    点击 play,玩一小会游戏并存档。点击 Load 按你会看到它会将你保存游戏时的敌人都加载进来。它还会正确地设置你的积分和射击次数。

    5-650x249.png

    将数据保存为 JSON

    在保存数据时有一个技巧——那就是 JSON。你可以创建一个本地 JSON 对象用于代表你的游戏存档,将它发送给服务器,然后将这个 JSON(字符串)下载到另一台设备,将它从字符串转换回 JSON。本教程不会介绍如何向服务器发送接收数据,而是想介绍 JSON 的使用以及它是如何的简单。

    JSON 格式和你在 C# 代码中的对象稍有不同,但它也很简单。这是一个简单 JSON:

    {
      "message":"hi",
      "age":22
      "items":
      [
        "Broadsword",
        "Bow"
      ]
    }

    外边的大括号表示了父对象,即这个 JSON。如果你了解字典的数据结构,那么 JSON 就跟它一样。一个 JSON 文件就是对键值对进行的一个映射。因此在上面的示例中,有 3 个键值对。在 JSON 中,键总是字符串,当值可以是对象(比如子 JSON 对象)、数组、数字或者字符串。message 键中存储的值是 hi,age 键中的值是数字 22,items 键的值是一个带两个字符串的数组。

    JSON 对象自身是以字符串类型存储的。通过将数组转换成字符串,任何语言都能简单地以一个字符串作为构造参数重建 JSON 对象。很方便,也很简单。

    每种语言都有自己的从这种格式创建对象的方法。从 Unity 5.3 开始,就有一个原生方法,可以用一个 JSON 字符串创建 JSON 对象。你可以创建一个 JSON 对象用于保存玩家的得分记录并打印到控制台。但你可以将这个逻辑扩展到发送 JSON 到服务器。

    在 Game 脚本中有一个 SaveAsJSON 方法,它已经连接到 Save As JSON 按钮。修改这个 SaveAsJSON 方法为:

    public void SaveAsJSON()
    {
      Save save = CreateSaveGameObject();
      string json = JsonUtility.ToJson(save);
    
      Debug.Log("Saving as JSON: " + json);
    }

    这里和前面一样创建了一个 Save 对象。然后用 JsonUtility 类的 ToJSON 方法创建了一个 JSON 字串。然后打印到控制台。

    开始游戏,打死几个敌人,按下 esc 键打开菜单。点击 Save As JSON 按钮,你会看到你创建的 JSON 字符串:

    6.png

    如果你想将这个 JSON 转换成一个 Save 对象,你可以这样:

    Save save = JsonUtility.FromJson<Save>(json);
    

    如果你想从 web 下载一个存档然并加载到你的游戏中,这就是你要做的工作。但创建一个 web 服务器是另外一个课程了!现在,给自己一个奖励,因为你刚刚学完了几个技术,在你下一个游戏(叹气)中会省心不少!

    接下来做什么?

    你可以从这里下载最后的项目文件。

    现在你拥有了一个创建好游戏的强大工具,通过神奇的序列化让你的玩家能够保存和加载游戏。你也学习了什么是 JSON 以及如何用它进行云存储。你还学习了什么是 PlayerPrefs 它能用来干什么(设定!),以及它不能用来干什么(保存游戏)。

    如果你想学习更多 Unity 内容,我们有一个完整的Unity 教程,欢迎你进入我们的 Unity 论坛。想说点什么,尽管留言。

    如果你是 Unity 的铁粉,想成为一个彻头彻尾的开发者,请阅读我们的Unity Games by Tutorials,其中会教你从头制作 4 个完整游戏。其中有一章介绍了如何用 JSON 加载游戏关卡。

    有任何问题或评论,请在下面留言!

    展开全文
  • 教你如何书本的字快速弄到电脑上

    万次阅读 多人点赞 2012-09-19 13:22:24
    前记:记得某天,超人让我帮忙一些书本的题目弄到电脑上,按照我们常规思维,就是对着书本的内容一个一个输进电脑。这样,速度的快慢主要看输入文字那个人的打字速度和工作效率了,很大程度都是主观的因素。...
  • 下载教程 ... 下载好记得之后将ffmpeg/bin目录加入环境变量 然后命令行查看一下 ...接下来在命令行打开这个目录,然后键入以下命令 然后等几秒 合成后的视频就源目录里了 点击即可观...
  • 2、使用boot-repair修复引导,因为没有直接UBuntu安装硬盘可以任何电脑上启动的,都需要修复引导:如果你是windows+ubuntu的双系统,那么重装windows之后(非ghost方式),是会直接进入windows的,之前的grub...
  • 然后通过传入到上面的那个真实的原始地址加上参数里的相对地址,就构成了swf文件服务器的完整的地址,http://fla.78baby.com/flashupfile/fads/2005/2/huiguniang4.swf,哈哈恭喜你,然后swf保存电脑里吧。...
  • 下面教你怎么保存易企秀的图片?不需要VIP奥! 1.先发布易企秀模板,然后找到你需要保存的图片的位置。 右键复制图片地址。如图: 怎么保存易企秀的图片 复制出来的图片地址一般是.webp格式,这样的图片修改后缀为...
  • 自己的电脑上搭建一个服务器

    万次阅读 2016-01-21 22:47:16
    我们为了更能逼近现实,就想着自己的javaweb程序发布后,外网的同学能够访问我们的网站,难道我们去买空间,去买域名嘛,其实也没必要,我们只是学习,测试之用,自己的电脑上搭建一个服务器完全可以满足要求。...
  • 原帖:向日葵智能现在基于python的爬虫实战项目,网络的资料还是非常多的,但是本节介绍的爬虫略有不同:同样的是下载某个网页的美女图片,不同的是我们这里利用人工智能筛选出漂亮的。爬虫咱们慢慢说,筛选的原理...
  • 前几天我要测试一个项目,这个是需要往服务器放才可以测的,但后台太忙了,所以就说让我自己自己电脑搭建个服务器,项目代码放在里面测就可以,其实搭建服务器的方法有很多,之前我有用过一个XMAPP的软件它也...
  • 摘要:许多情况下我们需要用到摄像头获取图像,进而处理图像,这篇博文介绍利用pyqt5、OpenCV实现用电脑上连接的摄像头拍照并保存照片。为了使用和后续开发方便,这里利用pyqt5设计了个相机界面,后面将介绍如何实现...
  • 1、首选准备的工具是chrome浏览器和电脑端微信(这两个软件可以直接百度搜索下载) 2、电脑登录微信,找到订阅号,找到对应的微信公众号文章,我们以罗辑思维罗振宇的每天60秒为例 3、点击复制链接图标,复制上面的...
  • 如何将网页保存保存为PDF格式?

    万次阅读 2019-03-22 23:39:03
    如上例所示,将网页WPS中打开后(参考例,不再放图),依次点击左上角“文件”、“另存为”菜单: 选取文件要保存的路径,输入要保存的文件名和文件类型,注意:文件类型要选"PDF文件格式(*.pdf)",然后点击...
  • 最近一个项目需要使用USB摄像头去采集视频并保存成文件,需要一个摄像头录制工具,要求其实很简单,就是能够将摄像头采集的图像加上一个时间戳的水印,实时保存到指定的文件中。同时为了防止文件过大,最好能够按...
  • Mac outlook本地邮件保存在

    千次阅读 2017-11-08 16:56:00
    Mac下Outlook邮件存档的结构跟Windows有很大的不同,存在这个位置:~/Documents/Microsoft User Data/Office 2011 Identities/Main Identity/,备份邮件时,只要将这整个文件夹拷下来新机器覆盖同一路径下的...
  • DeepLearning tutorial(2)机器学习算法训练过程中保存参数 @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43169019 参考:pickle — Python object serialization、Deep...
  • 2 手机微信要求:电脑手机同一网络下。 问题一:我个人尝试发现,使用学校网络,连接不,报网络复杂,无法连接。建议用私人网络,或者自己手机给电脑开热点。这都没有验证,只是建议。对于iphone,我成功的案例...
  • 原帖:...电视播放下载的大片(超详图解)坐在电脑前看电影真的不是一件
  • Linux系统装U盘

    万次阅读 2016-03-27 11:27:15
    于是,Linux装U盘这个想法自然而然地就产生了。 网上有很多介绍,可是要么牛头不对马嘴(U盘装Linux双系统),要么过程繁琐或者含糊其辞。经过一番探索,下面介绍一下我的经验。 我的电脑配置如下(其实和电脑...
  • 爬取图片并保存到本地

    千次阅读 2018-11-07 13:09:58
    爬取图片保存到本地网址代码结果 网址 爬取百度百科爱因斯坦图片,并保存到 C:\pictures\ 下 https://baike.baidu.com/item/阿尔伯特·爱因斯坦/127535?fromtitle=爱因斯坦&amp;amp;fromid=122624&amp;amp;...
  • 网站中文件批量下载,实现excel中超链接跳转打开下载的指定文件前言文件的批量下载数据库的保存与导出生成超链接存在的问题(未完待续) 前言 我们有的时候需要批量下载一个网站下的很多个页面的文件(例如附件...
  • 教你保存在线视频文件

    千次阅读 2008-10-19 13:32:00
    所以你无法它们保存到自己的电脑上。我们要怎么样才能别人的视频文件保存到自己的电脑上呢?下面教你几招保存视频文件~~ 让我们来突破封锁,在线视频搬回家,想看就看! 一、WMV、ASF等格式的网
  • Homebrew是以最简单,最灵活的方式来安装苹果公司MacOS中不包含的UNIX工具 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 如遇 Press RETURN to ...
  • 一台没联网的电脑上安装SQLSERVER2000,当使用控件连接数据库时,无法连接,提示:sql server不可用或不存在.无法连接:sql server不存在或拒绝网络访问。 以前一直做一个水晶头,后面的1、3和2、6分别对接,...
  • 本文,我整理了一些OneNote的使用经验,供读者参考,如果读者有更棒的经验技巧,不妨文章下方留言。 2. 将网页内容保存到OneNote中???? 1)如果你使用的是Chrome浏览器,增加插件:OneNote Web Clipper,此插件...
  • 而最近抖音“蚂蚁呀嘿”恶搞换脸的小视频也突然火了起来,那我就想了想能不能视频会议的时候换张脸活跃下气氛? Github 一番搜寻之后发现还真有办法,有一个开源的 Python 人工智能换脸的库,那正好趁着这个...
  • VMWare是一个重量级的虚拟机, 我们个人电脑上安装一个Oracle公司提供的免费的VirtualBo轻量级虚拟机 步骤1: 下载VirtualBo 下载链接:链接:https://pan.baidu.com/s/1TtzwupJV3yT7E7telBgXWw 密码:tm8z 如图...
  • 拼多多买家评论视频怎么保存

    千次阅读 2021-01-26 13:53:31
    拼多多中国这个电商大平台是有占据了一定的地位和客流量,许多商家们都拼多多这个平台分到了一杯羹,如今的买家们也很会懂得挑选商品,价格得便宜,产品又得好看,对质量也很懂得把关,不仅是从细节图和主图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,145
精华内容 19,258
关键字:

如何在电脑上把链接保存下来