Unity3d与iOS的交互(1)

iOS与unity3D简单交互 一.小记 最近公司有个需求,需要用unity3D建立3D模型,并且实现切换功能,由于做开发时间不算长,又没有接触过unity3D, 所以只能一头雾水去网上查找资料,也看了雨松MOMO的文章,不过都是几年前的了,有些东西已经不适用了,只能边看边研究,今天终于有点眉目了,可以在unity3D导出的iOS工程文件的基础上,对3D建模的页面进行修改,并能够执行一些操作了。 二.实现细节 阅读详情

Unity3d与iOS的交互(1)



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



1.

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





2.

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






3.

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

var vrotate : Vector3;  
  
//Rotate Left
function RotateLeft()  
{
	print("Rotate Left");
	transform.Rotate(Vector3.up * Time.deltaTime * 100, Space.World);
}  
  
//Rotate Right
function RotateRight()  
{
	print("Rotate Right");
	transform.Rotate(Vector3.down * Time.deltaTime * 100, Space.World);    
}  
  
//Rotate Up
function RotateUp()
{
	print("Rotate Up");
	transform.Rotate(Vector3.right * Time.deltaTime * 100, Space.World);    
}  
  
//Rotate Down
function RotateDown()
{
	print("Rotate Down");
	transform.Rotate(Vector3.left * Time.deltaTime * 100, Space.World);    
}

上面的四个函数分别朝不同角度选择Cube。我们会在iOS程序中调用这几个Unity3d中的函数。




4.

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

//
//  MyViewInit.h
//  Unity-iPhone
//
//  Created by tao hu on 9/15/12.
//  Copyright (c) 2012 __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如下:

//
//  MyViewInit.m
//  Unity-iPhone
//
//  Created by tao hu on 9/15/12.
//  Copyright (c) 2012 __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, 320, 40)];
    //设置显示内容    
    label.text = @"旋转控制";    
    //设置背景颜色    
    label.backgroundColor = [UIColor blueColor];    
    //设置文字颜色    
    label.textColor = [UIColor whiteColor];    
    //设置显示位置居中    
    label.textAlignment = UITextAlignmentCenter;    
    //设置字体大小    
    label.font = [UIFont fontWithName:[[UIFont familyNames] objectAtIndex:10] size:20]; 
    
    [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,  50, 100, 40) action:@selector(LeftButtonPressed) controller:controller];
    [self CreateButton:@"右旋转" rect:CGRectMake(0, 100, 100, 40) action:@selector(RightButtonPressed) controller:controller];
    [self CreateButton:@"上旋转" rect:CGRectMake(0, 150, 100, 40) action:@selector(UpButtonPressed) controller:controller];
    [self CreateButton:@"下旋转" rect:CGRectMake(0, 200, 100, 40) action:@selector(DownButtonPressed) controller:controller];
}



@end


其中:

UnitySendMessage函数有三个参数:

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


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




6.

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

int OpenEAGL_UnityCallback(UIWindow** window, int* screenWidth, int* screenHeight,  int* openglesVersion)

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

int 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( _ios30orNewer )
		controller.wantsFullScreenLayout = TRUE;
#endif

	controller.view = view;
	[_window addSubview:view];
    
    
	[MyViewInit init:controller];


	if( !UnityUseOSAutorotation() )
	{
		_autorotEnableHandling = true;
		[[NSNotificationCenter defaultCenter] postNotificationName: UIDeviceOrientationDidChangeNotification object: [UIDevice currentDevice]];
	}

......


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

[MyViewInit init:controller];


并在该文件首部加入:

#import "MyViewInit.h"




7.

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

初始界面:





点击下旋转按钮:




旋转Cube:




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





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





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

http://blog.youkuaiyun.com/xys289187120/article/details/6926746







完成!

iOS与Unity3d的交互实现 iOS与Unity3d的交互实现 最近在公司写的项目是基于iOS与Unity3d的,之前也写了不少的iOS与Unity的项目,但是这次将两者结合开发还是第一次。项目的第一条功能需求就是:实现从iOS原生界面到Unity的跳转。 看似简单,但是却不知道怎么下手,修改Unity导出到iOS的封装好的代码是肯定的,但是至于改哪里,怎么改却是比较难。和一般的coding一样,一上来先是各种找解决方案和 阅读详情

相关推荐

Unity3d与iOS交互开发——接入平台SDK必备技能

开发手机游戏都知道,你要接入各种平台的SDK。那就需要Unity3d与iOS中Objective-C的函数有交互,所以你就需要用到如下内容: 一、Unity3d  To  iOS: 1、创建一个C#文件 SdkToIOS.cs 这是调用iOS函数的接口: using System.Runtime.InteropServices; using UnityEngine;

zhao_yin的记事本 6万+

Unity与iOS交互(1)——需要了解的IOS相关知识

以下只是简要介绍,详细的内容需要自己去看链接。

enternalstar的博客 4086

半导体制造技术导论(第二版)萧宏 第五章集成电路加热工艺答案

第二次退火是在较高温度下进行,并将电阻系数较高的c49碳化硅转变为电阻系数较低的c54碳。水平式高温炉加热、垂直式高温炉加热(即传统的管式炉加热)、快速加热工艺RTP、激光镭射。8. 集成电路芯片制造过程中,会使用垫底氧化层、阻挡氧化层、栅氧氧化层、屏蔽氧化层和全。氧化是最重要的加热过程之一,是一种添加工艺,将氧气加入到硅晶圆后,在晶圆表面形成二氧。为了满足元器件性能的要求,必须利用退火工艺将晶格的损伤修复,使其恢复单晶结构并激活掺。工艺氮气气流下将晶舟推入炉管,升高温度,稳定温度;

goal_achieving的博客 1864

Unity与ios交互(双端通信)

由于U3D无法直接调用Objc或者Swift语言声明的接口,因此通常利用C#的特性来访问C语言所定义的接口,然后再通过C接口调用ObjC的代码(对于Swift代码则还需要使用OC桥接)。具体来说,可以通过在Unity中使用C#脚本调用iOS原生代码,或者将iOS原生代码封装成库供Unity调用。Unity与iOS的交互(双端通信)是一个关键的技术领域,特别是在开发跨平台游戏和应用时。回调函数的参数是图片的路径,Unity通过这个路径加载并显示图片。在Unity中,使用C#编写脚本来调用iOS原生代码。

lcfengokok的博客 2055

NXP KW47蓝牙MCU低功耗实测:从8μA睡眠到5年续航的优化实战

在物联网和嵌入式系统开发中,低功耗设计是决定电池供电设备续航能力的关键技术。其核心原理在于通过事件驱动、状态机管理和精细的电源域控制,使设备在空闲时进入深度睡眠,仅在需要时快速唤醒工作,从而将平均电流从毫安级降至微安级。这项技术的工程价值在于能够实现纽扣电池供电设备长达数年的使用寿命,广泛应用于智能家居传感器、可穿戴设备、资产追踪和工业监测等领域。以NXP KW47系列无线MCU为例,其集成的Arm Cortex-M33双核与专用射频单元,配合多级睡眠模式和高效DC-DC转换器,为超低功耗蓝牙应用提供了硬件

weixin_30162121的博客 257

EDA工具安装第一步:Synopsys Installer的配置与图形化界面使用详解

本文详细解析了EDA工具安装的关键第一步——Synopsys Installer的配置与使用。文章阐述了其作为统一部署管理器和依赖协调者的核心作用,并分步详解了如何通过图形化界面高效安装EDA工具,同时介绍了命令行批处理等进阶技巧,旨在帮助工程师快速搭建稳定的芯片设计环境。

zeta9的博客 342

Unity与iOS交互(2)——接入SDK

接入Android和iOS SDK有很多相同的地方,建议先看下Android SDK如何接入。

enternalstar的博客 5326

大模型在心律失常预测及治疗方案制定中的应用研究报告

目录一、引言1.1 研究背景与意义1.2 研究目的与方法1.3 研究创新点二、大模型技术概述2.1 大模型基本原理2.2 常见大模型类型及特点2.3 大模型在医疗领域的应用现状三、心律失常的术前预测与准备3.1 术前心律失常预测的重要性3.2 大模型在术前预测中的应用案例3.3 基于预测结果的术前准备方案四、术中监测与实时调整4.1 术中监测心律失常的方法与技术4.2 大模型辅助术中决策的机制4.3 实时调整手术方案的策略与实践五、术后恢复与并发症风险预测5.1 术后心律失常的监测与评估5.2 大模型预测术

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1598

Unity与iOS交互(3)——常见交互示例

前面两篇文章详细介绍了Unity与iOS交互的原理,相信仔细看了之后基本了解了,当然你可能需要花费好几个小时才能看明白。现在缺的就是具体的调用代码了,相信你其实可以自己一点点整理出来,但会花费不少时间趟坑,这里我们直接给出常见的交互代码示例。

enternalstar的博客 1937

Nengo神经工程框架:脉冲神经网络的实时编译与硬件部署

脉冲神经网络(SNN)作为类脑计算的核心范式,正从生物模拟走向工程落地。其本质是用离散脉冲建模神经动力学,关键在于实现可预测、可复现的神经行为而非单纯拟合函数。Nengo基于神经工程学框架(NEF),将动态系统理论与硬件约束深度融合,通过解析式权重计算、确定性时间步长(dt)和多后端编译能力,支撑从CPU仿真到Loihi/FPGA的端到端部署。它不替代深度学习框架,而是提供面向神经形态芯片的‘神经编译器’能力,使LIF神经元参数、突触动力学与硬件时序严格对齐,显著提升实时性、能效比与物理可解释性。

weixin_32533659的博客 638

一文搞懂【Linux 搭建 Dread Hunger 服务器】附本体及Docker部署集群方案

看直播发现了五花八门的开服器和版本,一时兴起按官方文档进行了搭建尝试,所以我的版本基于官方Stream2024.01.10更新的版本,也就是停服时的玩法,应该可以根据mod和补丁魔改成更那些开服器一样的版本,本文不做谈论,注重服务器搭建,毕竟8个人不可能在一个局域网里乱象:首先,我看了大量教程视频,一类是开服器的推广,另一类自建的基本采用Windows搭建,我觉得最离谱的是大部分教程都会教你买一台远程Windows虚拟机???

LHmine的博客 3987

iOS Unity 交互(系列四)Unity调用iOS SDK

Unity调用iOS SDK

u013712343的博客 3000

深度强化学习调参技巧:以DQN、DDPG、TD3、PPO、SAC等算法为例

深度强化学习调参技巧:以D3QN、DDPG、TD3、PPO、SAC算法为例

丨汀、的博客 3445

Unity3D与iOS消息交互方法(1)--iOS接收Unity3D发出的消息

跨平台这种事情不管多NB, 总要有些与原生系统交互的方法, 比如 Unity3D与iOS消息交互方法. 一: 建立一个空的Unity工程.   File --> New Project 二: 编写脚本文件 (Test.cs) 在Project选项卡中, create ->C# script, 命名为Test, 双击, 编写此cs文件. 1 using...

weixin_34074740的博客 131

MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器

本示例展示了如何利用非线性模型预测控制(MPC)为四旋翼飞行器设计一个跟踪轨迹的控制器。

机器人控制与仿真应用 4435

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Unity3D与iOS的交互

Unity3D(以下简称U3D)是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。作为一款跨平台开发工具,难免会与原生平台进行一些交互操作来完成一些特定的平台功能。例如:你需要直接操作iOS的IAP来实现游戏中的内付费功能;甚至一些第三方SDK没有提供U3D版本的情况下,你会直接在原生系统平台调用其提供接口等等。

weixin_43149049的博客 1525

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Unity3D与iOS交互(接入原生sdk方法)

Unity3D(以下简称U3D)是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。 作为一款跨平台开发工具,难免会与原生平台进行一些交互操作来完成一些特定的平台功能。例如:你需要直接操作iOS的IAP来实现游戏中的内付费功能;甚至一些第三方SDK没有提供U3D版本的情况...

yffgamestart的博客 6385

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

c# h5 unity3d_Unity3D与iOS的交互

1. 关于Unity3DUnity3D(以下简称U3D)是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。作为一款跨平台开发工具,难免会与原生平台进行一些交互操作来完成一些特定的平台功能。例如:你需要直接操作iOS的IAP来实现游戏中的内付费功能;甚至一些第三方SDK没...

weixin_39626298的博客 417

Unity3d与iOS的交互

Unity3d与iOS的交互(1) 今天我们介绍Unity3d与iOS交互第一部分:iOS传消息到Unity3d中。下面我们开始吧: 1. 首先用Unity3d创建一个Plain,并调整好摄像机的角度以及光源的位置,如下所示: 2. 然后我们创建一个Cube,我们会在iOS

Wave的专栏 2782

unity3d 与 iOS 的交互

unity3d 通过 编辑器实现代码。资源的整合以后。 编译成ios时候,会把脚本部分翻译成arm指令。资源部分整合进去。 然后通过ios的OPENGL代码实现。 大致看一下ios的代码。unity3d从新实现了arm到C的过程。脚本代码从内存中重定向执行。 但是既然是ios本地执行。调用到ios的window和view。就可以绑定ios代码和界面。 iOS 导出

watsy 6893

Unity3d与iOS之间的相互调用

Unity3d与iOS的交互 实现原理 ios开发使用的语言是objective-c(也称object-c),u3d中使用DllImport的Attribute,以非托管方式将库中 的方法导出到C#中进行使用。而传入"__Internal"则是表示这个是一个静态库或者是一个内部方法。通过上面的声明,这个方法就可以在C#里面进行调用了。 using UnityEngine; using System.Collections; using System.Runtime.InteropServi

wangningzk123的博客 1349
上一篇: Unity3d之坦克大战(三)
下一篇: Unity3d与iOS的交互(2)
htttw
博客等级 码龄18年 378粉丝 73原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值