求问unity3d怎样unity 发送事件消息广播和接收消息

Unity_IOS平台(3)
Unity实用技术技巧(48)
Unity3D 研究院之IOS高级界面发送消息与Unity3D消息的接收(九)
&&&围观14215次&&编辑日期:&字体:&&
&iframe id=&cproIframe_u& width=&300& height=&250& src=&/acom?adn=4&at=134&aurl=&cad=1&ccd=24&cec=UTF-8&cfv=15&ch=0&col=zh-CN&conOP=0&cpa=1&dai=1&dis=0&layout_filter=rank%2Ctabcloud&ltr=http%3A%2F%%2Farchives%2F512&ltu=http%3A%2F%%2Farchives%2F517&lunum=6&n=_cpr&pcs=&pis=&ps=369x1286&psr=&pss=&qn=743a&rad=&rsi0=300&rsi1=250&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000FF&rss3=%&rss4=%&rss5=&rss6=%23e10900&rss7=&scale=&skin=&td_id=1121907&tn=text_default_300_250&tpr=6&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u1121907& align=&center,center& marginwidth=&0& marginheight=&0& scrolling=&no& frameborder=&0& allowtransparency=&true& style=&margin: 0 padding: 0 font-family:&&&/iframe&
& & & & &本例实现游戏背景是Unity3D 的游戏世界,前面添加4个IOS的高级界面的按钮,并且点击这些按钮可以将消息传递给背景的Unity3D ,让它做一些事情。
上一章介绍了触摸IOS屏幕 移动摄像机的位置,下面有盆友问我说他不想移动摄像机的位置,就想移动物体的位置,我在这里补充一下,可以把脚本绑定在箱子上,参照物选择为主摄像机,这样子更新箱子的脚本就OK啦。今天例子,我就将脚本绑定在箱子上,如下图所示,把Move脚本绑定在这个 Cube中。
先把Move脚本的代码贴出来,这里面我写了4个方法分别处理这个箱子的旋转,这4个方法是由IOS上的代码向Unity发送消息后调用的,下面我会介绍具体操作的方法。
//向左旋转
MoveLeft()
Time.deltaTime
Vector3.up
transform.Rotate(vrotate,
Space.World);
//向右旋转
MoveRight()
Time.deltaTime
Vector3.down*
transform.Rotate(vrotate,
Space.World);
//向上旋转
Time.deltaTime
Vector3.right*
transform.Rotate(vrotate,
Space.World);
//向下旋转
MoveDown(){
Time.deltaTime
Vector3.left*
transform.Rotate(vrotate,
Space.World);
到这里盆友们可以将这个Unity工程导出成Xcode项目,不会的盆友请看我之前的文章哈,Xcode项目导出成功后,我们先添加4个高级界面的按钮用来点击响应上面脚本的这4个旋转箱子的方法。
创建一个类继承UIViewController,用来添加我们的高级界面的视图,我暂且命名为MyView.
打开Unity3D导出的AppController.mm这个类,头文件处先导入我们的这个类 #import “MyView”找到下面这个方法,来添加viewint&OpenEAGL_UnityCallback(UIWindow** window,&int* screenWidth,&int* screenHeight,&&int* openglesVersion)
EAGLView 是Unity3D 背景的那个View, 下面我们添加一个我们自己写的View 覆盖在它上面。
Create a full-screen window
[[UIWindow
initWithFrame:rect];
[[EAGLView
initWithFrame:rect];
addSubview:view];
=&&[[MyView
addSubview:myView.view];
贴出MyView的代码,写完发现忘释放内存了,呵呵,懒得改了,本章主要的介绍的不是这个哦。
//&&MyView.m
//&&Unity-iPhone
//&&Created by 雨松MOMO on 11-11-1.
//&&Copyright 2011 __MyCompanyName__. All rights reserved.
#import &MyView.h&
@implementation
// Implement viewDidLoad to do additional setup after loading the view,
typically from a nib.
(void)viewDidLoad
viewDidLoad];
//创建label视图
initWithFrame:CGRectMake(0,
//设置显示内容
label.text
@&雨松MOMO的程序世界&;
//设置背景颜色
label.backgroundColor
blueColor];
//设置文字颜色
label.textColor
whiteColor];
//设置显示位置居中
label.textAlignment
UITextAlignmentCenter;
//设置字体大小
label.font
fontWithName:[[UIFont
familyNames]
objectAtIndex:10]
//创建按钮
buttonWithType:1];
//设置按钮范围
button0.frame
CGRectMake(0,
//设置按钮显示内容
setTitle:@&矩形左旋转&
forState:UIControlStateNormal];
//设置按钮改变后
绑定响应方法
addTarget:self
action:@selector(LeftButtonPressed)
forControlEvents:UIControlEventTouchUpInside];&&
//创建按钮
buttonWithType:1];
//设置按钮范围
button1.frame
CGRectMake(0,
//设置按钮显示内容
setTitle:@&矩形右旋转&
forState:UIControlStateNormal];
//设置按钮改变后
绑定响应方法
addTarget:self
action:@selector(RightButtonPressed)
forControlEvents:UIControlEventTouchUpInside];&&
//创建按钮
buttonWithType:1];
//设置按钮范围
button2.frame
CGRectMake(0,
//设置按钮显示内容
setTitle:@&矩形上旋转&
forState:UIControlStateNormal];
//设置按钮改变后
绑定响应方法
addTarget:self
action:@selector(UpButtonPressed)
forControlEvents:UIControlEventTouchUpInside];&&
//创建按钮
buttonWithType:1];
//设置按钮范围
button3.frame
CGRectMake(0,
//设置按钮显示内容
setTitle:@&矩形下旋转&
forState:UIControlStateNormal];
//设置按钮改变后
绑定响应方法
addTarget:self
action:@selector(DownButtonPressed)
forControlEvents:UIControlEventTouchUpInside];&&
//向view添加
[self.view
addSubview:label];
[self.view
addSubview:button0];
[self.view
addSubview:button1];
[self.view
addSubview:button2];
[self.view
addSubview:button3];
//向左按钮
-(void)LeftButtonPressed{
UnitySendMessage(&Cube&,&MoveLeft&,&&);
//向右按钮
-(void)RightButtonPressed{
UnitySendMessage(&Cube&,&MoveRight&,&&);
//向上按钮
-(void)UpButtonPressed{
UnitySendMessage(&Cube&,&MoveUp&,&&);
//向下按钮
-(void)DownButtonPressed{
UnitySendMessage(&Cube&,&MoveDown&,&&);
(void)didReceiveMemoryWarning
Releases the view if it doesn't have a superview.
&&&&[super
didReceiveMemoryWarning];
Release any cached data, images, etc. that aren't in use.
(void)viewDidUnload
&&&&[super
viewDidUnload];
(void)dealloc
&&&&[super
这里我主要说一下下面这个方法,它是Unity底层帮我们写好的一个方法,意思iPhone向向Unity发送消息,
参数1:场景中的模型名称,Cube就是我们定义的一个箱子。
参数2:脚本方法名称MoveLeft就是上面脚本中的方法,
参数3:为一个char *类型的 可以向Unity中传递数据。
UnitySendMessage(“Cube”,”MoveLeft”,””);
我们可以向Unity3D中任意模型发送消息调用它绑定的脚本中的方法,当前前提是模型名称、方法名称、 参数都填写正确。
这里4个按钮都是以这种方式传递消息,下面是iPhone 真机的效果图,我们触摸点击4个高级界面的按钮可以实现Unity3D世界中的模型旋转, &所以大家一定要切记这个方法,很重要噢,哇咔咔~
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,哇咔咔~~~ 附上Unity3D工程的下载地址,Xcode项目我就不上传了,不早了,大家晚安,哇咔咔~~
下载地址:
补充: 由于Unity3.5在渲染3D的时候添加了&sGLViewController,所以按照以前的方法添加的视图是无法接收旋转事件的。对应3.5的版本大家需要修改一下代码。
还是在 OpenEAGL_UnityCallback方法中,在此方法的末尾添加代码:
MyViewController
=&&[[MyViewController
[sGLViewController.view
addSubview:myView.view];
MyViewController是我们新定义的,
也就是说把我们的写的视图添加至&
sGLViewController当中,这样就完事OK啦。 &Unity每次升级都会小改动一下,所以我们也需要小改动一下,哈哈!
在Unity4中 把之前的sGLViewController 替代成了&UnityGetGLViewController() 那么在Unity4中简单的修改一下上面的代码即可。
MyViewController
=&&[[MyViewController
&&&&[UnityGetGLViewController().view
addSubview:myView.view];
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:37777次
排名:千里之外
原创:14篇
转载:89篇
(2)(2)(2)(10)(1)(1)(3)(3)(15)(10)(10)(31)(10)(4)君,已阅读到文档的结尾了呢~~
unity3d游戏开发之高级界面发送消息与消息的接收
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
unity3d游戏开发之高级界面发送消息与消息的接收
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口主题 : AsyncSocket建立tcp连接,客户端如何接收服务端发的广播消息??
级别: 新手上路
可可豆: 11 CB
威望: 11 点
在线时间: 38(时)
发自: Web Page
来源于&&分类
AsyncSocket建立tcp连接,客户端如何接收服务端发的广播消息??&&&
小弟新手,最近做项目socket遇到了这样一个问题:客户端与服务端使用AsyncSocket建立了一个socket连接,通常模式是这样,[self.socket writeData:data withTimeout:-1 tag:0];[self.socket readDataWithTimeout:-1 tag:0];客户端可以在以下回调方法中获取返回的数据 -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag但是现在服务端要不定期的发一个广播,面向所有连接中的客户端,请问各位大侠,这种情况客户端如何才能监听到?期待您的回答,不胜感激!
级别: 新手上路
可可豆: 11 CB
威望: 11 点
在线时间: 38(时)
发自: Web Page
级别: 骑士
UID: 99188
可可豆: 1339 CB
威望: 1339 点
在线时间: 344(时)
发自: Web Page
我晕你用socket 的话,目标当然是时刻保持畅通了
-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{     ....    [self.socket readDataWithTimeout:-1 tag:0];//加这句话吧}[ 此帖被别叫我向工在 16:28重新编辑 ]
级别: 新手上路
UID: 350615
可可豆: 25 CB
威望: 23 点
在线时间: 238(时)
发自: Web Page
回 2楼(别叫我向工) 的帖子
大神好厉害
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版

我要回帖

更多关于 unity 接收 http 消息 的文章

 

随机推荐