位置: 编程技术 - 正文

uGUI实现遥感(unet遥感图像分割)

编辑:rootadmin
好久没有写文章了,最近在做项目是用的unity最新的ui系统UGUI,项目需要做一个摇杆,网上大部分都是用的插件和NGUI做的摇杆,unity自带的摇杆也不怎么好用,而最新的unity4.6.x来了,加入了最新的UI系统“UGUI”,那我们怎么用UGUI来制作摇杆呢~大神勿喷,本人是技术渣渣。比较出色的摇杆插件《Easy Touch》(很强大)还是主要讲讲我们自己怎么做。首先在unity场景里面新建一个空物体和两个Image,把空物体放在创建Image自动生成的Canvas里面,再把两个Image放在空物体里Image建立方式:GameObject->UI->Image 或者直接在“Hierarchy”右键然后UI->Image,看喜好。空物体和两个Image的命名看个人喜好。威恩的节点是这样的: 节点中的joystack是刚刚建立的空节点。Backgound是摇杆的背景。JoystackControl是真实的可以拖动的摇杆。把Backgound和JoystackControl的SourceImage替换成自己喜欢的图片,并且把JoystackControl的图片缩小点,这里我就用系统自带的图片了,威恩这两个节点的inspector如下(我修改过得地方用红框标注了,其他都没改): 如下: 那么样子有了就需要让他动起来,需要三个类“EventTriggerListener”、“JoystackCc”、“PlayerMoveControl”。EventTriggerListener:在NGUI开发的时候处理事件都会用到UIEventListener,我们已经用的习惯的不得了,而UGUI则不是这种机制,并且我觉得这种是最合理的方式,所以自己写一套类&#;的。只是一个帮助类,不需要挂在任何的游戏对象上。JoystackCc:这是主要来控制摇杆的。挂在JoystackControl节点上PlayerMoveControl:这是主要来通过摇杆来控制角色的。挂在你想控制的物体上直接上代码,写了注释,就不哔哔了。EventTriggerListener.cs[C#] 纯文本查看 复制代码?using UnityEngine;using System.Collections;using UnityEngine.EventSystems;using System.Collections.Generic; /// /// UGUI事件监听类/// public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger{ public delegate void VoidDelegate (GameObject go); public delegate void VectorDelegate(GameObject go, Vector2 delta); public VoidDelegate onClick; public VoidDelegate onDown; public VoidDelegate onEnter; public VoidDelegate onExit; public VoidDelegate onUp; public VoidDelegate onSelect; public VoidDelegate onUpdateSelect; public VectorDelegate onDrag; public VoidDelegate onDragOut; static public EventTriggerListener Get (GameObject go) { if(go==null){ Debug.LogError("EventTriggerListener_go_is_NULL"); return null; } else{ EventTriggerListener listener = go.GetComponent(); if (listener == null) listener = go.AddComponent(); return listener; } } public override void OnDrag(PointerEventData eventData) { if (onDrag != null) onDrag(gameObject, eventData.delta); } public override void OnEndDrag(PointerEventData eventData) { if (onDragOut != null) onDragOut(gameObject); } public override void OnPointerClick(PointerEventData eventData) { if(onClick != null) onClick(gameObject); } public override void OnPointerDown (PointerEventData eventData){ if(onDown != null) onDown(gameObject); } public override void OnPointerEnter (PointerEventData eventData){ if(onEnter != null) onEnter(gameObject); } public override void OnPointerExit (PointerEventData eventData){ if(onExit != null) onExit(gameObject); } public override void OnPointerUp (PointerEventData eventData){ if(onUp != null) onUp(gameObject); } public override void OnSelect (BaseEventData eventData){ if(onSelect != null) onSelect(gameObject); } public override void OnUpdateSelected (BaseEventData eventData){ if(onUpdateSelect != null) onUpdateSelect(gameObject); }}JoystackCc.cs[C#] 纯文本查看 复制代码?using UnityEngine;using System.Collections; public class JoystackCc : MonoBehaviour { private Vector3 Origin; Transform mTrans; private Vector3 _deltaPos; private bool _drag = false; private Vector3 deltaPosition; float dis; [SerializeField] private float MoveMaxDistance = ; //最大拖动距离 [HideInInspector] public Vector3 FiexdMovePosiNorm; //固定8个角度移动的距离 [HideInInspector] public Vector3 MovePosiNorm; //标准化移动的距离 [SerializeField] private float ActiveMoveDistance = 1; //激活移动的最低距离 void Awake() { EventTriggerListener.Get(gameObject).onDrag = OnDrag; EventTriggerListener.Get(gameObject).onDragOut = OnDragOut; EventTriggerListener.Get(gameObject).onDown = OnMoveStart; } // Use this for initialization void Start () { Origin = transform.localPosition; //设置原点 mTrans = transform; } // Update is called once per frame void Update() { dis = Vector3.Distance(transform.localPosition, Origin); //拖动距离,这不是最大的拖动距离,是根据触摸位置算出来的 if (dis >= MoveMaxDistance) //如果大于可拖动的最大距离 { Vector3 vec = Origin &#; (transform.localPosition - Origin) * MoveMaxDistance / dis; //求圆上的一点:(目标点-原点) * 半径/原点到目标点的距离 transform.localPosition = vec; } if (Vector3.Distance(transform.localPosition, Origin) > ActiveMoveDistance) //距离大于激活移动的距离 { MovePosiNorm = (transform.localPosition - Origin).normalized; MovePosiNorm = new Vector3(MovePosiNorm.x, 0, MovePosiNorm.y); } else MovePosiNorm = Vector3.zero; } void MiouseDown() { if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)) { } else mTrans.localPosition = Origin; } Vector3 result; private Vector3 _checkPosition(Vector3 movePos, Vector3 _offsetPos) { result = movePos &#; _offsetPos; return result; } void OnDrag(GameObject go, Vector2 delta) { if (!_drag) { _drag = true; } _deltaPos = delta; mTrans.localPosition &#;= new Vector3(_deltaPos.x, _deltaPos.y, 0); } void OnDragOut(GameObject go) { _drag = false; mTrans.localPosition = Origin; if (PlayerMoveControl.moveEnd != null) PlayerMoveControl.moveEnd(); } void OnMoveStart(GameObject go) { if (PlayerMoveControl.moveStart != null) PlayerMoveControl.moveStart(); }}PlayerMoveControl.cs[C#] 纯文本查看 复制代码?using UnityEngine;using System.Collections; public class PlayerMoveControl : MonoBehaviour { private Transform _mTransform; public JoystackCc _mJoystackCc; public float moveSpeed = ; public delegate void MoveDelegate(); public static MoveDelegate moveEnd; public static MoveDelegate moveStart; public static PlayerMoveControl Instance; // Use this for initialization void Awake() { Instance = this; _mTransform = transform; moveEnd = OnMoveEnd; moveStart = OnMoveStart; } void Start () { } void OnMoveEnd() { _turnBase = false; } void OnMoveStart() { _turnBase = true; } // Update is called once per frame private float angle; private bool _turnBase = false; void Update() { if (_turnBase) { Vector3 vecMove = _mJoystackCc.MovePosiNorm*Time.deltaTime*moveSpeed/; _mTransform.localPosition&#;=vecMove; angle = Mathf.Atan2 (_mJoystackCc.MovePosiNorm.x, _mJoystackCc.MovePosiNorm.z) * Mathf.Rad2Deg - ; _mTransform.localRotation = Quaternion.Euler(Vector3.up*angle); } }}建好这三个类之后,把他们绑定到相应的节点上。都挂在哪,代码上面有写测试一下,威恩新建了一个cube来作为测试对象,加了个plane作为“伪”地面,太黑了再打个灯….下面是测试效果: 如果有任何问题直接留言~尽自己所能帮忙解决~

推荐整理分享uGUI实现遥感(unet遥感图像分割),希望有所帮助,仅作参考,欢迎阅读内容。

uGUI实现遥感(unet遥感图像分割)

文章相关热门搜索词:opencv处理遥感影像,opencv遥感图像处理,yolo遥感图像检测,遥感envi,unet遥感图像分割,遥感envi,遥感图像获取,遥感图像获取,内容如对您有帮助,希望把文章链接给更多的朋友!

手游频繁崩溃”闪退”? 从程序上找原因 手游频繁崩溃闪退?从程序上找原因作为玩家,当游戏crash的时候是什么心情,如果这个游戏玩起来还不错的话,那我可能还会打开第二次,如果这个游

一款已上市MMO手游地图同步方案总结 1.客户端地图子的相关知识在2.5D的MMO游戏里,角色是通过3D的方式渲染,2D的地图是通过2D的方式显示,所以在客户端一般会有三个坐标系:a)3D坐标系:

设计战斗引导剧情(欢迎探讨) 需求:为已完成的战斗模块,增加一个新手引导,当条件成立时,激活事件。根据策划给出的文案分析事件:主要是战斗过程中插入对话/操作引导(1)

标签: unet遥感图像分割

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

上一篇:<Unity UGUI>使用c#反射实现UGUI文本显示的国际化

下一篇:手游频繁崩溃”闪退”? 从程序上找原因(手游频繁崩溃怎么解决)

  • 个人独资企业要注意什么
  • 划拨土地使用权出租
  • 转账支付水电费属于什么会计科目
  • 购买的固定资产什么时候折旧
  • 外经证错了已经交了税怎么办
  • 过路费纸质发票怎么生成电子发票
  • 新公司成立第一次会议
  • 小规模所得税税负率怎么计算
  • 存货占营业收入的意义
  • 一次性奖金并入综合所得
  • 社保补贴收入要交税吗?
  • 建筑物加高违法么
  • 现金存款凭证
  • 库存商品做账
  • 房产继承税征收标准是多少
  • 一般纳税人转小规模怎么办理
  • 推广费什么公司能开
  • 企业收到银行未收到怎么做账
  • vue框架使用方法
  • PHP:pg_copy_to()的用法_PostgreSQL函数
  • fsacder2e是什么文件夹
  • 石楠花 开花
  • 补缴的土地出让金需要计提吗
  • 口腔门诊提供免费服务有哪些?
  • php生成随机6位数
  • 个人所得税累计扣除是什么意思
  • 结转制造费用用什么科目
  • 金税盘锁死状态
  • php读取大文件的内容
  • groupinfo命令
  • python字符串中变量替换
  • index.php怎么修改
  • 银行回单应该如何处理
  • 配置windows update
  • 企业预付账款科目设置
  • 新公司开账户需要多少钱
  • 工资总额主要包括
  • 非独立核算门市部销售自产应税消费品
  • 营改增之后账务怎么处理
  • 建筑安装印花
  • 劳务发票税率最新标准
  • 合并财务报表为什么要抵消子公司所有者权益
  • 销售收入打折后怎么做账
  • 安全费用支付
  • 2021年财务报表申报
  • 简易征收增值税一般纳税人怎么报税
  • mysql8.0 主从
  • win7开机chkdsk
  • 免费获取windows8.1
  • win8怎么添加我的电脑到桌面
  • freebsd重置密码
  • thinkpad e431 bios怎么进入
  • win8最多支持多大内存
  • win7系统怎么设置不休眠
  • linux gc
  • win10自带microsoft office怎么用
  • win10一年更新几次
  • 可用分区az
  • ubuntu怎么安装程序
  • windows8.1rt
  • ExtJS 2.0实用简明教程 之ExtJS版的Hello
  • opengl画直线函数
  • mongo 安装
  • 菜单下一章
  • dos命令 for
  • mare的用法
  • 日历查询的算法怎么写
  • js函数里的函数怎么调用
  • java与android的区别
  • jquery自定义方法
  • javascript模块化与非模块化开发区别
  • 支付境外公司服务费需要缴纳哪些税费
  • 如何知道公司所有账户
  • 税收征收管理与实践
  • 北京 国税局
  • 网上交医保几点上班
  • 下载广东省电子税务局appp
  • 国家税务局的单位性质是什么
  • 重庆轨道第五轮19号线路
  • 转卖车位土地增值税税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设