UGUI

Unity 是一套跨平台的游戏引擎,可用于开发 Windows、MacOS、Linux 平台的单机游戏,或是 iOS、Android
移动设备的游戏。Unity 也可开发支持 WebGL 技术的网页游戏,或 PlayStation、XBox、Wii 主机上的游戏。

Unity 支持 PhysX 物理引擎、粒子系统,并且提供网络多人连接的功能,无需学习复杂的编程语言,匹配游戏制作上的各项需求。Unity
的推出降低游戏开发的门槛,即使是个人或小型团队制作游戏也不再是梦想。对于游戏公司而言,选择使用 Unity 引擎也可以缩短游戏的开发时间。

Unity 类似于Director,Blender,Virtools或Torque Game
Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows和Mac OS
X下,可发布游戏至Windows、Wii、OSX或iOS平台。也可以利用Unity web
player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。

Unity3D是一个用于创建诸如三维电子游戏、建筑可视化、实时三维动画等类型互动内容的综合型创作工具。

设计


首先切换到2D模式,然后新建Canvas对象background作为背景,为了加上背景图,新建一个Image组件。UGUI用到的图片是Sprite类型的,导入图片后要改成Sprite类型。

再加上两个Image对象left、right作为背包背景,标签设置为bag。

为了便于布局,加上Grid Layout Group组件。在其下新建一些Image对象cell作为放置物品的格子,标签设置为cell。


对于cell对象,加上Grid Layout Group组件限制物品的位置和大小。

在其下新建Image对象作为物品。


为物品添加代码

为了使物品可以点击拖动放下,需要实现
EventSystems的IDragHandler,IPointerDownHandler,IPointerUpHandler这三个接口对应的方法。
void OnDrag (PointerEventData eventData); void OnPointerDown (PointerEventData
eventData);void OnPointerDown (PointerEventData eventData);
先实现拖动和点击缩小。
public void OnDrag(PointerEventData eventData) { transform.position =
Input.mousePosition; }public void OnPointerDown(PointerEventData eventData) {
transform.localScale =new Vector3 (0.8f, 0.8f, 0.8f); } public void OnPointerUp
(PointerEventData eventData) { transform.localScale =new Vector3 (1f, 1f, 1f); }
为了使鼠标松开时判断所处位置,通过射线获得下一层该位置的对象,因为射线被物品本身挡到,先要设置自身 Canvas Groupd 的 Blocks
Raycasts 为false,让 event trigger 忽略自身,才可以让 event trigger 检测到它下面一层的对象。

为了使拖动时使物品一直处于顶层不被其他对象挡到,需要在拖动时将物品的父对象设为最上级的background。

最终代码:
using System.Collections; using System.Collections.Generic; using UnityEngine;
using UnityEngine.UI; using UnityEngine.EventSystems; public class item :
MonoBehaviour,IDragHandler,IPointerDownHandler,IPointerUpHandler {public
GameObject background;public GameObject cell; // Use this for initialization
void Start () { } // Update is called once per frame void Update () { } public
void OnDrag(PointerEventData eventData) { transform.position =
Input.mousePosition; transform.SetParent (background.transform); }public void
OnPointerDown(PointerEventData eventData) { transform.localScale = new Vector3 (
0.8f, 0.8f, 0.8f); transform.GetComponent<CanvasGroup> ().blocksRaycasts = false
; }public void OnPointerUp(PointerEventData eventData) { transform.localScale =
new Vector3 (1f, 1f, 1f); GameObject p =
eventData.pointerCurrentRaycast.gameObject;if (p.tag == "cell")
transform.SetParent (p.transform);else if (p.tag == "item") {
transform.SetParent (p.transform.parent.transform); p.transform.SetParent
(cell.transform); p.GetComponent<item> ().cell = p.transform.parent.gameObject;
}else transform.parent = cell.transform; cell = transform.parent.gameObject;
transform.GetComponent<CanvasGroup> ().blocksRaycasts =true; } }

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信