位置: 编程技术 - 正文

Unity3d与iOS的交互(unity and unity)

编辑:rootadmin

推荐整理分享Unity3d与iOS的交互(unity and unity),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity和u3d,unity io,unity3d vs,unity and unity,unity and unity,unity与ios交互,unity iphone,unity与ios交互,内容如对您有帮助,希望把文章链接给更多的朋友!

Unity3d与iOS的交互(1)

今天我们介绍Unity3d与iOS交互第一部分:iOS传消息到Unity3d中。下面我们开始吧:

1.

首先用Unity3d创建一个Plain,并调整好摄像机的角度以及光源的位置,如下所示:

2.

然后我们创建一个Cube,我们会在iOS中用Objective-C代码来控制它旋转:

3.

然后我们创建一个Rotate.js的脚本并把它关联到Cube上:

[javascript] view plaincopyvar vrotate : Vector3; //Rotate Left function RotateLeft() { print("Rotate Left"); transform.Rotate(Vector3.up * Time.deltaTime * , Space.World); } //Rotate Right function RotateRight() { print("Rotate Right"); transform.Rotate(Vector3.down * Time.deltaTime * , Space.World); } //Rotate Up function RotateUp() { print("Rotate Up"); transform.Rotate(Vector3.right * Time.deltaTime * , Space.World); } //Rotate Down function RotateDown() { print("Rotate Down"); transform.Rotate(Vector3.left * Time.deltaTime * , Space.World); } 上面的四个函数分别朝不同角度选择Cube。我们会在iOS程序中调用这几个Unity3d中的函数。

4.

然后在Unity3d中Build为XCode项目,打开该项目。首先创建一个基于NSObject的类,名为MyViewInit,我们会将我们自己的界面初始化代码都放在其中。修改MyViewInit.h如下:

[cpp] view plaincopy// // MyViewInit.h // Unity-iPhone // // Created by tao hu on 9//. // Copyright (c) __MyCompanyName__. All rights reserved. // #import <UIKit/UIKit.h> @interface MyViewInit : NSObject &#;(void)CreateButton:title rect:(CGRect)rect action:(SEL)action controller:(UIViewController *)controller; &#;(void)CreateTitle:(UIViewController *)controller; &#;(void)LeftButtonPressed; &#;(void)RightButtonPressed; &#;(void)UpButtonPressed; &#;(void)DownButtonPressed; &#;(void)Init:(UIViewController *)controller; @end 其中的方法都是类方法。在Init函数中我们完成了所有我们自定义界面的绘制(添加了四个UIButton和一个UILabel)。

5.

修改MyViewInit.m如下:

[cpp] view plaincopy// // MyViewInit.m // Unity-iPhone // // Created by tao hu on 9//. // Copyright (c) __MyCompanyName__. All rights reserved. // #import "MyViewInit.h" @interface MyViewInit () @end @implementation MyViewInit //创建按钮 &#;(void)CreateButton:title rect:(CGRect)rect action:(SEL)action controller:(UIViewController *)controller { UIButton * btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; //设置按钮范围 btn.frame = rect; //设置按钮显示内容 [btn setTitle:title forState:UIControlStateNormal]; //设置按钮改变后绑定的响应方法 [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; //加入View中 [controller.view addSubview:btn]; } //创建标签 &#;(void)CreateTitle:(UIViewController *)controller { //创建label视图 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, , )]; //设置显示内容 label.text = @"旋转控制"; //设置背景颜色 label.backgroundColor = [UIColor blueColor]; //设置文字颜色 label.textColor = [UIColor whiteColor]; //设置显示位置居中 label.textAlignment = UITextAlignmentCenter; //设置字体大小 label.font = [UIFont fontWithName:[[UIFont familyNames] objectAtIndex:] size:]; [controller.view addSubview:label]; } //向左按钮 &#;(void)LeftButtonPressed { UnitySendMessage("Cube", "MoveLeft",""); } //向右按钮 &#;(void)RightButtonPressed { UnitySendMessage("Cube", "MoveRight",""); } //向上按钮 &#;(void)UpButtonPressed { UnitySendMessage("Cube", "MoveUp",""); } //向下按钮 &#;(void)DownButtonPressed { UnitySendMessage("Cube", "MoveDown",""); } &#;(void)Init:(UIViewController *)controller { [self CreateTitle:controller]; [self CreateButton:@"左旋转" rect:CGRectMake(0, , , ) action:@selector(LeftButtonPressed) controller:controller]; [self CreateButton:@"右旋转" rect:CGRectMake(0, , , ) action:@selector(RightButtonPressed) controller:controller]; [self CreateButton:@"上旋转" rect:CGRectMake(0, , , ) action:@selector(UpButtonPressed) controller:controller]; [self CreateButton:@"下旋转" rect:CGRectMake(0, , , ) action:@selector(DownButtonPressed) controller:controller]; } @end

其中:

UnitySendMessage函数有三个参数:

第一个是Scene中的模型的名称,第二个是已经绑定在模型上的某个函数,第三个是char *类型的参数,用来将参数传递给这个函数。

Unity3d与iOS的交互(unity and unity)

我们可以用这个方法调用Unity3d中的任意一个模型上的任意一个函数。

6.

最后我们要做的是在程序启动时调用上面的Init函数。找到AppController.mm文件:

[cpp] view plaincopyint OpenEAGL_UnityCallback(UIWindow** window, int* screenWidth, int* screenHeight, int* openglesVersion)

函数在Unity3d程序启动时会被调用,其中的EAGLView 就是Unity3d的背景的那个View。我们在这个函数中调用我们的Init函数。修改OpenEAGL_UnityCallback如下:

[cpp] view plaincopyint OpenEAGL_UnityCallback(UIWindow** window, int* screenWidth, int* screenHeight, int* openglesVersion) { CGRect rect = [[UIScreen mainScreen] bounds]; // Create a full-screen window _window = [[UIWindow alloc] initWithFrame:rect]; EAGLView* view = [[EAGLView alloc] initWithFrame:rect]; UnityViewController *controller = [[UnityViewController alloc] init]; sGLViewController = controller; #if defined(__IPHONE_3_0) if( _iosorNewer ) controller.wantsFullScreenLayout = TRUE; #endif controller.view = view; [_window addSubview:view]; [MyViewInit init:controller]; if( !UnityUseOSAutorotation() ) { _autorotEnableHandling = true; [[NSNotificationCenter defaultCenter] postNotificationName: UIDeviceOrientationDidChangeNotification object: [UIDevice currentDevice]]; } ......

其实我们只加入了一句话:

[cpp] view plaincopy[MyViewInit init:controller];

并在该文件首部加入:

[cpp] view plaincopy#import "MyViewInit.h"

7.

好了,终于要在真机上运行了:

初始界面:

点击下旋转按钮:

旋转Cube:

我们发现在XCode的Console窗口中输出了Unity3d中的pirnt语句。因此,Unity3d中的print函数在真机上运行时是输出到XCode的Console中。

最后代码太大了,无法上传,有需要的可以和我联系或在下面留言。

本文参考了雨松MOMO的文章,在此表示感谢:

Intermediate Unity 3D for iOS: Part 1/3 ThisisatutorialbyJoshuaNewnham,thefounderofWeMakePlay,anindependentstudiocraftingcreativedigitalplayforemergingplatforms.Unityisarguablythemostpopular3DgameengineforiOS–andformanygoodreasons!Rapidde

NGUI血条制作,当人物移出屏幕后不显示血条,优化代码 usingUnityEngine;usingSystem.Collections;///summary///脚本功能:NGUI血条实现///知识要点:NGUI,3D坐标到2D坐标的转换///创建时间:年6月日///添加对象:添加到

Coroutine couldn&#;t be started because the the game object &#;GameController&#; is inactive! 版权声明:本文为博主原创文章,未经博主允许不得转载。

标签: unity and unity

本文链接地址:https://www.jiuchutong.com/biancheng/369224.html 转载请保留说明!

上一篇:[教程] 使用3D Infinite Runner Toolkit打造僵尸跑酷游戏(3dmconfig.ini有什么用)

下一篇:Intermediate Unity 3D for iOS: Part 1/3

  • 唐朝的两税法是什么
  • 小型微利企业认定标准最新
  • 印花税已经申报在哪里点交费
  • 电信发票为什么分开开
  • 哪些支出允许在企业所得税前扣除
  • 准予以后纳税年度结转扣除的项目有
  • 当期允许抵扣的农产品进项税额
  • 固定资产折旧方法有几种
  • 债券投资损失准备累计已计提
  • 佣金可以直接转到个人账户吗
  • 商贸企业可以使用月末一次加权平均
  • 未交增值税借方表示什么
  • 营改增后新纳入增值税征税范围的有
  • 存货扣税比是什么意思?
  • 月末在产品直接人工成本怎么算
  • 补交以前年度工会经费所得税如何申报
  • 收到股东交的多余的股金怎么做账务处理
  • 本年利润有期末余额吗
  • 职工福利费要申报吗
  • 出售长期股权投资的相关税费
  • 2019年以后转登记为小规模纳税人有无时间要求?
  • 评估的房产如何入账
  • 如何查询公司有没有报个税
  • 净利润与未分配利润的勾稽关系
  • 已付货款没有发票能做支出吗
  • win11系统未激活
  • apcu php
  • php编写
  • 超过认证期的发票怎么办
  • 应收账款清查采用实地盘点法
  • 支付产品运输费怎么入账
  • 一般纳税人无票收入怎么填申报表
  • transformer add norm
  • vue实例教程
  • 【6G 新技术】6G数据面介绍
  • 强大到无需疼无需宠,却幸运到有人宠有人疼什么意思
  • react modal
  • 结转财务费用时怎么做账
  • 记账和结账可以一起用吗
  • 金蝶怎么设置销售出库单模板
  • 进项转出了还能再转进去吗
  • fortify 安装
  • 加工企业的税怎么算
  • 印刷行业成本核算程序
  • 车保险名称
  • 如何完成资产负债表
  • 购买商品并入库做什么会计分录
  • 企业固定资产纳税
  • 购买软件多少钱进无形资产
  • 营业执照是什么字体
  • 销售产品领用单独计价的包装物2000元,售价2400元
  • 刚购入的固定资产已使用年限怎么填
  • 公司办理宽带套餐合法吗
  • 不动产发票开具规则
  • 滞纳金在年报的营业外支出的哪一项?
  • 工业产值是指
  • 超出工资总额
  • Linux下MySQL5.7.18二进制包安装教程(无默认配置文件my_default.cnf)
  • mysql用处
  • xp系统盘空间不足怎么办
  • 自己的磁盘
  • 苹果电脑mac设备怎么删除
  • win7系统如何调节电脑屏幕亮度
  • win10系统开机蓝屏得重启后才能开机
  • nipc什么意思
  • 2016年Win10 RedStone将重大改版 微软小娜可以浮动
  • P2PNetworking3.exe - P2PNetworking3是什么进程 有什么用
  • win10自动更新win11怎么办
  • w10系统如何
  • win7电脑耳机插上还是外放
  • suse linux 12 sp5
  • c++ not1
  • convert fs
  • node.js java 性能
  • jquery键盘事件及keycode大全
  • python类属性和类方法
  • jquery easyui有哪些特点
  • 西藏拉萨工业园主要生产什么
  • 增值税和消费税申报对比不符怎么处理
  • 柬埔寨现在的领导
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设