【Unity】文件信息的存储和解析(C#代码)

目录

文件存储

两种文件信息解析方法

文件加密处理

文件解密处理

 全部代码


文件存储

一些游戏案例开发过程中的一些数据转换成Json格式,然后存到指定的位置

 //3.将对象转化为Json
 List<Hokag> hokagList = new List<Hokag>()
 {
     new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
     new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
 };
 string json = JsonMapper.ToJson(hokagList);
 json = Regex.Unescape(json);//把Unicode转成中文

 //加密
 DataSecurity dataSecurity = new DataSecurity();



 Debug.Log(json);


 //文件存储
 File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);

两种文件信息解析方法

1.JsonMapper.ToObject去解析json

        //方法1.JsonMapper.ToObject去解析json
        JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        List<Hokag> hokagList = new List<Hokag>();//创建列表,存放信息

        foreach (JsonData item in jsonData)
        {
            Hokag hokag = new Hokag();//创建对象
            //根据键来找到对应的值
            JsonData nameValue = item["Name"];
            JsonData ageValue = item["Age"];
            JsonData skillValue = item["Skill"];

            hokag.Name = nameValue.ToString();
            hokag.Age = Int32.Parse(ageValue.ToString());
            hokag.Skill = skillValue.ToString();
            hokagList.Add(hokag);//添加至列表
        }

        foreach (Hokag item in hokagList)
        {
            Debug.Log(item);
        }

2.使用泛型来解析Json

        //方法2.使用泛型来解析Json
        //JSON里面对象的键必须要和定义的类里面的属性或者字段一致
        Hokag[] hokagArray = JsonMapper.ToObject<Hokag[]>(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        foreach (Hokag item in hokagArray)
        {
            Debug.Log(item);
        }

文件信息的存储和解析在同一个C#文件 JsonText.cs中,需要挂载在空物体上。

需要用到的头文件:

using UnityEngine;
using System.Runtime.Serialization.Json;
using System.Collections.Generic;
using System.Text.RegularExpressions;//转码引用命名空间把Unicode转成中文
using System.IO;//输入输出流
using LitJson;
using System;
using System.Text;

效果:

文件加密处理

新开C#文件DataSecrity.cs

    //加密密钥
    string key = "12345678123456781234567812345678";



    /// <summary>
    /// 字符串加密
    /// </summary>
    /// <param name="toE">要加密的字符串</param>
    /// <returns></returns>
    public string Encript(string toE)
    {


        //将密钥转换为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式
        //创建加密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将要加密的明文字符串转换为byte数组
        byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
        //加密  得到密文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);

        //返回密文字符串
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);

    }


文件解密处理

    /// <summary>
    /// 字符串解密
    /// </summary>
    /// <param name="toD">要解密的字符串</param>
    /// <returns></returns>
    public string Decript(string toD)
    {
        //将密钥转化为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式

        //创建解密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将密文字符串转换位byte数组
        byte[] toDecriptArray = Convert.FromBase64String(toD);
        //解密,得到明文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
        //返回明文字符串
        return UTF8Encoding.UTF8.GetString(resultArray);

    } 

 全部代码

JsonTest.cs

using UnityEngine;
using System.Runtime.Serialization.Json;
using System.Collections.Generic;
using System.Text.RegularExpressions;//转码引用命名空间把Unicode转成中文
using System.IO;//输入输出流
using LitJson;
using System;
using System.Text;

public class JsonTest : MonoBehaviour
{
   

    void Start()
    {
        方法1.JsonMapper.ToObject去解析json
        //JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        //List<Hokag> hokagList = new List<Hokag>();//创建列表,存放信息

        //foreach (JsonData item in jsonData)
        //{
        //    Hokag hokag = new Hokag();//创建对象
        //    //根据键来找到对应的值
        //    JsonData nameValue = item["Name"];
        //    JsonData ageValue = item["Age"];
        //    JsonData skillValue = item["Skill"];

        //    hokag.Name = nameValue.ToString();
        //    hokag.Age = Int32.Parse(ageValue.ToString());
        //    hokag.Skill = skillValue.ToString();
        //    hokagList.Add(hokag);//添加至列表
        //}

        //foreach (Hokag item in hokagList)
        //{
        //    Debug.Log(item);
        //}




        方法2.使用泛型来解析Json
        JSON里面对象的键必须要和定义的类里面的属性或者字段一致
        //Hokag[] hokagArray = JsonMapper.ToObject<Hokag[]>(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        //foreach (Hokag item in hokagArray)
        //{
        //    Debug.Log(item);
        //}



        //3.将对象转化为Json
        List<Hokag> hokagList = new List<Hokag>()
        {
            new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
            new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
        };
        string json = JsonMapper.ToJson(hokagList);
        json = Regex.Unescape(json);//把Unicode转成中文

        //打印前加密处理
        DataSecurity dataSecurity = new DataSecurity();
        json = dataSecurity.Encript(json);//字符串加密


        json = dataSecurity.Decript(json);//字符串解密



        Debug.Log(json);

        //文件存储
        File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);



    }
}

DataSecurity.cs

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;//密码学命名空间
using System.Text;
using System;

public class DataSecurity
{
    //加密密钥
    string key = "12345678123456781234567812345678";



    /// <summary>
    /// 字符串加密
    /// </summary>
    /// <param name="toE">要加密的字符串</param>
    /// <returns></returns>
    public string Encript(string toE)
    {


        //将密钥转换为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式
        //创建加密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将要加密的明文字符串转换为byte数组
        byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
        //加密  得到密文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);

        //返回密文字符串
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);

    }

    /// <summary>
    /// 字符串解密
    /// </summary>
    /// <param name="toD">要解密的字符串</param>
    /// <returns></returns>
    public string Decript(string toD)
    {
        //将密钥转化为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式

        //创建解密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将密文字符串转换位byte数组
        byte[] toDecriptArray = Convert.FromBase64String(toD);
        //解密,得到明文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
        //返回明文字符串
        return UTF8Encoding.UTF8.GetString(resultArray);

    } 

}

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
# Unity实现2D角色运动 在Unity中实现2D角色运动,可以通过以下C#代码来控制: ```csharp using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 5f; // 水平移动速度 public float jumpForce = 700f; // 跳跃力度 private float moveInput; // 水平方向输入值 private bool facingRight = true; // 角色面朝方向,true为右 private Rigidbody2D rb; // 初始化 void Start () { rb = GetComponent<Rigidbody2D>(); } // 更新每帧 void Update () { // 获取水平方向输入值 moveInput = Input.GetAxis("Horizontal"); // 翻转角色面朝方向 if (facingRight == false && moveInput > 0) { Flip(); } else if (facingRight == true && moveInput < 0) { Flip(); } // 角色跳跃 if (Input.GetKeyDown(KeyCode.Space)) { rb.AddForce(new Vector2(0f, jumpForce)); } } // 固定物理更新 void FixedUpdate() { // 给刚体施加水平方向的力 rb.velocity = new Vector2(moveInput * speed, rb.velocity.y); } // 翻转角色面朝方向 void Flip() { facingRight = !facingRight; Vector3 scale = transform.localScale; scale.x *= -1; transform.localScale = scale; } } ``` 解析: 1. 引入UnityEngine命名空间,并声明PlayerMovement类。 2. 声明水平移动速度(speed)和跳跃力度(jumpForce)。 3. 声明私有变量(moveInput)存储水平方向的输入值。 4. 声明布尔变量(facingRight)表示角色的面朝方向,true表示面朝右。 5. 获取Rigidbody2D组件,提供物理属性和方法。 6. 初始化组件和数据。 7. 每帧更新输入和跳跃操作。 8. 在水平反向时,翻转面朝方向。 9. 在响应跳跃按键时,施加向上的力。 10. 在物理更新FixedUpdate()中,施加水平方向的力来移动角色。 11. 翻转函数Flip()用于翻转角色面朝方向。 以上代码可以在2D场景中的角色对象上添加PlayerMovement脚本,即可实现基本的角色运动控制。 这里只是一个示例,更高级的2D角色运动,通常需要类似的代码框架,但会依赖更多计算和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲敲er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值