从来没有做过一个完整的游戏,所以用UGUI来做个手游界的 " Hello World " - 微信打飞机。看起来easy做起来也碰到各种奇异的问题。

昨天导出安卓包之后,在我的MX2上安装。測试发现 子弹碰到 敌机 毫无反应。敌机碰到我的飞机毫无反应。由于设计时的屏幕尺寸是640x940,而MX2是800x1280。

第一反应是屏幕分辨率问题。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

于是在电脑上更改分辨率測试,把640x960 改动为 800x1280 ,重现了手机上的问题。

例如以下过程。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHV1dHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

有两个 Image 在 界面中,是 设计时的分辨率 640x960 。

细心的朋友 在图中就能发现问题,红色Image PosZ为什么是1,不应该是 0 吗?

对的,因为粗心大意。在代码中 原本是设置 localScale为1的代码 却写成了 设置 localPosition 为1的无用代码。同一时候也导致了这次的错误。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

另外一个蓝色 Image的设置

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHV1dHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

PosZ为0。

按理说这两张图片不在同一 Z轴,不会相交,不会产生碰撞。

可是

由于蓝色、红色 Image 上的 BoxCollider 设置的 Z 大小都是1。所以 两个碰撞体 正好可以碰到,从而产生碰撞。

当更换了分辨率之后发生了什么?

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

首先我们让代码 Clone 出来一个 红色 Image,由于在代码中没有设置 localScale 为 1,所以随着分辨率变化,localScale 变成了 0.9。这样,红色Image 上面的 BoxCollider也因此 Z轴的大小变为了原来的 0.9 。

所以,两个BoxCollider 由于不在同一Z轴,红色的在1,蓝色的在0,并且两个BoxCollider的 Z 轴范围 1/2+0.9/2 不足以达到 两个BoxCollider的Z轴距离,没有相交,所以不能产生碰撞。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

一切都是下面一段代码造成:

using UnityEngine;
using System.Collections; public class clonetest : MonoBehaviour { public Transform imgObj; // Use this for initialization
void Start () { GameObject clone = Instantiate (imgObj.gameObject) as GameObject;
clone.transform.SetParent (imgObj.parent);
clone.SetActive (true);
clone.transform.localPosition = Vector3.one; //本来应该设置localScale的代码写成了设置localPosition;
clone.transform.localRotation = Quaternion.identity; //对位置进行了其他设置;
clone.transform.SetlocalPositionX (-0.25f);
clone.transform.SetlocalPositionY (0f);
} // Update is called once per frame
void Update () { }
}

演示样例下载:

http://pan.baidu.com/s/1dDyEZNr

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

UGUI 屏幕适配 导致 BoxCollider无效 解决记录的更多相关文章

  1. Unity ugui屏幕适配与世界坐标到ugui屏幕坐标的转换

    我们知道,如今的移动端设备分辨率五花八门,而开发过程中往往只取一种分辨率作为设计参考,例如采用1920*1080分辨率作为参考分辨率. 选定了一种参考分辨率后,美术设计人员就会固定以这样的分辨率来设计 ...

  2. 使用cocos2dx 3.2和cocosstudio屏幕适配总结----相对布局

    屏幕适配的文章太多了,基本上都是理论性的东西.大家明确了机制就知道了.没有完美的适配方案,除非你们的美工愿意折腾. 常规策略: 今天研究了一下屏幕适配导致的缩放和展示不全的问题(黑边的方案直接淘汰). ...

  3. Android Camera多屏幕适配解决预览照片拉伸

    通常,拍照预览页面的照片拉伸主要与下面两个因素有关: 1.     Surfaceview的大小 2.     Camera中的Preview的大小 如下图:     图中preview显示的是手机支 ...

  4. Android屏幕适配dp、px两套解决办法

    "又是屏幕适配,这类文章网上不是很多了吗?" 我也很遗憾,确实又是老问题.但本文重点对网上的各种方案做一个简短的总结,和具体使用方法. 若想了解具体Android设备适配的前世因果 ...

  5. ie6,ie7,ie8 css bug兼容解决记录

    ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...

  6. Unity2D多分辨率屏幕适配方案(转载)

    一下内容转自:http://imgtec.eetrend.com/forum/3992 此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有 ...

  7. [原创]一种Unity2D多分辨率屏幕适配方案

    此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个 ...

  8. Cocos2dx开发之屏幕适配

    由于各种智能手机的屏幕大小都不一致,会出现同一张图片资源在不同的设备分辨率下显示不一样的问题.为避免这样的情况,需要Cocos引擎能提供多分辨率的支持,也就是说要求实现这样的效果 — 开发者不需要考虑 ...

  9. 一种Unity2D多分辨率屏幕适配方案

    http://www.cnblogs.com/flyFreeZn/p/4073655.html 此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏 ...

随机推荐

  1. Spring的模块组成

    Spring的模块组成 1.核心容器:核心容器提供 Spring 框架的基本功能(Spring Core).核心容器的主要组件是 BeanFactory,它是工厂模式的实现. BeanFactory ...

  2. luoguP3480 [POI2009]KAM-Pebbles 阶梯Nim

    将序列差分并翻转之后,变成了阶梯\(Nim\)的模板题 QAQ #include <cstdio> #include <cstring> #include <iostre ...

  3. Lunix/Mac下根据最后修改时间复制文件和文件夹,保持原有的目录结构

    度娘知道:http://zhidao.baidu.com/link?url=DD47jm6qDgT7yxsnz9e-NC4Fqd33oRoiIwcGLkw5TL4cbf50VKY2IONbHKH0IE ...

  4. Javascript 继承-原型的陷阱

    注:本文为翻译文章,原文为"JavaScript Inheritance – How To Shoot Yourself In the Foot With Prototypes!" ...

  5. VC 调用 Python

    //file:py.h BOOL InitPython(); BOOL ClosePython(); ======================== //file:py.cpp #include & ...

  6. spring---transaction(1)---源代码分析(事务的拦截器TransactionInterceptor)

    写在前面: 先了解一下spring的事务.分为分明式事务管理和注解式事务管理,对于前期的事务,spring会通过扫描拦截对于事务的方法进行增强(以后讲解). 若果目标方法存在事务,spring产出的b ...

  7. Maven项目META-INF文件夹不存在的问题

    直接在resources文件夹下新建META-INF文件夹即可. 参考: https://my.oschina.net/KingPan/blog/750159 https://stackoverflo ...

  8. HUST 1017 Exact cover(DLX精确覆盖)

    Description There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...

  9. 使用Bootstrap 3开发响应式网站实践02,轮播

    本篇体验图片轮播.html部分为: <div class="carousel slide" id="myCarousel" > <!--Ind ...

  10. MAC之tar解压与压缩打包命令

    tar [-cxtzjvfpPN] 文件与目录 ....参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件! ...