当前位置: 58彩票app下载 > 编程技术 > 正文

unity3d与android交互

时间:2019-09-18 11:14来源:编程技术
落到实处unity3d导出到androidstudio工程并封装为library,供其余工程导入module直接利用。最终效果: 点击ZoomIn、ZoomOut的开关,通过android端调用unity中艺术,举行放大放小; 触摸unity中的3

落到实处unity3d导出到android studio工程并封装为library,供其余工程导入module直接利用。最终效果:

  • 点击ZoomIn、ZoomOut的开关,通过android端调用unity中艺术,举行放大放小;
  • 触摸unity中的3D立方体,调用android端的ShowDialog调用android端的方法展现原生的dialog。

前不久看了下unity3d,关于unity3d和android端的相互参照他事他说加以考察了有的材质实行测量试验,现简单总括记录,同一时间以供参照他事他说加以考察。

软件版本如下:unity3d:5.5.0f3android studio:2.2

csdn链接

1、在场景中增加一个粗略的立方体Cube,加入以下测量检验用的本子

using UnityEngine;using System.Collections;public class CubeScripts : MonoBehaviour { /// 定义旋转速度 public float RotateSpeed=45; /// 定义摄像机的最近距离 private float mNear=2.5F; /// 摄像机当前距离 private float mDistance=5F; /// 定义摄像机的最远距离 private float mFar=7.5F; /// 摄像机的缩放速率 private float mZoomRate=0.5F; /// 主摄像机 private Transform mCamera; /// 在Start()方法中我们设定了游戏体的名称,因为我们在 /// Android项目中需要用到这个名称,同时获取主相机对象 void Start () { this.name="Main Cube"; mCamera=Camera.main.transform; } /// 在Update()方法中我们让Cube按照一定的速度进行旋转 void Update () { transform.Rotate(Vector3.up * Time.deltaTime * RotateSpeed); } /// 定义一个放大的方法供外部调用 public void ZoomIn() { mDistance-=mZoomRate; mDistance=Mathf.Clamp(mDistance,mNear,mFar); mCamera.position=mCamera.rotation * new Vector3(0,0,-mDistance)+transform.position; } /// 定义一个缩小的方法供外部调用 public void ZoomOut() { mDistance+=mZoomRate; mDistance=Mathf.Clamp(mDistance,mNear,mFar); mCamera.position=mCamera.rotation * new Vector3(0,0,-mDistance)+transform.position; } /// 触摸立方体,调用android端的ShowDialog方法 void OnMouseDown() { ZoomOut(); Debug.Log("MOUSE DOWN"); using (AndroidJavaClass jc = new AndroidJavaClass("com.oden.u2as.UnityPlayerActivity")) { // jc.CallStatic("ShowDialog"); jc.CallStatic("ShowDialog", "str"); } }}

2、导出android studio工程

潜心修改包名导出后工程投入以下格局:为unity工程中先行安装好的调用方法

public static void ShowDialog(final String string) { UnityPlayer.currentActivity.runOnUiThread(new Runnable() { @Override public void run() { Log.d("SYD", "ShowDialog: " + string); AlertDialog.Builder builder = new AlertDialog.Builder(UnityPlayer.currentActivity) .setMessage("哈哈哈这是Android的原生弹窗") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { UnityPlayer.UnitySendMessage("Camera", "NativeTipClosed", ""); } }); builder.show; }

3、将导出的工程安装为library

apply plugin: 'com.android.library'注:遭逢报错化解记录:

  • 在<manifest> 下添加 xmlns:tools=""
  • 在<application> 下添加tools:replace="android:icon, android:theme"

4、其余工程import该module

5、别的工程中要求用到该3D效果的activity承继UnityPlayerNativeActivity

public class MainActivity extends UnityPlayerNativeActivity { private Button BtnZoomIn, BtnZoomOut; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取显示Unity视图的父控件 LinearLayout mParent = (LinearLayout) findViewById(R.id.UnityView); //获取Unity视图 View mView = mUnityPlayer.getView(); //将Unity视图添加到Android视图中 mParent.addView; //放大 BtnZoomIn =  findViewById(R.id.BtnZoomIn); BtnZoomIn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { UnityPlayer.UnitySendMessage("Main Cube", "ZoomIn", ""); } }); //缩小 BtnZoomOut =  findViewById(R.id.BtnZoomOut); BtnZoomOut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { UnityPlayer.UnitySendMessage("Main Cube", "ZoomOut", ""); } }); }}

[Unity3D]Unity3D游戏开荒之从Unity3D到Eclipse

什么样开展Unity3D与Android新闻传递

与iOS、Android的竞相 推行篇——主动调用

编辑:编程技术 本文来源:unity3d与android交互

关键词: