Java可以应用到Unity引擎当中吗?

Python015

Java可以应用到Unity引擎当中吗?,第1张

java不太适合unity引擎或者说java不适合游戏开发:

Java不具备脚本特性。很多游戏的逻辑层是用脚本或者胶水语言写的。这是因为游戏的核心架构是一个类似实时模拟器的系统。绝大多数引擎都把每个单元封装成一个module。对于每一个module的代码都用脚本来写,方便新增和删除。但是Java的语法繁琐,面向对象逻辑结构深,不太适合脚本化。

Java作为静态语言,内存控制较弱。这一点其实并不主要。因为大多数引擎都是C++底层,上层用脚本。所以Java对内存控制弱的部分当然也可以用C++控制。但是Java脚本性,语言表达能力的不足,Java作为上层语言太繁琐,作为下层语言对内存控制能力不如C++。

Java的跨语言能力较弱。现代化语言都有Foreign language interface用于跨语言交互。其主要都是C接口。然后Java在这方面的能力不算非常多,这就导致了Java不太方便Host其他语言。

最重要一点,Java语言表达能力低。Java当然是个好语言,而且设计非常严谨。严谨的好处是大型企业应用更健壮,坏处是表达能力太弱。在游戏中,矩阵向量运算是最最最最频繁的运算之一。不支持算符重载的Java,相信我,写不超过100行代码你就会崩溃。

Unity调用安卓脚本:

unity端

//通过报名获取java class

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")

        //获取当前的activity

        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")

string str="要传送的数据"

        //调用activity里面的方法,传入方法名和参数

         jo.Call("AndroidMethod", str)

在android端启动unity场景的那个activity代码中加上:

public void AndroidMethod(String str)

{

    Toast.makeText(context,"android已收到:"+str,Toast.LENGTH_SHORT).show()

}

安卓调用Unity脚本:

String str="my android message"

//Directional light为挂了脚本的游戏物体

UnityPlayer.UnitySendMessage("Directional light","ReceiveMsg",str)

unity端新建一个脚本,挂在场景的Directional light上,

public void ReceiveMsg(string str)

{

    print("unity收到:"+str)

}