2019-03-16 17:26:01 qq_35037137 阅读数 132

 通常情况下,Unity可以通过双击桌面上的图标启动,也可以通过输入命令行启动(例如,MacOS终端或者Windows的CMD窗口),通过这种方式在启动时会接受命令和信息,这对测试对象,自动生成和其他制作任务是非常有用的。

在MacOs中,你可以在终端输入以下命令来启动Unity(下面是我的Unity安装目录)

/Applications/Unity/Unity.app/Contents/MacOS/Unity

在windows下,你可以在CMD中输入(下面是我的Unity安装目录)

"C:\Program Files (x86)\Unity\Editor\Unity.exe"

如上所述,编辑器和建立游戏也能在启动时选择性的提供额外的命令和信息。这是使用下面的命令行参数

-batchmode

在批处理模式下运行Unity。应始终与其他命令行参数一起使用,因为它确保不会弹出窗口,无需任何人为的干预。当脚本代码在执行过程中发生异常,资源服务器更新失败或其他操作失败时Unity将立即退出,并返回代码为1。请注意,在批处理模式下, Unity将向控制台发送输出版本最小的日志。当然,日志文件将包含完整的日志信息。

-quit

其他命令执行完毕后将退出Unity编辑器。请注意,这可能会导致错误消息被隐藏(但他们将显示在Editor.log文件)

-buildWindowsPlayer <pathname>

建立一个单独的Windows游戏(例如:-buildWindowsPlayer path/to/your/build.exe)

-buildOSXPlayer <pathname>

建立Mac游戏(例如:-buildOSXPlayer path/to/your/build.app)

-importPackage <pathname>

导入提供的package,不会显示导入对话框

-createProject <pathname>

根据提供的路径建立一个空项目

-projectPath <pathname>

打开指定路径的项目

-logFile <pathname>

Specify where the Editor log file will be written.

指定将要被写入编辑的log文件

-assetServerUpdate <IP[:port] projectName username password [r <revision>]>

可通过ip端口强制更新资源服务器的项目。端口是可选的,如果不是的话可以假定一个标准端口(10733)。最好使用此命令配合- projectpath参数确保你在正确的项目里工作。如果没有提供项目名字是那么就是最后一个Unity打开的项目。如果没有选择项目的路径则由- projectpath自动创建。

-exportPackage <exportAssetPath exportFileName>

根据路径导出package。exportAssetPath是一个文件夹(相对Unity项目的根目录)为了导出Unity项目并且exportFileName是package的名称。目前,此选项只能在同一个时间导出整个文件夹。这个命令通常需要使用- projectpath参数

-nographics (Windows only)

当运行在批处理模式,不会初始化显卡设备。这使得它可以在你的机器上自动按工作流程运行,甚至它没有GPU。

-executeMethod <ClassName.MethodName>

在Unity启动的同时会执行静态方法,该项目是开放的并且是在可选资源服务器更新完成之后。这可以用来不断的整合,进行单元测试,制作模型,准备一些数据等。如果你想通过命令行返回一个错误,你可以抛出一个异常,会引发代码为1的Unity关闭或其他引发EditorApplication.Exit非零代码。

Unity Standalone Player command line arguments

Unity 独立版游戏命令行参数

Standalone players built with Unity also understand some command line arguments:

Unity创建独立版游戏也要了解一些命令行参数:

-batchmode

Run the game in "headless" mode. The game will not display anything or accept user input. This is mostly useful for running servers fornetworked games.

在"headless"模式下运行游戏。游戏将不显示任何内容,或接受用户输入。这对运行网络游戏的服务器有很大的作用的。

-force-opengl (Windows only)

Make the game use OpenGL for rendering, even if Direct3D is available. Normally Direct3D is used but OpenGL is used if Direct3D 9.0c is not available.

让游戏使用OpenGL进行渲染,即使有可用的Direct3D。通常情况是使用Direct3D,但如果是Direct3D 9.0c的不可用的话则会选用OpenGL。

-single-instance (Windows only)

Allow only one instance of the game to run at the time. If another instance is already running then launching it again with -single-instance will just focus the existing one.

在同一时候只允许一个游戏实例运行。如果另一个实例已在运行,然后再次通过 -single-instance启动它的话会调节到现有的这个实例。

-nolog (Windows only)

Do not produce output log. Normally output_log.txt is written in the *_Data folder next to the game executable, where Debug.Log output is printed.

不产生输出日志。 通常output_log.txt被写在游戏输出目录下的*_Data文件夹中 ,在debug.log中打印输出的地方。

更多unity2018的功能介绍请到paws3d爪爪学院查找。链接https://www.paws3d.com/learn/,也可以加入unity学习讨论群935714213

近期更有资深开发人士直播分享unity开发经验,详情请进入官网或加入QQ群了解

 

2018-11-08 09:38:50 qq_34421469 阅读数 198

如何将统一打包出来的APK隐藏,然后通过其他APK打开它。我在网上查了半天试了半天。就在要下班的时候试到一种是可以实现的。这边废话不多说,直接上代码。

  1. 隐藏APK图标,即APK入口,这里需要重新配置Androidmanifests文件,在这个文件里将活动标签里的内容改成下面的代码: 

<activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:label="@string/app_name">
            <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <data android:scheme="xl" android:host="goods" android:path="/goodsDetail" android:port="8888"/>
              <!--下面这几行也必须得设置-->
              <category android:name="android.intent.category.DEFAULT"/>
              <action android:name="android.intent.action.VIEW"/>
              <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>

 

2.在安卓中添加如何打开隐藏应用程序的代码:

 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
 startActivity(intent);

这样代码就完成了。至于如何在统一中调用打开隐藏APP的实现我在前面的博客中已经详细的写过了。有需要的可以去看一下。

3.在以上实现完之后,我发现打开隐藏APP的时候,会有短暂白屏,这边也是需要修改AndroidMainfests文件:

android:theme =“@ style / UnityThemeSelector”这句表示窗口样式,修改这句就好了。

只需要将这句改为android:theme =“@ android:style / Theme.Translucent.NoTitleBar

现在就大功告成啦!亲测有效!

2018-10-12 15:08:45 hale445566 阅读数 657

一个主app作为启动程序,跳转到其他app,其他app需要隐藏app图标。

跳转代码:

 private void ChangeIntent()
    {
        AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>("currentActivity");

        AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent");
        AndroidJavaObject componentName = new AndroidJavaObject("android.content.ComponentName", "com.company.product", "com.unity3d.player.UnityPlayerNativeActivityPico");
        intent.Call<AndroidJavaObject>("setComponent", componentName);
        intent.Call<AndroidJavaObject>("setAction", "android.intent.action.MAIN");

        ca.Call("startActivityForResult", intent, 1);

        up.Dispose();
        ca.Dispose();
        intent.Dispose();
        componentName.Dispose();
    }

com.company.product:需要跳转的app的包名

com.unity3d.player.UnityPlayerNativeActivityPico:需要跳转的app的androidname,在AndroidManifest.xml里<activity android:name=“这里就是”。

 

其他需要被跳转的app需要注掉Androidmainfest.xml文件中的<category android:name="android.intent.category.LAUNCHER" />,这样安装后就不会显示app的图标。

 

2015-09-02 17:07:22 u012941657 阅读数 1943

<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">发布选项:50页</span></span>

选中Run In Background 即使游戏窗口失去焦点,也会在后台运行.

如果在Display Resolution Dialog中选择Disabled,游戏在每次启动时不会显示一个用于设置显示分辨率的窗口。


;Icon选择组;可以设置不同大小的图标,如果不指定,他们将会自动调用Default Icon中设置的图标并自动缩放。可能会有锯齿

Override for Standalone根据分辨率替换默认图标.

默认启动Unity游戏会看到Unity的商标,在Splash Image中指定一张图片即可.(这个功能只有在pro版本中才能使用)


;Oher Settings选项组。Static Batching是Unity Pro版本功能,它将静态模型整合,但有时会使游戏尺寸变大,如果不清楚优化原理,建议慎重使用这个功能。

;Rendering Path中可以设置3钟渲染模式:

1.Deferred Lighting有最真是的灯光效果,可以不受数量限制地使用灯光和实时阴影,所有的灯光都支持per-pixel(用于计算normal maps),该模式当前不支持抗锯齿和半透明显示。只有unity pro才支持这种模式,需要显卡支持shader model 3.0或更高。不支持手机平台。

2.Forward Rendering以Shader为基础,只能用一个方向光实时阴影。在【Edit】->【Project Settings】->【Quality】,在Pixel Light Count里可以设置per pixel灯光的最大数量。

3.Vertex Lit是灯光效果最简单的渲染模式,不支持实时阴影。不支持normal maps,但有最好的性能,适合在一些较差的硬件上使用。



Navigation寻路简单实用:60页


Gizmos小提示的使用:79页

    void OnDrawGizmos()
    {
        Gizmos.DrawIcon(transform.position, "item.png", true);//允许缩放
    }
item.png纹理在Gizmos文件下。

屏幕自动分辨率,只能按高度比例


小地图制作:80页

摄像机的Normalized viewport rect属性

指定如何将摄像机的视图绘制到屏幕坐标系上(取值范围为0-1)

X:摄像机视图在屏幕上被绘制的水平初始位置

Y:摄像机视图在屏幕上被绘制的垂直初始位置

W:摄像机视图输出图像占屏幕宽度的比例

H:摄像机视图输出图像占屏幕高度的比例

U3D屏幕的坐标系是以左下角为坐标原点,向右为X轴,向上为Y轴

原文:http://blog.csdn.net/kfqcome/article/details/10159201


87页:在不基础MonBehaviour的类前面加[System.Serializable]使得变量可以被Inspector界面获得。其二:指示一个类可以序列化(数组?),不能被继承。

91页: 在函数前面添加[ContextMenu("BuildMap")]//上下文菜单,添加它之后,可以在编辑状态下手动执行BuildMap

99页:在Assets目录下创建名为Editor的文件夹,名称是特定的,不能改变,所有需要在编辑状态下执行的脚本都应当存放到这里。

99页:接着上面一条,在函数名称前加[MenuItem("PathTool/Set Parent %q")] 菜单栏里会多出一个PathTool菜单,菜单下有Set Parent选项。快捷键是Ctrl+q。点击会运行这个函数。记得using UnityEditor;

100页:接着上面,这里的代码只有在编辑状态才能被执行,注意PathTool继承自ScriptableObject并在前面引用了UnityEditor。所有在这里使用的属性和函数均为static类型。

106-109页:excel生成xml数据
xml基本格式。必须定义两列table只有这样在Excel中才能批量映射数据元素。
<?xml version="1.0" encoding="uft-8"?>   uft-8不支持就改成gb2312
<ROOT>
<!--  content -->
	<table wave="" enemyname="" level="" wait="" />
	<table wave="" enemyname="" level="" wait="" />
</ROOT>
</pre><p>111页:用官方精简的XMLParser解析读取XML数据:</p><p></p><pre name="code" class="csharp">    void ReadXML()
    {
        enemylist = new ArrayList();
        XMLParser xmlparser = new XMLParser();//XML解析器
        XMLNode node = xmlparser.Parse(xmldata.text);//开始解析TextAsset
        XMLNodeList list = node.GetNodeList("ROOT>0>table");//只是看看有几行table
        for(int i=0;i<list.Count;i++)
        {
            //从XML节点里
            string wave = node.GetValue("ROOT>0>table" + i + ">@wave");//获取第i行table的wave值
            string enemyname = node.GetValue("ROOT>0>table" + i + ">@enemyname");
            string level = node.GetValue("ROOT>0>table" + i + ">@level");
            string wait = node.GetValue("ROOT>0>table" + i + ">@wait");

            SpawnData data = new SpawnData();//保存从xml提取的数据
            data.wave = int.Parse(wave);
            data.enemyname = enemyname;
            data.level = int.Parse(level);
            data.wait = int.Parse(wait);
            enemylist.Add(data);//获取某行的所有数据
        }
    }

117页:RotateTo函数的实现方法。

121页:Mesh和UV的一些应用


第五章:资源创建

134页:Render Mode是一个重要的选项,当设为Important时渲染将达到像素质量,设为Not Important则总是一个顶点光,但可以获得更好的性能。

Culling Mask:选择遮罩可以控制光英雄的对象。

Lightmapping:可设为RealtimeOnly或BackedOnly,这将使光源仅能用于实时照明或烘培Lightmap。默认是Auto

环境光:是unity提供的一种特殊光源,它没有范围和方向的概念,会整体的改变场景亮度。环境光在场景中是一直存在的,在菜单栏选择【Edit】->【Render Settings】 Ambient Light

Fog雾:Fog Density雾的强度。雾功能对性能造成一定影响,在硬件性能较差的平台要谨慎使用这个功能。


135页:lightmapping 烘培?使用灯光贴图的模型必须有第二套UV,这套UV原则上不能有UV重叠的地方。

136页:【Window】->【Lightmapping】打开Lightmapping窗口。选择Build下面的Back Reflection Probes再点Build进行烘培设置。


Bounces:决定光子的计算级别。其他一些属性可以在136-137页看。所有光影贴图都会自动存放在当前场景的存放路径。


isset用来检测该变量是否被设置。

164页:服务器配置

174页:WWW的基本应用

175页:GET请求

176页:POST请求。using System.Collections.Generic;Dictionary

178页:上传下载图片 

1、选中图片:Inspector窗口下第一个选项,Texture Type 改成 Advanced;
2、选中Read/Write Enabled。
3、选中下方Override for Standalone,Format这图片ARGB 32bit

180页:下载声音文件


224页:对象序列化于反序列化简单演示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
//                    运行时刻 序列化         格式化          二进制
namespace ConsoleApplication1
{
    [Serializable]//序列化是将对象状态转换为可保持或传输的格式的过程。
    public class Player
    {
        public int id;
        public string name;
        public int life;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Player player = new Player();
            player.id = 1;
            player.name = "hero";
            player.life = 1000;
            using(MemoryStream stream =new MemoryStream())//创建存储区为内存的流 IO
            {
                //创建序列化类
                BinaryFormatter bf = new BinaryFormatter();//以二进制格式将对象或整个连接对象图形序列化和反序列化。
                bf.Serialize(stream, player);//将对象(或具有指定顶级(根)的对象图形)序列化给指定流
                //bf将player对象序列化到stream内存流中。
                stream.Seek(0, SeekOrigin.Begin);//将流中的位置设成,开始!?
                Player player2;
                player2 = (Player)bf.Deserialize(stream);//将stream保存的数据反序列化。然后转化成Player类对象
                Console.WriteLine("{0},{1},{2}", player.id, player2.name, player2.life);
            }
        }
    }
}

225页:简单的Server和Client连接发送接收数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;//套接字
namespace SimpleServer
{
    class Program
    {
        static void Main(string[] args)
        {
            string ip = "127.0.0.1";
            //端口
            int port = 8000;
            try
            {
                //获得终端地址
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(ip), 8000);//本机地址
                //创建socket
                Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //          监听                               地址族-ip4版本地址      套接字类型-双向连接的字节流   协议类型-Tcp
                listener.Bind(ipe);//相对 - 开始连接
                //开始监听 最大允许处理1000个连接
                listener.Listen(1000);//开始监听
                Console.WriteLine("开始监听");
                //开始接受客户端请求  程序在这里会阻住
                Socket mySocket = listener.Accept();//接受一个连接。将这个"连接socket"返回。保存在mySocket

                byte[] bs = new byte[1024];
                int n = mySocket.Receive(bs);//将接受的数据存入缓存区bs //在等待另一个连接 发送数据
                Console.WriteLine(n.ToString());
                mySocket.Send(bs);//发送数据。到连接的Socket
                mySocket.Close();
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace SimpleClient
{
    class Program
    {
        static void Main(string[] args)
        {
            //服务器ip地址
            string ip = "127.0.0.1";
            //服务器端口
            int port = 8000;
            try
            {
                //获得终端
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(ip), port);
                Socket client = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                //开始连接服务器,程序会在这里阻住,直到连接成功或失败
                client.Connect(ipe);

                Console.WriteLine("连接到服务器");
                //向服务器发送数据
                string data = "hello world";
                byte[] bs = UTF8Encoding.UTF8.GetBytes(data);//字符串转化到字节集
                client.Send(bs);
                byte[] rev = new byte[256];
                 //接受到服务器返回的数据
                client.Receive(rev);//在等待另一个连接 发送数据
                Console.WriteLine(UTF8Encoding.UTF8.GetString(rev));
                client.Close();
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}



编译c#成dll放到unity中使用时,要将net framework版本至少设成3.5。class权限也要是public


251页:

protogen -i:chatapp.proto -o:chatapp.cs
package ChatAPP;//命名空间
message User {//类
required string name=1;//123好像只是第几变量
required string chat=2;//required必须的变量
optional string email=3;//可选的变量
}


message Chat{
repeated User user = 1;//多个User变量(数组?)
}


335页:设置Android游戏工程






342页:触屏API


<pre name="code" class="csharp">public class AndroidTouch : MonoBehaviour
{

    Vector2 m_screenpos = new Vector2();
    float m_speed = 0.1f;
    // Use this for initialization
    void Start()
    {
        //Debug.Log(Input.multiTouchEnabled);
        Input.multiTouchEnabled = true;//设置多点触屏
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyUp(KeyCode.Escape))
            Application.Quit();
#if !UNITY_EDITOR && (UNITY_IOS || UNITY_ANDROID)//判断是编辑(pc)平台还是移动手机平台
       MobileInput();
#else
        DesktopInput();
#endif
    }
    void DesktopInput()
    {
        //记录鼠标左键的移动距离
        float mx=Input.GetAxis("Mouse X");
        float my=Input.GetAxis("Mouse Y");
        if(mx!=0 || my!=0)
        {
            //鼠标左键
            if(Input.GetMouseButton(0))
            {
              Camera.main.transform.Translate(new Vector3(mx,my,0));
            }
        }
    }
    //滑动输入
    void MobileInput()
    {
        if (Input.touchCount < 0)
            return;
        if (Input.touchCount == 1)
        {
            //开始触屏
            if (Input.touches[0].phase == TouchPhase.Began)//触屏阶段==开始
            {
                //记录手指触屏的位置
                m_screenpos = Input.touches[0].position;
            }
            else if (Input.touches[0].phase == TouchPhase.Moved) //手指移动
            {
                //移动摄像机
                Camera.main.transform.Translate(new Vector3(Input.touches[0].deltaPosition.x * m_speed, Input.touches[0].deltaPosition.y * m_speed, 0));
                //deltaPosition增量值
            }
            //手指离开屏幕后
            if (Input.touches[0].phase == TouchPhase.Ended && Input.touches[0].phase != TouchPhase.Canceled)
            //系统取消跟踪触摸,如用户把屏幕放到他脸上或超过五个接触同时发生。这是一个触摸的最后状态
            {
                Vector2 pos = Input.touches[0].position;//离开位置
                //手指水平移动(多点)
                if (Mathf.Abs(m_screenpos.x - pos.x) > Mathf.Abs(m_screenpos.y - pos.y))
                {
                    if (m_screenpos.x > pos.x)
                    {
                        //开始点.x大于结束点.x      手指向左滑动
                    }
                    else
                    {
                        //否则 向右滑动
                    }
                }
                else //手指垂直移动
                {
                    if (m_screenpos.y > pos.y)
                    {
                        //开始点.y大于结束点.y      手指向下滑动(Y上小,下大)
                    }
                    else
                    {
                        //否则向上滑动
                    }
                }
            }
        }
        else if(Input.touchCount>1)
        {
            //记录两个手指的位置
            Vector2 finger1 = new Vector2();
            Vector2 finger2 = new Vector2();
            //记录两个手指的移动距离
            Vector2 mov1 = new Vector2();
            Vector2 mov2 = new Vector2();
            for(int i=0;i<2;i++)
            {
                Touch touch = Input.touches[i];
                if (touch.phase == TouchPhase.Ended)
                    break;
                //如果手指处于移动状态
                if(touch.phase==TouchPhase.Moved)
                {
                    float mov = 0;
                    if(i==0)
                    {
                        //获得手指1的位置和移动
                        finger1 = touch.position;
                        mov1 = touch.deltaPosition;//移动量
                    }
                    else
                    {
                        //获得手指2的位置和移动
                        finger2 = touch.position;
                        mov2 = touch.deltaPosition;
                        //获得手指移动距离
                        if(finger1.x>finger2.x)//获取最右边手指的增量
                        {
                            mov = mov1.x;
                        }
                        else
                        {
                            mov = mov2.x;
                        }
                        if(finger1.y>finger2.y)//获取下面那根手指的增量
                        {
                            mov += mov1.y;
                        }else
                        {
                            mov += mov2.y;
                        }
                        //根据手指移动距离改变摄像机位置
                        Camera.main.transform.Translate(0, 0, mov * m_speed);
                    }
                }
            }
        }
    }
}


348页:java代码

F:\unity5.3.2f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Classes

package com.testc.test;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

//mainActivitty继承自UnittyPlayerActtivitty
public class MainActivity extends UnityPlayerActivity {

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

	//准备在unity中调用的参数,有两个参数
	protected void HelloWorld(final String title,final String content)
	{
		runOnUiThread(new Runnable()
				{
			public void run()
			{
				MakeDialog(title,content);
			}
				});
	}
	
	//显示对话框
	public void MakeDialog(String title,String content)
	{
		AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
		
		builder.setTitle(title)
		.setMessage(content)
		.setCancelable(false)
		.setPositiveButton("OK", null);
		
		builder.show();
	}
}

349页:Clean出现一些问题。

建立project时Theme改为none。还有main什么的把值直接删掉

另外:AndroidManifest.xml在F:\unity5.3.2f1\Editor\Data\PlaybackEngines\AndroidPlayer\Apk


AndroidMainfest.xml文件改:包+类名

 <activity android:name="com.testc.test.MainActivity"
<img src="http://img.blog.csdn.net/20160201171143083?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


350页:

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

351页:在Eclipse查看Log


355页:设置导出的eclipse工程:

一些库要把鼠标放在出错那里,点导入XX库!函数放在最高基类或继承,如:UnityPlayerActivity这个类

另外可以选择:

UnityPlayerNativeActivity extends UnityPlayerActivity

JAVA:

	protected void HelloWorld(final String title,final String content)
	{
		runOnUiThread(new Runnable(){
			public void run(){
				MakeDialog(title,content);
			}
		});
		}

	//显示对话框 
	public void MakeDialog(String title,String content)
	{
	AlertDialog.Builder builder= new AlertDialog.Builder(UnityPlayerNativeActivity.this);	
	builder.setTitle(title)
	.setMessage(content)
	.setCancelable(false)
	.setPositiveButton("OK", new DialogInterface.OnClickListener(){
		public void onClick(DialogInterface dialog,int which){
			UnityPlayer.UnitySendMessage("AndroidManager","AndroidCallback","");
			
		}});
	builder.show();
	}

c#:

            try
            {
            string[] args = new string[2];
            args[0] = "Hello";
            args[1] = "World";
            Debug.Log(active.ToString());
         //   active.Call("MakeDialog", args);
            active.Call("HelloWorld");//被调用的函数名+参数数组
            Debug.Log("完成调用!");
                 }
            catch(System.Exception ex)
            {
                Debug.Log(ex.Message);
            }
运行方式:项目右键 Run-As ->AndroidApplicattion。然后 就可以run了。

355页:

android:debuggable="false"
有问题可以删掉或改

没有更多推荐了,返回首页