UGUI 屏幕适配 导致 BoxCollider无效 解决记录

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

昨天导出安卓包之后,在我的MX2上安装,测试发现 子弹碰到 敌机 毫无反应,敌机碰到我的飞机毫无反应,因为设计时的屏幕尺寸是640x940,而MX2是800x1280。第一反应是屏幕分辨率问题。

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

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

如下过程。

转自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的设置

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

时间: 2024-10-19 10:48:43

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

unity ugui屏幕适配

1.unity分为2D和3D两种模式,分别对应camera组件的Projection选项,如果是Perspective,就是透视投影(3D模式),如果是Orthographic,就是正交投影(2D模式): 2.unity自带的ugui当中Canvas对象下的Canvas组件当中的Render Mode选项为Screen Space - Overlay时,消耗的draw call相对较少: 3.unity自带的ugui当中Canvas对象下的Canvas Scaler组件的Reference Pi

使用cocos2dx 3.2和cocosstudio做屏幕适配----有图才有真想!

屏幕适配的文章太多了,基本上都是理论性的东西,大家明白了机制就知道了,没有完美的适配方案,除非你们的美工愿意折腾. 常规策略: 今天研究了一下屏幕适配导致的缩放和展示不全的问题(黑边的方案直接淘汰).细想一下,美工给我们一张图(假设这张图width足够长),在不同的分辨率上我们应该如何对其展示?肯定不可能在所有的分辨率上把这张图完美的按照原比例展示出来,那答案就只有两种了: 1.铺满屏幕(长宽非等比缩放 EXACTFIT) 天天德州就采用了这种方法,在不同的分辨率上能明显看到元素被缩放或者拉伸了

转: 安卓自动缩放布局,解决屏幕适配问题

转:http://blog.csdn.net/ljh102/article/details/45536293 2015.8.4 更新: 增加参数custom:autoScaleType 设置缩放模式,可以设为“fitWidth”,"fitHeigth" 和 "fitInside".分别代表缩放至宽度匹配,缩放至高度匹配以及缩放至适合容器内部,默认为"fitInside". 做过安卓开发的都知道,屏幕适配是一件非常困难的事情. Google官方的解

解决多屏幕适配的问题Dimension

开闭原则--可变与不变的分离,且容易定制 应用程序的目的是尽可能做到适用于多种设备,这些设备的配置不尽相同,有些不同的物理尺寸,分辨率.为了达到最佳的适配效果,和最少的代码重复,以及最好的可扩展性,就需要分离资源的使用和资源.用一个统一的资源管理者来管理资源.代码通过资源管理者提供的统一的接口来获取资源.这样对于使用者来讲资源的获取的方式是统一,资源者无需关心如何为不同的设备获取不同的资源.这样就把随不同设备变化而变化的代码降到最低,只有资源管理者需要操心不同的设备相关的不同的资源. 比如:字串

Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题

上一篇文章详细讲解了一下onMeasure/measure方法在Android自定义控件时的原理和作用,参看博文:Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸(一),今天就来真正实践一下,让这两个方法大显神威来帮我们搞定图片的屏幕适配问题. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45038329,非允许请勿用于商业或盈利用途,违者必究. 使用ImageView会遇到

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

一下内容转自:http://imgtec.eetrend.com/forum/3992 此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个方案影响,可以完美和此方案配合使用. 先说明一些基本的概念: 1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕高度 2.Unity2D中摄像机镜头的尺寸决定了我们实际看到游戏内容的多少,在编辑器中我们

屏幕适配之百分比方案详解

屏幕适配之百分比方案详解 Android设备碎片化十分严重,在开发过程中的适配工作也非常很繁琐,有关屏幕适配的介绍请看之前的文章屏幕适配. 最近看到DrawerLayout,support v4中提供的类,想到对google提供的这些支持库,自己一点都不熟悉,想着看看Google提供的支持库都有什么内容.结果看着看着在最后忽然看到了Percent Support Library.寻思怎么还百分比呢?仔细一看介绍,我擦,真是太有用了. Percent Support Library The Per

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

ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决 ,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1:li边距“无故”增加 任何事情都是有原因的,li边距也不例外. 先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着

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

此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个方案影响,可以完美和此方案配合使用. ---------------------------------------正式开始的分割线----------------------------------------- 先说明一些基本的概念: 1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕