当前位置:首页 » 安卓系统 » unity调用android方法

unity调用android方法

发布时间: 2022-03-14 21:09:11

‘壹’ unity3d与android交互的sdk怎么接

1、打开Android Studio——>configure——Android SDK。

注意事项:

SDK可能附带了使其不能在不兼容的许可证下开发软件的许可证。例如产品供应商提供一个专有的SDK可能与自由软件开发抵触。

‘贰’ Unity与Android的通信问题:Unity中调用Android的jar包后,Unity生成的apk安装后找不到可运行的程序...

将Unity3D安装目录下的Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes.jar
拷贝到Android工程的libs文件夹里:
Unity3D:[3]Unity3D与Android交互的问题
右键单击classes.jar选择Build Path里面的Add to Build Path:
Unity3D:[3]Unity3D与Android交互的问题
Unity3D:[3]Unity3D与Android交互的问题
在MainActivity中继承UnityPlayerActivity。删除多余的方法,仅保留onCreate方法中的super.onCreate语句,如下:
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
添加要在unity中调用的方法,这里添加一个带一个参数的方法StartActivity来调用Android的Activity从而运行Android的代码。还添加了一个有返回值的方法GetInt,用来测试在Unity中获取android中方法的返回值。(貌似只能有一个UnityPlayerActivity,而且这个Activity不能是调用第三方SDK方法的Activity。UnityPlayerActivity只能作为Unity和Android交互的一个接口,在这里面再去调用其他的Activity)
package com.example.unitydemo;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {
private Context mContext = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}

public void StartActivity(String name) {
Intent intent = new Intent(mContext, WelcomeActivity.class);
intent.putExtra("name", name);
this.startActivity(intent);
}

public int GetInt()
{
return 1;
}
}

‘叁’ unity3d怎么调用android

unity 是一个多平台的游戏引擎。由于他的多平台,可视化的特点,受到了程序员们的关注。但是,unity也有缺陷。在发布android平台应用时,unity不能方便的调用android的接口。这样我们就只能通过android编程调用android接口。所以我们需要在Unity中调用Android的java代码。接下来我将教大家,如何在unity中调用Android的JAVA代码。
http://jingyan..com/article/af9f5a2d03235043140a4509.html

‘肆’ 如何将unity模型导入android程序中

准备工作:

下面是我总结的流程,目的是使本文思路更加清晰一些:

1.Android端代码可以在Eclipse中开发(AndroidStudio没有试,应该也可以)

2.Unity3D端代码要在Unity中开发

3.Android和Unity3D端,两边都需要加入一些代码从而可以使之关联交互。

4.将Android端代码编译成jar文件以插件形式放入到Unity端中

5.在Unity中将整个项目Build成apk文件,然后安装到手机或模拟器里运行

本文主要讲解1,2,3。对于4,5建议大家去看雨松MOMO的Unity博客的第17篇和第18篇。

UnityPlay:

在编写Android端和Unity3d端代码前,有必要先了解一下可以使两部分交互的类UnityPlay。

个人理解UnityPlay是个Unity提供给外部交互的一个接口类。

为什么是“个人理解”?这我不得不爆粗口了,TMD官网根本就没有相关的API和文档(如果大家有谁找到一定给我来一份,就当我骂自己了)。

在关联Android时,想拿到UnityPlay以及相关类的jar包可以从下面的地址找到:Unity安装路径\Editor\Data\PlaybackEngines\androidplayer\bin在bin文件夹下有一个classes.jar的jar文件,它就是我们想要的。

而在bin同目录下有一个src文件,点击到最后有3个类,分别是UnityPlayerActivity.java,UnityPlayerProxyActivity.java,UnityPlayerNativeActivity.java。前两个打开个后只有一行代码,说的是UnityPlayerActivity和UnityPlayerProxyActivity都继承自UnityPlayerNativeActivity。而打开UnityPlayerNativeActivity中居然有代码,而且我估计这应该是UnityPlayerNativeActivity的源码

由于关于UnityPlay的资料我只找到这么一个,所以我把UnityPlayerNativeActivity中的代码都贴出来,如果我注解有不对的地方希望大家指正。

/**
* UnityPlayerActivity,UnityPlayerProxyActivity都继承自UnityPlayerNativeActivity
* 而UnityPlayerNativeActivity继承自NativeActivity
* 在该类里定义了一些和ANDROID生命周期相同的回调方法,留给自定义的Activity子类重写。
*/
public class UnityPlayerNativeActivity extends NativeActivity
{
//UnityPlayer的引用,并且我们不能改变这个引用变量的名字,它被native code所引用
protected UnityPlayer mUnityPlayer;

protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
// 设置显示窗口参数
getWindow().takeSurface(null);
setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
getWindow().setFormat(PixelFormat.RGB_565);

// 创建一个UnityPlayer对象,并赋值给全局的引用变量
mUnityPlayer = new UnityPlayer(this);
//为UnityPlayer设置一些参数
if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1);
boolean trueColor8888 = false;
// UnityPlayer.init()方法需要在将view附加到layout之前调用。它将会调用native code
mUnityPlayer.init(glesMode, trueColor8888);

// 从UnityPlayer中获取到Unity的View视图
View playerView = mUnityPlayer.getView();
// 将Unity视图加载到根视图上
setContentView(playerView);
// 使Unity视图获取焦点
playerView.requestFocus();
}
protected void onDestroy ()
{
// 当Activity结束的时候调用UnityPlayer.quit()方法,它会卸载之前调用的native code
mUnityPlayer.quit();
super.onDestroy();
}

// 下面几个方法都是ANDROID相关回调方法,确保在ANDROID执行相应方法时UnityPlayer也需调用相应方法
protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}

public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mUnityPlayer.configurationChanged(newConfig);
}
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
mUnityPlayer.windowFocusChanged(hasFocus);
}
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.onKeyMultiple(event.getKeyCode(), event.getRepeatCount(), event);
return super.dispatchKeyEvent(event);
}
}
看完这个类后就知道了为什么在自定义的Activity中继承了UnityPlayerActivity等类以后,只要重写了onCreate并调用super.onCreate()方法后不需要任何其他的代码就会自动的显示出Unity3D的视图。因为初始化Unity视图的代码都在UnityPlayerNativeActivity父类中实现了。

ANDROID端代码:

在写ANDROID代码的时候,一定要导入Unity3D提供给我们的jar包,jar包的位置我在上面说了。引入jar包加入到buildpath中这些最基本的我就不多说了。

要想和Unity交互,我们就不能继承ANDROID提供给我们的Activity,我们需要继承刚才jar包中引入的Unity提供的Activity类,一共有这么3个:

UnityPlayerActivity,UnityPlayerProxyActivity,UnityPlayerNativeActivity。具体区别不知道,因为没有文档,没有API,没有源码(这里再次鄙视一下)。刚才我们看过UnityPlayerNativeActivity的代码(虽然很短,但我觉得这个就是源码),知道UnityPlayerActivity,UnityPlayerProxyActivity都是它的子类,而且最终父类为NativeActivity。所以我们继承Unity提供的最外层的子类是最好的选择,我这里选择的是UnityPlayerActivity,因为名字最简单,觉得该封装的都应该封装好了。

public class MainActivity extends UnityPlayerActivity {

private Button topButton;
private Button bottomButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// 设置test为我们的根布局
setContentView(R.layout.test);

// 通过刚才的源码分析,知道mUnityPlayer为一个全局的引用变量,而且已经在父类中设置好了,所以直接拿来用就可以了
View playerView = mUnityPlayer.getView();
// 将Unity的视图添加到我们为其准备的父容器中
LinearLayout ll = (LinearLayout) findViewById(R.id.unityViewLyaout);
ll.addView(playerView);

// 上面的button设置监听器
topButton = (Button) findViewById(R.id.topButton);
topButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
//发送消息给Unity端,该函数第一个参数为接受消息的类对象,第二个该类对象用接受消息的方法,第三个参数为传递的消息
//所以下面的意思就为:调用Main Camera下面的Previous方法,传送的消息为空
UnityPlayer.UnitySendMessage("Main Camera","Previous","");
}
});

// 为下面的button设置监听器
bottomButton = (Button) findViewById(R.id.bottomBtn);
bottomButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
//调用Main Camera下面的Next方法,传送的消息为空
UnityPlayer.UnitySendMessage("Main Camera","Next","");
}
});
}
}
最后看一下Android端的布局文件,布局很简单,上下各有一个button按钮,两个按钮中间是Unity的视图。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
android:id="@+id/topButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="PREVIOUS" />

<LinearLayout
android:id="@+id/unityViewLyaout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomBtn"
android:layout_below="@+id/topButton"
android:orientation="horizontal" >
</LinearLayout>

<Button
android:id="@+id/bottomBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="NEXT" />

</RelativeLayout>
Android端的代码就介绍完了,很简单。唯一的难点就是UnityPlayerActivity和UnityPlayer的使用,就这两个破玩意花了我好几天的时间,很简单的东西不知道为什么官方不给个文档或者API(也可能我太挫没找到。。。)
转载

‘伍’ unity3d怎么调用android查看运行消耗的内存

查看内存使用的方式有很多种,但是各个方式查看到的结果可能会有微略不同。
方式一,Running services
通过手机上Running services的Activity查看,可以通过Setting->Applications->Running services进。
关于Running services的详细内容请参考《Android中使用"running services"查看service进程内存》
方式二,使用ActivityManager的getMemoryInfo(ActivityManager.MemoryInfo outInfo)
ActivityManager.getMemoryInfo()主要是用于得到当前系统剩余内存的及判断是否处于低内存运行。
实例1:

private void displayBriefMemory() {
final ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(info);
Log.i(tag,"系统剩余内存:"+(info.availMem >> 10)+"k");
Log.i(tag,"系统是否处于低内存运行:"+info.lowMemory);
Log.i(tag,"当系统剩余内存低于"+info.threshold+"时就看成低内存运行");
}
ActivityManager.getMemoryInfo()是用ActivityManager.MemoryInfo返回结果,而不是Debug.MemoryInfo,他们不一样的。
ActivityManager.MemoryInfo只有三个Field:
availMem:表示系统剩余内存
lowMemory:它是boolean值,表示系统是否处于低内存运行
hreshold:它表示当系统剩余内存低于好多时就看成低内存运行
方式三,在代码中使用Debug的getMemoryInfo(Debug.MemoryInfo memoryInfo)或ActivityManager的MemoryInfo[] getProcessMemoryInfo(int[] pids)

该方式得到的MemoryInfo所描述的内存使用情况比较详细.数据的单位是KB.
MemoryInfo的Field如下
dalvikPrivateDirty: The private dirty pages used by dalvik。
dalvikPss :The proportional set size for dalvik.
dalvikSharedDirty :The shared dirty pages used by dalvik.
nativePrivateDirty :The private dirty pages used by the native heap.
nativePss :The proportional set size for the native heap.
nativeSharedDirty :The shared dirty pages used by the native heap.
otherPrivateDirty :The private dirty pages used by everything else.
otherPss :The proportional set size for everything else.
otherSharedDirty :The shared dirty pages used by everything else.

Android和Linux一样有大量内存在进程之间进程共享。某个进程准确的使用好多内存实际上是很难统计的。
因为有paging out to disk(换页),所以如果你把所有映射到进程的内存相加,它可能大于你的内存的实际物理大小。
dalvik:是指dalvik所使用的内存。
native:是被native堆使用的内存。应该指使用C\C++在堆上分配的内存。
other:是指除dalvik和native使用的内存。但是具体是指什么呢?至少包括在C\C++分配的非堆内存,比如分配在栈上的内存。puzlle!
private:是指私有的。非共享的。
share:是指共享的内存。
PSS:实际使用的物理内存(比例分配共享库占用的内存)

Pss:它是把共享内存根据一定比例分摊到共享它的各个进程来计算所得到进程使用内存。网上又说是比例分配共享库占用的内存,那么至于这里的共享是否只是库的共享,还是不清楚。
PrivateDirty:它是指非共享的,又不能换页出去(can not be paged to disk )的内存的大小。比如Linux为了提高分配内存速度而缓冲的小对象,即使你的进程结束,该内存也不会释放掉,它只是又重新回到缓冲中而已。
SharedDirty:参照PrivateDirty我认为它应该是指共享的,又不能换页出去(can not be paged to disk )的内存的大小。比如Linux为了提高分配内存速度而缓冲的小对象,即使所有共享它的进程结束,该内存也不会释放掉,它只是又重新回到缓冲中而已。
具体代码请参考实例1
注意1:MemoryInfo所描述的内存使用情况都可以通过命令adb shell "mpsys meminfo %curProcessName%" 得到。
注意2:如果想在代码中同时得到多个进程的内存使用或非本进程的内存使用情况请使用ActivityManager的MemoryInfo[] getProcessMemoryInfo(int[] pids),
否则Debug的getMemoryInfo(Debug.MemoryInfo memoryInfo)就可以了。
注意3:可以通过ActivityManager的List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()得到当前所有运行的进程信息。
ActivityManager.RunningAppProcessInfo中就有进程的id,名字以及该进程包括的所有apk包名列表等。
注意4:数据的单位是KB.
方式4、使用Debug的getNativeHeapSize (),getNativeHeapAllocatedSize (),getNativeHeapFreeSize ()方法。
该方式只能得到Native堆的内存大概情况,数据单位为字节。
static long getNativeHeapAllocatedSize()
Returns the amount of allocated memory in the native heap.
返回的是当前进程navtive堆中已使用的内存大小
static long getNativeHeapFreeSize()
Returns the amount of free memory in the native heap.
返回的是当前进程navtive堆中已经剩余的内存大小
static long getNativeHeapSize()
Returns the size of the native heap.
返回的是当前进程navtive堆本身总的内存大小
示例代码:

Log.i(tag,"NativeHeapSizeTotal:"+(Debug.getNativeHeapSize()>>10));
Log.i(tag,"NativeAllocatedHeapSize:"+(Debug.getNativeHeapAllocatedSize()>>10));
Log.i(tag,"NativeAllocatedFree:"+(Debug.getNativeHeapFreeSize()>>10));
注意:DEBUG中居然没有与上面相对应的关于dalvik的函数。
方式五、使用mpsys meminfo命令。
我们可以在adb shell 中运行mpsys meminfo命令来得到进程的内存信息。在该命令的后面要加上进程的名字,以确定是哪个进程。
比如"adb shell mpsys meminfo com.teleca.robin.test" 将得到com.teleca.robin.test进程使用的内存的信息:

Applications Memory Usage (kB):
Uptime: 12101826 Realtime: 270857936
** MEMINFO in pid 3407 [com.teleca.robin.test] **
native dalvik other total
size: 3456 3139 N/A 6595
allocated: 3432 2823 N/A 6255
free: 23 316 N/A 339
(Pss): 724 1101 1070 2895
(shared dirty): 1584 4540 1668 7792
(priv dirty): 644 608 688 1940

Objects
Views: 0 ViewRoots: 0
AppContexts: 0 Activities: 0
Assets: 3 AssetManagers: 3
Local Binders: 5 Proxy Binders: 11
Death Recipients: 0
OpenSSL Sockets: 0

SQL
heap: 0 memoryUsed: 0
pageCacheOverflo: 0 largestMemAlloc: 0

Asset Allocations
zip:/data/app/com.teleca.robin.test-1.apk:/resources.arsc: 1K
"size" 表示的是总内存大小(kb)。, "allocated" 表示的是已使用了的内存大小(kb),, "free"表示的是剩余的内存大小(kb), 更多的可以参照方式三和方式四中的描述
现在已经有了自动提取汇总mpsys meminfo信息的工具,具体请参照《Android内存泄露利器(内存统计篇)》及其系列文章。
方式六、使用 "adb shell procrank"命令
如果你想查看所有进程的内存使用情况,可以使用"adb shell procrank"命令。命令返回将如下:

PID Vss Rss Pss Uss cmdline
188 75832K 51628K 24824K 19028K system_server
308 50676K 26476K 9839K 6844K system_server
2834 35896K 31892K 9201K 6740K com.sec.android.app.twlauncher
265 28536K 28532K 7985K 5824K com.android.phone
100 29052K 29048K 7299K 4984K zygote
258 27128K 27124K 7067K 5248K com.swype.android.inputmethod
270 25820K 25816K 6752K 5420K com.android.kineto
1253 27004K 27000K 6489K 4880K com.google.android.voicesearch
2898 26620K 26616K 6204K 3408K com.google.android.apps.maps:FriendService
297 26180K 26176K 5886K 4548K com.google.process.gapps
3157 24140K 24136K 5191K 4272K android.process.acore
2854 23304K 23300K 4067K 2788K com.android.vending
3604 22844K 22840K 4036K 3060K com.wssyncmldm
592 23372K 23368K 3987K 2812K com.google.android.googlequicksearchbox
3000 22768K 22764K 3844K 2724K com.tmobile.selfhelp
101 8128K 8124K 3649K 2996K /system/bin/mediaserver
3473 21792K 21784K 3103K 2164K com.android.providers.calendar
3407 22092K 22088K 2982K 1980K com.teleca.robin.test
2840 21380K 21376K 2953K 1996K com.sec.android.app.controlpanel
......................................................................................................................
关于VSS,RSS,PSS,USS的意义请参考《Android内存之VSS/RSS/PSS/USS》
注意1:这里的PSS和方式四PSS的total并不一致,有细微的差别。为什么呢?这是因为procrank 命令和meminfo命令使用的内核机制不太一样,所以结果会有细微差别
注意2:这里的Uss 和方式四的Priv Dirtyd的total几乎相等.他们似乎表示的是同一个意义。但是现在得到的关于它们的意义的解释却不太相同。难道这里Private的都是dirty(这里指不能换页)? Puzzle!
方式七、使用"adb shell cat /proc/meminfo" 命令。
该方式只能得出系统整个内存的大概使用情况。
MemTotal: 395144 kB
MemFree: 184936 kB
Buffers: 880 kB
Cached: 84104 kB
SwapCached: 0 kB
................................................................................................
MemTotal :可供系统和用户使用的总内存大小 (它比实际的物理内存要小,因为还有些内存要用于radio, DMA buffers, 等).
MemFree:剩余的可用内存大小。这里该值比较大,实际上一般Android system 的该值通常都很小,因为我们尽量让进程都保持运行,这样会耗掉大量内存。
Cached: 这个是系统用于文件缓冲等的内存. 通常systems需要20MB 以避免bad paging states;。当内存紧张时,the Android out of memory killer将杀死一些background进程,以避免他们消耗过多的cached RAM ,当然如果下次再用到他们,就需要paging. 那么是说background进程的内存包含在该项中吗?
方式八,使用“adb shell ps -x”命令
该方式主要得到的是内存信息是VSIZE 和RSS。
USER PID PPID VSIZE RSS WCHAN PC NAME
.........................省略.................................
app_70 3407 100 267104 22056 ffffffff afd0eb18 S com.teleca.robin.test (u:55, s:12)
app_7 3473 100 268780 21784 ffffffff afd0eb18 S com.android.providers.calendar (u:16, s:8)
radio 3487 100 267980 21140 ffffffff afd0eb18 S com.osp.app.signin (u:11, s:12)
system 3511 100 273232 22024 ffffffff afd0eb18 S com.android.settings (u:11, s:4)
app_15 3546 100 267900 20300 ffffffff afd0eb18 S com.sec.android.providers.drm (u:15, s:6)
app_59 3604 100 272028 22856 ffffffff afd0eb18 S com.wssyncmldm (u:231, s:54)
root 4528 2 0 0 c0141e4c 00000000 S flush-138:13 (u:0, s:0)
root 4701 152 676 336 c00a68c8 afd0e7cc S /system/bin/sh (u:0, s:0)
root 4702 4701 820 340 00000000 afd0d8bc R ps (u:0, s:5)
VSZIE:意义暂时不明。
VSS:请参考《Android内存之VSS/RSS/PSS/USS》
注意1:由于RSS的价值不是很大,所以一般不用。
注意2:通过该命令提取RSS,已经有了工具,具体参照《Android内存泄露利器(RSS内存统计篇)》及其系列。

‘陆’ 如何在Unity中调用Android的JAVA代码

1.首先我们要创建一个android项目

6.接下来就是如何在C#中调用android的方法的代码了。

加入如下代码。

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

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

jo.Call("StartActivity0","第一个Activity");

先得到AndroidJavaClass,然后得到AndroidjavaObject就是当前Activity的对象,也就是我们在上面创建的主UnityTestActivity.JAVA。拿到它的对象后调用jo.Call()参数1表示调用UnityTestActivity.JAVA类中的方法名称,参数2表示该方法传递过去的参数。如下图所示:“第一个Activity”与“第二个Activit”就是我在C#中传递过去的字符串。


发布成android平台apk

‘柒’ 如何在unity中调用android的剪切板

1.首先新建一个android工程,ClipboardTools类不用继承任何类,包名com.androidclicp.clip,然后在该类中填写如下代码(jdk等级4.0版本以上,不然会报错)
public class ClipboardTools {
public static ClipboardManager clipboard = null;
// 向剪贴板中添加文本
public void TextToClipboard(final Context activity, final String str) throws Exception
{
if(Looper.myLooper() == null)
{
Looper.prepare();
}
Handler handler = new Handler();
clipboard = (ClipboardManager) activity.getSystemService(Activity.CLIPBOARD_SERVICE);
ClipData textCd = ClipData.newPlainText("data", str);
clipboard.setPrimaryClip(textCd);
handler.getLooper().quit();
}
// 从剪贴板中获取文本
public String getTextFromClipboard() {

if (clipboard != null && clipboard.hasPrimaryClip()
&& clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
ClipData cdText = clipboard.getPrimaryClip();
ClipData.Item item = cdText.getItemAt(0);
return item.getText().toString();

}
return "null";
}
}
写完就ok了,然后把该工程导出jar包,只需要导出你所写的这个类就可以了
2.然后在unity工程中新建一个Plugins/Android/bin, 然后把你所写的jar包导入即可,在unity新建一个脚本,来使用jar包中的东西,
此时只写功能函数,具体脚本不写了,如下:
#if UNITY_ANDROID
AndroidJavaObject androidObject = new AndroidJavaObject("com.androidclicp.ClipboardTools");
AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null)
return;
// 复制到剪贴板
androidObject.Call("TextToClipboard", activity, qq.text);
// 从剪贴板中获取文本
string text = androidObject.Call<string>("getTextFromClipboard");
Debug.Log(text + "------------------------");
#endif
导进去的报名com.androidclicp.clip是指你android工程中的报名,而不是你导出之后自己定义的那个包名,这个包名是随便去的,unity中引用的还是android中的包名,具体讲就是你写的那个android脚本的命名空间。
3,使用unity发布andrid版本的时候也要在设置中改一下最小sdk版本,这样就ok了。

‘捌’ unity inputfield 输入怎么调用安卓

Android平台更换字体的基本原理是,字体是在被保存在根目录下的/system/fonts文件夹内,其中“DroidSansFallback.ttf”是中文字体,“DroidSans.ttf”是英文。
第一步,把字体文件复制到要SD卡根目录(只是方便查找);
第二步,打开root管理器,找到刚才复制在SD卡的字体,长按字体出来选项,选择移动;

返回根目录,进入System,再进入Fonts,选择Paste即可:

‘玖’ 谁在Unity3d里面调用过android的微信分享功能

unity3d 本质上是一个游戏开发软件,用来做android应用虽然也可以但是不如java好,毕竟本身android的api是java的,某些功能在unity3d中没有办法实现,只能用插件的方法调用java的代码,所以说除非是做游戏,不然最好还是不要用unity开发

‘拾’ 如何进行Unity3D与Android消息传递

1.Unity工程导出为Android Studio工程
(我个人用的U3D版本是5.1.1,已经支持直接将Unity工程导出为AS工程了,以前的版本我不敢保证.)

首先要写好Unity工程里面的脚本,包括希望Android调用的方法和调用Android方法的方法,这个在下面会有详细叙述;接下来导出AS工程,方法是:
File里面的Build Settings -> 平台选择Android,在Player Setting里面设置API版本和包名(包名很重要) -> 点击Build Setting中的Google Android Project复选框 -> Export

2. AS打开导出的工程

首先随便打开一个AS工程,然后FIle -> New -> Import Project -> 选刚才导出来的工程 -> 等待Gradle -> 以此工程为基础继续开发Android代码

3. Android 调用 Unity 脚本中的方法

这里首先对Unity脚本进行一点说明,以C#为例:
在OnStart()里面要写入
this.name = "A"

某个要调用的方法设置为public类型,名称为B,参数为C
在一个Extend UnityPlayerActivity的Activity里,直接使用
UnityPlayer.UnitySendMessage("A","B","C");
就可以调用脚本中的方法了.

4.Unity脚本调用Android方法

首先要知道的是,在Unity脚本里写调用安卓方法的时候,这个方法还不需要存在,也不需要把安卓的代码压成jar包放进Unity工程.但是,要调用的方法必须是静态方法.

刚说过的导出工程时候的包名很重要,假设是com.hu.solare;再假设在工程被导入到AS后,在这个包中编写了MainActivity.class,其中包含静态方法onCall(String str).则可以在Unity脚本中提前写好:
AndroidJavaClass jc = new AndroidJavaCalss("com.hu.solare.MainActivity");
jc.callStatic("onCall","String")
即可调用onCall方法.

热点内容
python网站制作 发布:2025-03-26 14:01:52 浏览:967
哪个安卓手机打字好用 发布:2025-03-26 14:00:22 浏览:668
c编译后产生的文件 发布:2025-03-26 13:54:49 浏览:612
我的世界服务器名称怎么改成彩色 发布:2025-03-26 13:54:48 浏览:913
电脑上企业微信连不上服务器 发布:2025-03-26 13:50:12 浏览:669
ios天天风之旅脚本 发布:2025-03-26 13:42:27 浏览:173
红中赖子杠算法 发布:2025-03-26 13:40:26 浏览:830
上网如何找密码 发布:2025-03-26 13:31:41 浏览:752
想上传照片 发布:2025-03-26 13:19:07 浏览:379
安卓手机如何3g变4g 发布:2025-03-26 13:18:59 浏览:260