|
虽然它使用加密来保护你的资产,他们正在传播的可能,一旦数据在客户端有可能找到从他们手中抢含量的方法。例如,有工具就可以在驱动程序级记录3D数据,允许用户提取模型和纹理都送到GPU。为此,我们一贯的立场是,如果用户决定提取你的资产,他们将能够。
然而,你用你自己的数据加密相关文件,如果你还想这是可能的。
做到这一点的方法之一是利用textasset类型来存储你的数据字节。你可以加密您的数据文件并将它们保存着。字节扩展,这将作为一个统一textasset型。一旦导入编辑器中的文件textassets可以包含在你的资源包被放置在一个服务器。在客户端的资源包将下载的内容解密存储在textasset字节。该方法中是不加密的,但数据存储是存储textassets是。
string url = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
while (!Caching.ready)
yield return null;
// Start a download of the encrypted assetbundle
WWW www = new WWW.LoadFromCacheOrDownload (url, 1);
// Wait for download to complete
yield return www;
// Load the TextAsset from the AssetBundle
TextAsset textAsset = www.assetBundle.Load("EncryptedData", typeof(TextAsset));
// Get the byte data
byte[] encryptedData = textAsset.bytes;
// Decrypt the AssetBundle data
byte[] decryptedData = YourDecryptionMethod(encryptedData);
// Use your byte array. The AssetBundle will be cached
}
另一种方法是完全加密的资源包从源然后下载使用WWW类。你可以给他们任何文件扩展名你喜欢,只要你的服务器是作为二进制数据。一旦下载你就用你的解密程序从数据字节属性你WWW实例得到解密后的相关文件资料和创建资源包从内存使用assetbundle.createfrommemory。
string = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
// Start a download of the encrypted assetbundle
WWW www = new WWW (url);
// Wait for download to complete
yield return www;
// Get the byte data
byte[] encryptedData = www.bytes;
// Decrypt the AssetBundle data
byte[] decryptedData = YourDecryptionMethod(encryptedData);
// Create an AssetBundle from the bytes array
AssetBundleCreateRequest acr = AssetBundle.CreateFromMemory(decryptedData);
yield return acr;
AssetBundle bundle = acr.assetBundle;
// You can now use your AssetBundle. The AssetBundle is not cached.
}
这后一种方法在第一个好处是,你可以用任何方法(除了资源包。LoadFromCacheOrDownload)发送字节和数据是完全加密的-例如插座插件。缺点是,它不会被缓存,使用统一的自动缓存。你可以在所有的玩家除了播放器存储文件的磁盘和使用手动加载它assetbundles.createfromfile
三分之一种方法结合了最好的两种方法和存储资源包本身作为一个textasset,在另一个正常的资源包。未加密的资源包含有加密会缓存。原有的资源包可以被加载到内存中,解密和实例使用assetbundle.createfrommemory。
string = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
while (!Caching.ready)
yield return null;
// Start a download of the encrypted assetbundle
WWW www = new WWW.LoadFromCacheOrDownload (url, 1);
// Wait for download to complete
yield return www;
// Load the TextAsset from the AssetBundle
TextAsset textAsset =http://www.assetBundle.Load]www.assetBundle.Load("EncryptedData", typeof(TextAsset));
// Get the byte data
byte[] encryptedData = textAsset.bytes;
// Decrypt the AssetBundle data
byte[] decryptedData = YourDecryptionMethod(encryptedData);
// Create an AssetBundle from the bytes array
AssetBundleCreateRequest acr = AssetBundle.CreateFromMemory(decryptedData);
yield return acr;
AssetBundle bundle = acr.assetBundle;
// You can now use your AssetBundle. The wrapper AssetBundle is cached
}
|
|