如何将unity2d的unity 2d sprite 平铺平铺

【求助】unity2d sprite之间的显示层级_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:66,576贴子:
【求助】unity2d sprite之间的显示层级收藏
Sorting layer的显示顺序是大的永远在前面吗能不能做到类似一棵树,角色在树前面优先显示角色,走到树后优先显示树呢?
火星时代作为专业unity3d研发培训机构,依靠多年游戏教学实力,让您快速成为u3d工程师.毕业月薪&12000起&.详情请点击&&&
有那个深度的选项啊
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或学习Unity2D屏幕点击选中方法 VR开发教程
可能在手机端做2D屏幕点击,选中精灵的操作还是比较少的,所以这方面的可以查到的资料也比较匮乏,很多都是3D中的选中算法,实际原理也比较简单,就是射线命中法,从相机到屏幕点击点发出射线,命中的精灵就是点击选中的精灵了,当然精灵要有物理碰撞的区域,不然无法检测。实际原理都是一样的。
1.Raycast法
原理相同于3D中得Raycast法,具体使用略有区别。
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
if(hit.collider != null)
  Debug.Log (\&Target Position: \& + hit.collider.gameObject.transform.position);
2.Overlap法
个人觉得这个方法对于2D更合适一些,判断点击的点落在了哪些collider中。
Collider2D[] col = Physics2D.OverlapPointAll(Camera.main.ScreenToWorldPoint(Input.mousePosition));
if(col.Length & 0)
&&&&foreach(Collider2D c in col)
以上代码中用到的是mousePosition,对于触摸的Touch原理完全相同。
现在方法有了剩下的就是如何实践实现的问题了,在我看来具体实现涉及到两个问题,一个是鼠标点击选中,另一是选中后如何呈现。真正实现了这两点才算是一个及格的学习实践。最终实现效果如下图所示:
这里有了背景分析后,我们的需求是这样:
&通过鼠标点击场景中的精灵,置精灵为选中状态(这里采用的方式是透明化)&。
有了需求,我们开始技术分析,大体需要一下几个知识点,我们逐一破结,学习
1、鼠标点击
2、2D精灵命中测试,需要2D物理碰撞
3、给精灵添加物理碰撞
4、命中的深度测试(根据原理被射线穿透的可能有多个精灵而我们应该选中的应该是离相机最近的,也就是深度最小的且唯一)
5、选中精灵的透明化处理
列出这五点出来,我也有点惊讶了,竟然这么多技术功能点,汗!
1、鼠标点击
有两种方式实现,
传统方式在Update中添加鼠标点击处理,如下所示:
&&& void Update () {
&&&&&&& if (Input.GetMouseButtonDown(0))
&&&&&&& {}
这种方法的缺点,就是放在Update中的逻辑较多,当代码复杂的时候,可读性比较差
用Unirx实现,有点像传统的winform事件订阅方式
void Start()
//鼠标点击控制
Observable.EveryUpdate().Where(_ =& Input.GetMouseButtonDown(0)).Subscribe(LeftMouseClick2);
2、2D精灵命中测试
这个基本就是用资料中的Overlap法 ,这里代码就不贴出来了,在4中会贴出完整代码。
3、给精灵添加物理碰撞
这里可以用传统的方式在Unity IDE中可视化的为GameObject添加 ColliderBox组件,然后设置Size也就是鼠标点击区域
由于教程中的精灵是动态创建的,所以我的Box Collider 2D插件也是用代码动态添加的,这里当然也可以不局限Box Collider 2D如果需要更好的物理选中效果,也可以采用更精确的,我的代码如下所示:
//动态添加碰撞
BoxCollider2D boxCollider2D = qxPlayer.AddComponent&BoxCollider2D&();
boxCollider2D.size = new Vector2(mixSpriteSetting.Collider2DSizeWidth, mixSpriteSetting.Collider2DSizeHeight);
其中qxPlayer就是我的精灵GameObject了。
4、命中的深度测试
实际上要解决的问题就是&根据原理被射线穿透的可能有多个精灵而我们应该选中的应该是离相机最近的,也就是深度最小的且唯一&
如何获取最近的精灵的我查阅了下Unity API文档 关键部分我用红色字标出来了:
Get a list of all colliders that overlap a point in space.
This function is similar to OverlapPoint except that all colliders that overlap the point are returned.&The colliders in the returned array are sorted in order of increasing Z coordinate.&An empty array is returned if there are no colliders over the point.
Note that this function will allocate memory for the returned Collider2D array. You can use OverlapPointNonAlloc to avoid this overhead if you need to make the check frequently.
有了Unity卓越的工作,再加上本身我的精灵对象使用的画家算法,自然数组中第一就是离相机(屏幕)最近的了,接下来只要根据Name获得第一个精灵即可,如下代码所示
/// &summary&
/// 鼠标左键点击
/// &/summary&
/// &param name=\&l\&&&/param&
private void LeftMouseClick2(long l)
&&&&Collider2D[] col = Physics2D.OverlapPointAll(Camera.main.ScreenToWorldPoint(Input.mousePosition));
&&&&if (col.Length & 0)
&&&&&&&&foreach (Collider2D c in col)
&&&&&&&&&&&&string keyName = c.GetComponent&Collider2D&().gameObject.
&&&&&&&&&&&&QXPlayerController sprite = Find(keyName);
&&&&&&&&&&&&if (sprite != null)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&sprite.SetTransparent(true);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&Debug.Log(\&Target Position: do what you want\& + keyName);
&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
其中Find函数通过gameObject.Name遍历查找我在场景中所有的精灵对象的封装函数,比较简单就不解释了
/// &summary&
/// 在场景地图中查找Name精灵控件
/// &/summary&
private QXPlayerController Find(string name)
&&&&return sprites.ContainsKey(name) ? sprites[name] : null;
5、选中精灵的透明化处理
设置选中精灵的半透明就变的轻松加愉快了,代码如下比较简单
/// &summary&
/// 设置透明度
/// &/summary&
/// &param name=\&isTransparent\&&true为透明,false为不透明&/param&
public void SetTransparent(bool isTransparent)
&&&&spriteRenderer.color = new Color(1f, 1f, 1f, isTransparent?0.5f:1f);
至此一套完整的Unity 2D 精灵鼠标点击选中的解决方案完成了,希望对您有帮助。
<font color=#-20<font color=#-20<font color=#-19<font color=#-15<font color=#-14<font color=#-14<font color=#-14<font color=#-14<font color=#-14<font color=#-13
近日,RLTY CHK工作室的联合创始人Nick Robinson发布了一篇文章,以媒体天师麦克卢汉...
VR设计师和开发者们开始着手如何让VR环境及体验更加有趣、逼真。以下是一些关于如何为room...
笔者在为《幻想装置》和《工作模拟》制作出混合现实的预告片以后,研究了更深层次的VR...
关于用EasyAR SDK 搭建AR 开发环境的教程,我已经写过很多了,不懂得朋友可以看下我之...
一篇VR实践指导文章。重点关注的是将传统UX设计流程及方法融入VR产品设计的思路,以及...看懂此文,不再困惑于Unity 2D 中的那些事儿!_蓝鸥_传送门
你是真实用户吗(Are you a robot)?
我们怀疑你不是真实用户,已对你的访问做了限制。如果您是真实用户,非常抱歉我们的误判对您造成的影响,您可以通过QQ()或电子邮件()反馈给我们,并在邮件和QQ请求信息里注明您的IP地址:220.177.198.53,我们会尽快恢复您的正常访问权限。另外,如果您不是在访问的当前页面,我们建议您移步
或者 在浏览器中输入以下地址:http://chuansong.me/n/ 访问,您所访问的网站是从抓取的数据,请直接访问,会有更好的体验和更及时的更新。We suspect you are a robot.We are really sorry if you are not,and you can email us () with your current IP address: 220.177.198.53 to get full access to .If you are not accessing
for the current page,you'd better visit
for better performance,as the current website you are accessing is just spam.
觉得不错,分享给更多人看到
蓝鸥 微信二维码
分享这篇文章
8月19日 20:55
蓝鸥 最新头条文章
蓝鸥 热门头条文章

我要回帖

更多关于 unity2d sprite动画 的文章

 

随机推荐