【Unity3D基础】让物体动起来①--UGUI鼠标点击移动

背景

首先还是先声明自己是比较笨的一个人,总是找不到高效的学习方法,目前自己学习Unity3D的方式主要是两种,一种是直接看高质量的源码,另一种是光看不行还要自己动手,自己写一些有代表性的小程序,这也是本文的由来。

诚然,现在已经不是Unity3D发展的黄金期了,很多知识点已经有很多朋友总结分享了,但由于Unity3D的客观性就是依赖插件很厉害,这样就会照成插件满天飞,通用性不强,还有过时的风险,还有就是网上很多朋友发的帖子很多并不是学习总结,只是对于Unity3D IDE的使用及一些API的罗列,或者是一些游戏Demo的完整教程。自己一直想从另一个角度来学习一下,也就是单纯从游戏的角度(我们常说的业务逻辑的角度),其实以前很多VC游戏教程都是这种思路,就是从一个很小的功能开始学,逐个知识点积累最后完成一个相对复杂完整的Demo程序。所以本文就从最小的让物体动起来开始。

说明

文章的视角基本着眼的是从简单到复杂功能的学习理解,所以是主要是基于2D的,也就是从Untiy2D开始,同时也会穿插一些3D部分,

所以最好使用具有Unity2D功能的Unity3D客户端,好像是4.3以后吧

效果图镇楼

run

需求描述和分析

本章的需求很简单,就是“通过在屏幕中点击鼠标,在2d视图中控制物体进行移动”。在别的平台和引擎中简直是Hello world级别的需求在Unity3d中却变得有些棘手了,主要有几个问题困扰着我,

1、IO输入是怎么样的;

2、鼠标事件是如何接收的;

3、移动动画是如何实现的;

“原理很简单,现实很残酷”,Unity3d的开放性造成了所谓的插件和库很多,显得凌乱。这里还是按照自己的惯性思维来了,按照别的平台的教程,

A、首先要有一个容器,

B、在容器上放置需要移动的精灵,

C、通过容器接收鼠标事件,

D、事件驱动精灵移动

这里UGui中采用容器的概念(或者我还不知道别的库也有),所以先在UGui中实现,

第一步,加一个Panel对象

第二步,导入一个精灵的图片资源

第三步,加一个2d的Image对象,设置其sprite为刚才导入的图片资源

第四步,给Panel对象绑定一个脚本,PanelController,

树结构

1

加图资源后

2

绑定代码

3

 

具体代码如下

 

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class PanelController:  MonoBehaviour , IPointerClickHandler
{
    private Transform childPlayTransform;
    private Transform parentCanvasTransform;
    // Use this for initialization
	void Start ()
	{
       //获得Image的Transform
        childPlayTransform = transform.Find("Image");
       parentCanvasTransform = transform.parent;
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log(string.Format("x:{0},y:{1}", eventData.position.x, eventData.position.y));
        Debug.Log(string.Format("button x:{0},y:{1}", childPlayTransform.localPosition.x, childPlayTransform.localPosition.y));

        Vector2 localPoint;
        //在矩形范围内检测,全局鼠标点击点,到local点的转换
        RectTransformUtility.ScreenPointToLocalPointInRectangle(transform as RectTransform, eventData.position,
            eventData.enterEventCamera, out localPoint);

        childPlayTransform.localPosition = localPoint;
    }
}

  

代码虽然少,但是核心的知识点就是世界坐标、相机坐标和局部坐标的转换也就是下面的这个函数

        //
        // 摘要: 
        //     Does the RectTransform contain the screen point as seen from the given camera?
        //
        // 参数: 
        //   rect:
        //     The RectTransform to test with.
        //
        //   screenPoint:
        //     The screen point to test.
        //
        //   cam:
        //     The camera from which the test is performed from.
        //
        // 返回结果: 
        //     True if the point is inside the rectangle.
        public static bool RectangleContainsScreenPoint(RectTransform rect, Vector2 screenPoint, Camera cam);
        public static bool ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);

  

总结

虽然功能很少,但是也有几个知识点,一个是Unity3d的坐标系统,一个是坐标转换的基础知识,一个是Unity3d Gui的事件处理方式,特此记录。功能上有点小缺陷就是精灵的移动是瞬移的,也就是鼠标指到哪里移动到哪里(确实我也没有看出有什么不平滑),留到下篇继续吧。

源码

转载于:https://www.cnblogs.com/IlidanStormRage/p/5973074.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity-UGUI是Unity游戏引擎中的一个UI系统,可以用来创建和管理用户界面。它提供了丰富的功能和工具,使得开发者能够轻松地制作各种表格。 使用Unity-UGUI制作表格的步骤如下: 1. 创建Canvas对象:在Unity中,首先需要创建一个Canvas对象,作为UI渲染的容器。选择GameObject -> UI -> Canvas,即可创建一个Canvas对象。 2. 添加Table组件:选择Canvas对象,在Inspector面板中点"Add Component"按钮,然后在搜索栏中输入"Table",选择适合的Table组件,点添加。 3. 设置表格的行列数:在Table组件的Inspector面板中,设置表格所需的行数和列数。 4. 设置表格样式:可以在Inspector面板中设置表格的颜色、大小等属性,以满足具体需求。 5. 添加表格内容:可以通过代码或者拖拽方式,向表格中添加所需的文本或图片。可以通过操作表格的行列索引,将内容放置在特定的位置。 6. 设置表格的交互性:可以为表格中的每个单元格添加点事件或其他交互效果,提升用户体验。 7. 调整表格布局:可以通过调整Canvas的大小、位置,或者改变组件之间的层次关系,来调整表格的布局。 8. 完善表格功能:可以根据具体需求,添加更多表格的功能,比如排序、过滤、搜索等。 9. 测试和优化:在表格制作完成后,可以进行测试,查看表格的显示效果和交互效果,并进行优化。 总之,使用Unity-UGUI制作表格,只需简单的操作和设置,就能够创建出各种样式、功能丰富的表格,满足游戏或应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值