导读热词

前言

开发环境

客户端:Unity3D开发(C#)

服务器:Java (基于Java7)

日   期:2016年09月

需求说明

部分服务器的部分逻辑功能在客户端实现一遍,可以简单的理解为服务器的部分逻辑代码搬到客户端来实现一遍。

想到的办法是代码转换。有两个原因:

时间问题,把时间用在更有意义的事情上。

解放双手和大脑,无须把相同的代码写两遍。

源代码转换法

源代码转换就是指把Java的代码转换成C#的源代码。

这样做的好处是方便后续的开发和调试,有源码更放心。

以下是几个工具,用于Java源码转换到C#源码

Java Language Conversion Assistant

visual studio 2008及之前的老版本集成此工具,但从visual studio2010起已不提供,故放弃之。

j2cstranslator

开源,免费,但13年至今未更新

octopus .NET Translator

收费,未进行详细了解

Java to C# Converter

收费,免费版有1000行代码限制。看了官网介绍后,决定使用它。

XES – Java To C#

免费,似乎用起来并不那么理想,目前的最新版本是2004年,未有更新,故放弃之。

Java to C# Converter

经过对比之后,我选择了Java to C# Coverter,此工具的更多详情,可以在官网的介绍中查看

转换过程中的信息信息,会出现在对话框中,同时也会标注在转换后的代码中。

虚拟机运行法(IKVM)

本小节主要是说 IKVM在Unity中的使用。

IKVM和Unity

话题讨论

JavaToDll导出

下图中,上图是Java的源代码,下方是转换成Dll后反编译查看的代码。

我的测试

引擎版本:Unity 4.0 / Unity 5.3.5 (目标平台测试过 Windows和Android 平台)

IKVM:ikvm-7.2.4630.5

OS:Windows 7 x64

从git或官网下载ikvm,比如我下载的ikvm-7.2.4630.5.zip,并解压

拷贝ikvm-7.2.4630.5\bin\下的所有dll 到Unity的Assets\Plugins 下

拷贝Java转换出的dll,放到Assets\Plugins 下,比如我的hello.dll

在Unity的脚本中调用java中的class,method 等等

下方是我测试过程中出现的Error,出于性能和后期调试考虑,我放弃了此种方式,采用将Java代码转换成C#源码的方式。

已知Error

当在脚本的全局变量,返回值,协程中引用了java中的class,method时,就会报以下Error。

privateExampleLibrary exampleLibrary2;

IEnumerator CoLog()

{int idx = 0;

ExampleLibrary exampleLibrary= newExampleLibrary();while (idx < 100)

{

DoLog(exampleLibrary.HelloWorld());yield return null;

idx++;

}

}

但如果是内部变量则不会有这些Error。

voidTestLog()

{

ExampleLibrary exampleLibrary= for (0; idx < 20; idx++)

{

DoLog(exampleLibrary.HelloWorld());

}

}

运行时Error

GameObject (named 'Main Camera') references runtime script in scene file. Fixing!The script behavIoUrIKVM_Java_HelloWorld' could not be instantiated!

Project中选中脚本时的Error

TypeLoadException: Could not load type ' from assembly Assembly-CSharp,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null'.

System.MonoType.GetFields (BindingFlags bindingAttr) (at/Users/builduser/buildslave/mono/build/mcs/class/corlib/System/MonoType.cs:164)

UnityEditor.MonoScriptImporterInspector.ShowFieldInfo (System.Type type,UnityEditor.MonoImporter importer,System.Collections.Generic.List`1 names,System.Collections.Generic.List`1 objects,System.Boolean& didModify) (at C:/buildslave/unity/build/Editor/Mono/Inspector/MonoScriptInspector.cs:75)

UnityEditor.MonoScriptImporterInspector.OnInspectorGUI () (at C:/buildslave/unity/build/Editor/Mono/Inspector/MonoScriptInspector.cs:117)

UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor,Int32 editorIndex,Boolean rebuildOptimizedGUIBlock,System.Boolean& showImportedObjectBarNext,UnityEngine.Rect& importedObjectBarRect) (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1231)

UnityEditor.DockArea:OnGUI()

测试代码review

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

java to csharp_Java To CSharp源代码转换相关推荐

  1. 源代码转换:Tangible Software Solutions v22.10.20

    最准确可靠的源代码转换器--Tangible Software Solutions v22.10.20 在 VB.NET.C#.Java.C++ 和 Python 之间转换,同时节省无数小时的艰苦工作 ...

  2. 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩

    编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...

  3. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util;import java.security.*; //im ...

  4. 7.Java中变量的隐式转换以及强类型转换

    1.变量的相加,(变量的数据类型一致),直接运算即可!          结论:         Java中变量的 隐式转换(数据类型的默认类型提升)         byte,short,char- ...

  5. java 时间戳和PHP时间戳 的转换 php time()

    总结一下java 时间戳和PHP时间戳 的转换问题: 由于精度不同,导致长度不一致,直接转换错误. JAVA时间戳长度是13位,如:1294890876859 PHP时间戳长度是10位, 如:1294 ...

  6. java 字母大写_Java字母大小写转换的方法

    案例: 要求从控制台接收用户输入的一个字母,如果这个字母是小写,转换为大写:如果这个字母是大写,转换为小写:只能输入字母,如果是其他值,提示数据有误! 实现代码: import java.util.S ...

  7. java中字符和字节的转换_Java最佳实践–字符到字节和字节到字符的转换

    java中字符和字节的转换 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 特别是,我们将着重于使用默认编码时如何有效地处理字符到字节和字节到字符 ...

  8. java代码编写的文本特征提取_Test1 java语言写的特征提取源代码,有搞文字识别的可以下载一看,简单易学 Develop 274万源代码下载- www.pudn.com...

    文件名称: Test1下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 35 KB 上传时间: 2015-03-02 下载次数: 46 提 供 者: 常杰 详细说 ...

  9. java 中文域名转码_转换java方法

    java date String 类型相互转换 这种转换要用到java.text.SimpleDateFormat类 字符串转换成日期类型: 方法1: 也是最简单的方法 Date date=new D ...

最新文章

  1. 人工智能的发展历史是怎样的?
  2. 小程序 按需_小程序后台操作,新手需知道的几个要点
  3. fineUI表格控件各属性说明
  4. WEB前端学习二 JS作用域和作用域链
  5. 张高兴的.NET Core IoT 入门指南:(四)使用 SPI 进行通信
  6. array 前端面试题_一则关于js数组的前端面试题
  7. 一个按键控制数码管的开和关_单片机是否能用一个按键控制数码管的显示图?...
  8. 阅读Google的C++代码规范有感
  9. maple 2022
  10. jad反编译成java,Jad java反编译指令
  11. 适合java初级程序员找工作的项目
  12. Microbiome:根际微生物影响植物开花时间
  13. 微信公众号普通消息接收接口
  14. Activity基础学习
  15. 计算机网络与技术课本,高等学校计算机科学与技术教材:计算机网络基础教程...
  16. 设计模式--工厂方法
  17. OD-火星文计算(Python)
  18. 2014华为机试,计算给定和牌麻将的番数
  19. 常用计算机维护指令,华为交换机日常维护常用7个命令
  20. messenger支持查找附近的人功能吗_现在很多的APP都有“附近的人”功能,这是哪个知识实现的呢!...

热门文章

  1. 无线蓝牙耳机佩戴舒适的有哪几款?入耳舒适的蓝牙耳机推荐
  2. 信号反射与反弹图那些事
  3. 苹果11怎么查计算机记录,iPhone11充电次数怎么查 查询iPhone11充电次数的方法
  4. 关于DataStage Designer
  5. 赛马游戏Horse Racing Winner即将启动
  6. Direct-X学习笔记--骨骼动画
  7. 利用html进行新闻网站页面的开发设计
  8. OPPO Android 开发技术面总结
  9. [前端面试] 浅谈SPA、SEO、SSR
  10. 组复制技术架构 | 深入浅出MGR