所以我在移动游戏中使用统一引擎制作我的自定义高分榜.
我设置了我的mysql数据库,并从商店购买了高分资产,它可以工作,但只有英文用户名.所以基本上它发送用户的名字,得分为.php脚本.
但我希望该脚本也可以接收韩国字符作为用户的昵称.我的用户也将使用韩语字符作为昵称,而不仅仅是英文字符.
我怎样才能做到这一点?
这是代码.
------------------(统一方面的Highscore.cs)
WWWForm rsFm = new WWWForm();
rsFm.AddField("name",name);
// at here name field, I want to receive korean characters as well.
rsFm.AddField("tables",tables);
rsFm.AddField("hash",GetHash(name));
WWW rs = new WWW(registerUserURL,rsFm);
yield return rs;
Run Code Online (Sandbox Code Playgroud)
..................
string GetHash(string usedString){ //Create a Hash to send to server
MD5 md5 = MD5.Create();
byte[] bytes = Encoding.ASCII.GetBytes(usedString+secretKey);
byte[] hash = md5.ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < hash.Length; i++){
sb.Append(hash[i].ToString("x2"));
}
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
<?php
include('ServerConnect.php');
$connection …Run Code Online (Sandbox Code Playgroud) 我现在真的搞砸了理解需求的概念和原因,甚至不知道如何通过编码来实现.
所以,我用团结制作手机游戏,c#.使用php,mysql进行高分,并在应用程序购买项目信息中存储用户.
我一周前在google play上发布了我的游戏,我的谷歌钱包显示没有人,直到现在购买该游戏中的任何项目.
但是,当我检查我的游戏服务器(mysql数据库)时,一些用户有大量应该购买的项目.
这意味着一些用户使用黑客工具并绕过谷歌游戏检查过程并欺骗我的游戏并进行假购买.
所以我没有实现developerPayload,也没有验证google play购买收据.
所以现在我删除了我的数据库中的整个恶意用户的项目(这将设置0到该用户的客户端项目),并且想要实现google play购买收据的服务器端验证.
我通过谷歌搜索搜索了许多帖子,但从头到尾没有完美的解决方案.
无论如何,我到目前为止实现了这样的.
首先,在用户结束谷歌结账过程(无论这是真的还是假的)之后,我的Unity客户端的OnPurchaseSucceded函数被调用,在那里我实现了开始在我的服务器上传递我的PHP脚本.
private void OnPurchaseSucceded(Purchase purchase)
{
/*
// Optional verification of the payload. Can be moved to a custom server
if (!VerifyDeveloperPayload(purchase.DeveloperPayload)) {
return;
}*/
StartCoroutine(VerifyReceiptCo(purchase));
}
IEnumerator VerifyReceiptCo(Purchase purchase)
{
WWWForm hsFm = new WWWForm();
hsFm.AddField("data", purchase.OriginalJson);
hsFm.AddField("signature", purchase.Signature);
WWW hs = new WWW(verifyURL, hsFm);
yield return hs;
Debug.Log("verify result is " + hs.text);
// if result is true(validated), give item to user.
}
Run Code Online (Sandbox Code Playgroud)
在这里问题,
1. [我在代码上方做得对吗?对于"数据"字段,我使用了buy.OriginalJson,但这是对的吗?如果没有,我该怎么用?] …
// delphi代码(delphi版本:Turbo Delphi Explorer(它是Delphi 2006))
function GetLoginResult:PChar;
begin
result:=PChar(LoginResult);
end;
Run Code Online (Sandbox Code Playgroud)
//使用上面的delphi函数的C#代码(我使用的是unity3d,在C#中)
[DllImport ("ServerTool")]
private static extern string GetLoginResult(); // this does not work (make crash unity editor)
[DllImport ("ServerTool")]
[MarshalAs(UnmanagedType.LPStr)] private static extern string GetLoginResult(); // this also occur errors
Run Code Online (Sandbox Code Playgroud)
在C#中使用该功能的正确方法是什么?
(也用于delphi,代码就像if(event = 1)和(tag = 10)then writeln('Login result:',GetLoginResult);)
我在谷歌上读到了一些关于堆和堆栈的内容,但大多数答案只是说它的概念描述和差异。
我对其他事情很好奇。
正如标题所说,物理内存上的堆和栈在哪里?
它们的尺寸如何?例如,我的台式电脑使用 12 GB 内存,那么 Heap 是多少?堆栈大小是多少?
谁提出了这两种不同类型的概念?
我可以操纵堆和堆栈的分配吗?如果它们各自占用 50% 的内存(如果堆占用 6 GB 内存,在我的情况下堆栈也占用 6 GB),我可以调整它们的大小吗?
所以我用统一引擎制作手机游戏,想想发布到android目标.
现在我的游戏将有我自己的自定义高分榜,我认为当用户获得分数时,游戏应该发送他的身份昵称,得分到服务器.
因此,为了获得他的独特名称,我想要获得他的谷歌帐户名称.(当然我可以选择接收用户输入的选项作为他的昵称,但很好,很烦人)
我只需要电子邮件格式的前端部分(即用户名) 例如,如果用户的谷歌帐户是asdf@gmail.com,我想只提取"asdf".
那么,怎么做呢?
这是获得他独特昵称的好方法吗?
谢谢.
所以我确实喜欢这个,但是没有用.
public class MainActivity extends UnityPlayerActivity implements AndroidInterface{
private String usergoogleName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GetUserName();
}
public void GetUserName(){
AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccountsByType("com.google");
List<String> username = new LinkedList<String>();
for (Account account : accounts) {
username.add(account.name);
}
usergoogleName = username.get(0);
sendMessage("Main Camera", "JavaMsg", usergoogleName);
}
@Override
public void sendMessage(String target, String method, String params) {
// TODO Auto-generated method stub
UnityPlayer.UnitySendMessage(target, method, params);
}
Run Code Online (Sandbox Code Playgroud)
在统一方面,我将脚本附加到'Main …
我正在制作Android游戏,有代码可以将高分信息发送到我的网站的PHP代码.
奇怪的是,这在团结编辑器中运行良好,但是在我制作了一个.apk并在真正的Android手机上运行后,它无法正常运行并出现错误.
错误如下(Eclipse logcat已知)
05-05 22:56:47.997:I/Unity(20561):NullReferenceException:对象引用未设置为对象的实例05-05 22:56:47.997:I/Unity(20561):at HighScore.GetHash(System .String usedString)[0x00000] in:0 05-05 22:56:47.997:I/Unity(20561):at HighScore + c__Iterator14.MoveNext()[0x00000] in:0
代码是首次运行高分时注册昵称的功能.
public IEnumerator RegisterName(string name)
{
string finalResult = "";
string tables = "";
for (int m = 0; m < difficultyModes.Length; m++)
{//Create a list of tables to send
if (m < difficultyModes.Length - 1)
{
tables += difficultyModes[m].databaseName + " ";
}
else
{
tables += difficultyModes[m].databaseName;
}
}
WWWForm rsFm = new WWWForm();
rsFm.AddField("name", name);
rsFm.AddField("tables", tables);
rsFm.AddField("hash", GetHash(name));
WWW …Run Code Online (Sandbox Code Playgroud)