Unity3D NGUI从背包中拖出并在场景中生成物体

  http://www.cnblogs.com/zhanghaipeng-Unity3D/p/4732592.html

  由于游戏需要从背包中拖出武器并在场景中相应的位置生成出来,所以研究了一下这个。

  一般来说,在Unity3D开发中如果使用NGUI为游戏做UI,我们的场景和UI并不是使用一个相机进行渲染的,所以从背包中拖出物体并在场景相应的位置生成物体,就会涉及到UICamera和场景摄像机的转换。我在做这个时主要通过打射线来实现坐标转换。

  如何创建一个可拖动的UI组件可以参考NGUI中的Example 11

  我们这里只需要重写DragDropItem这个类的OnDragDropRelease方法就可以了,下面是简化的关键代码

protected override void OnDragDropRelease(GameObject surface)

   {

    base.OnDragDropRelease(surface);

    //首先将拖动按钮时,按钮的位置通过UICamera转换为屏幕坐标

Vector3 screenPoint = UICamera.WorldToScreenPoint(this.transform.position);

/*然后我们需要在场景中建一个EmptyGameObject,并为其命名为InstantiatePos,为其挂上collider,

*这里我们将InstantiatePos的layer设为Pos(我们自己创建的层,第9层),然后我们就能通过主摄像机在刚刚

    * 得到的屏幕坐标的位置打出一条射线,在这条射线有InstantiatePos发生碰撞的位置就是我们武器生成的位置,

    * 就可以在此处生成从UI生成的物体。

    */   

int layerMask = 1 << 9;

RayHit hit;

    float distance = 1000.0f;

    if (!Physics.Raycast(mainCamera.ScreenPointToRay(screenPoint), out hit, distance, layerMask))
    {
      return;
    }

//生成武器的位置

weapon.positon = hit.point;

   }

  

时间: 2024-10-22 07:59:01

Unity3D NGUI从背包中拖出并在场景中生成物体的相关文章

《Unity3D》通过对象池模式,管理场景中的元素

池管理类有啥用? 在游戏场景中,我们有时候会需要复用一些游戏物体,比如常见的子弹.子弹碰撞类,某些情况下,怪物也可以使用池管理,UI部分比如:血条.文字等等 这些元素共同的特性是:存在固定生命周期,使用比较频繁,场景中大量使用. 所以,我们就通过池管理思路,在游戏初始化的时候,生成一个初始的池,存放我们要复用的元素, 当要用到时,从池中取出:生命周期结束,放回到池中. 代码 这个池的参数有两个:1池中存放的元素 2 池的初始容量(如果池不够了,则会按照这个容量进行扩展) 代码如下 using S

Unity3D NGUI 点击穿透问题的解决方案

当3D场景和NGUI共存时, 点击上方的UI层按钮, 下方的3D物体也会触发OnMouseDown事件, 而有时这是我们所不希望的. 解决方案: 如果3D场景中的物体只需要点击等简单的操作, 那么可以将2D/3D镜头的UI Camera组件的EventType属性分别设为UI/World, 来将3D物体和UI的点击事件分开. 1.为主摄像机添加UI Camera组件, 并将EventType设为World 2.将3D场景中需要添加点击的物体, 添加UIButton属性(NGUI-Attach-B

Unity3D NGUI自适应屏幕分辨率(2014/4/17更新)

原地址:http://blog.csdn.net/asd237241291/article/details/8126619 原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 本文链接地址:Unity3D NGUI自适应屏幕分辨率 1.UIRoot:根据高度自适应屏幕分辨率. NGUI根目录的UIRoot组件自带了根据高度自适应分辨率的功能. Scaling Style属性可选择三种不同的缩放策略. PixelPerfect 完美像素:直接显示设定好的像素.当屏幕高度低于minimum

Unity3d + NGUI 的多分辨率适配

移动端的多机型适配 现在要介绍的是<锁链战记>这款游戏的适配方法,这种适配方法是UI是一个基础尺寸,背景是一个基础尺寸,背景比UI多出的部分是一些没有实际作用的部分,这样的适配方式避免了在iPhone5这样的小屏幕上镶边. 首先设定UIRoot的Scaling Style属性,如果是电脑现在FixedSize,如果要打包到移动端选择FixedSizeOnMobiles. 我这里是以960*640为UI基础尺寸所以这里填写640高. 下面编写脚本BaseAspect.cs using Unity

[Unity3d][NGUI]两种思路解决AssetBundle的依赖关系.

接上文. 使用上文中的AssetBundle打包方式生成的文件包括了依赖关系中的文件. 一般的使用中并不会发现什么问题. 可是当配合NGUI的时候,使用dynamicFont时打包AssetBundle会将每一个组件使用的dynamicFont都分开打包进去. 导出函数请參考:导出资源 导出资源包时出现的问题: 如图: 在解决依赖关系上我使用过2种方案: 第一种是使用BuildPipeline中的PushAssetDependencies和PopAssetDependencies方法来解决依赖关

Unity3D NGUI学习(一)血条

这次来讲讲Unity3D NGUI这个插件的学习,这个插件是收费的,不过去网上可以下载得很多可用版本.用来做用户的交互UI,学习起来比较简单 第一步,导入NGUI包 http://pan.baidu.com/s/1mhKaoha 导入后Unity工具栏上面就会出现关于NGUI的选择了 第二步,开始看一些例子,分析一些例子,因为一般学插件就是下载后照着别人的例子去做可以学会了. 来看一个例子 这里还看一个上面的进度条的 当这个按钮包含几个脚本之后,就达到这样的效果 之后就能够通过实现脚本控制这个进

NGUI的背包制作

NGUI制作背包很是方便,听紫龙慢慢道来: 这次比较简单,但是需要理解代码.首先建立bg---背景,然后是Grid,然后Grid下面是cell,cell是背包的格子,然后里面放物品--wuping.wuping下面放个Label,Label里面写数字,暂时表示物品数量.一切都如图所示: 之后給wuping加一个脚本,脚本命名也为wuping ,下面是详细代码: 话说这段代码要理解一下,wuping继承的是UIDragDropItemz这是NGUI本来就有的,从if开始是自己写的. 说明一下在写代

Unity3D NGUI图集切成图片

Unity3D NGUI图集切成图片 有的时候用NGUI做好了图集,那么原图就没有必要放到Unity3D中了,严重影响Unity3D的速度.但是突然右想把图片弄出来.当然NGUI是提供了图集中单个图片另存,但是如果图片太多,比较费时间,所以用python写了个切图片的工具代码如下: Python环境:2.7 测试通过,需要依赖Image库 NGUI版本:3.7 #coding:utf-8 #unity 图集裁剪成png #Author:Wiker Yong #Date:2015-07-08 im

unity3d ngui右键菜单经常失效+无法修改坐标值

NGUI版本3.7.5bug 场景中的控件经常会右键失效,并且无法修改其X坐标轴,修改代码UIPanel623 把那行改成这样就OK if (anchorOffset && (mCam == null || mCam.transform.parent != cachedTransform)) 原文查看:http://www.seanyxie.com/