- 最后登录
- 2019-1-10
- 注册时间
- 2017-2-9
- 阅读权限
- 100
- 积分
- 6720
- 纳金币
- 5474
- 精华
- 6
|
unity调用android的方法
我们需要在运行起来Unity引擎之后,调用Java类中的方法获取怪兽的姓名,就需要Uniy调用Android的方法。
unity调用java方法一共有四种形式,分别是:
1.没有返回值的普通方法
AndroidJavaObject jo = new AndroidJavaObject("android.content.res.Configuration");
jo.Call("setToDefaults");
2.带有返回值的普通方法
AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", "some string");
int hash = jo.Call<int>("hashCode");
3.没有返回值的静态方法
AndroidJavaObject jo = new AndroidJavaObject("android.os.Binder");
jo.CallStatic("flushPendingCommands");
4.带有返回值的静态方法
AndroidJavaObject jo = new AndroidJavaObject("java.lang.String");
string valueString = jo.CallStatic<string>("valueOf", 42.0);
我们往游戏对象上绑定一些操作–Operate.cs :
using UnityEngine;
using System.Collections;
public class Operate : MonoBehaviour
{
public Transform target;
public UILabel label;
public bool flag = true;
/// <summary>
/// 定义旋转速度
/// </summary>
public float RotateSpeed=45;
// Use this for in itialization
void Start ()
{
//Debug.Log("hello");
this.name = "Manager";
GetData ();
}
/// <summary>
/// 通过调用android中的方法获取name,并为label赋值
/// </summary>
void GetData()
{
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
string name = jo.Call <string>("getName", "成功调用android方法");
label.text = name;
}
// Update is called once per frame
void Update ()
{
//target.Rotate (Vector3.up * Time.deltaTime * RotateSpeed);
}
void OnClick()
{
Screen.orientation = ScreenOrientation.Landscape;
if (flag)
{
target.localScale = new Vector3 (0.5f, 0.5f, 0.5f);
flag = false;
//label.text = "123456";
}
else
{
target.localScale = new Vector3 (0.75f, 0.75f, 0.75f);
flag = true;
//label.text = "000000";
}
}
/// <summary>
/// 顶掉之前的scene
/// </summary>
void Unload()
{
Application.LoadLevel (1);
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
jo.Call ("makePauseUnity");
}
/// <summary>
/// 放大
/// </summary>
void ZoomIn()
{
target.localScale = new Vector3 (0.75f, 0.75f, 0.75f);
}
/// <summary>
/// 缩小
/// </summary>
void ZoomOut()
{
target.localScale = new Vector3 (0.5f, 0.5f, 0.5f);
}
}
代码和场景编写好之后,就可以使用unity到处apk文件运行了。不过我们需要在eclipse中进行二次开发,所以需要到处android工程。
在导出的时候,可以选择导出”Google Android Project”。
在导出android工程或apk之前,需要在”Player Settings”进行一些配置:
assets文件下面是unity的一些资源文件,包括场景和渲染的文件。
libs下面当然就是jar包和so文件了。
src下面包含三个java类。建议使用UnityPlayerActivity.java
打开UnityPlayerActivity之后,会发现里面有一个对象时UnityPlayer的实例,我们做android中嵌套U3D场景的时候,就是把这个实例当成一个view添加到我们的布局中。
你已经有android工程了,此时只需要把assets的文件和libs的包拷贝到你的项目中去,在把需要配置的类在AndroidManifest.xml中配置一下。
没有工程,那么只需要把unity导出的工程导入你的IDE中即可。
看一下MainActivity的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E0EEE0"
android:gravity="center_horizontal"
androidrientation="vertical" >
<!-- 3D视图区域 -->
<LinearLayout
android:id="@+id/u3d_layout"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="#a6a9af"
androidrientation="vertical" >
</LinearLayout>
<!-- 放大 -->
<Button
android:id="@+id/zoom_in_btn"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:padding="10dp"
android:text="放大" />
<!-- 缩小 -->
<Button
android:id="@+id/zoom_out_btn"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:padding="10dp"
android:text="缩小" />
<!-- 全屏 -->
<Button
android:id="@+id/u3d_fullscreen_btn"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:padding="10dp"
android:text="全屏" />
</LinearLayout>
|
|