您的位置:首页 > 产品设计 > UI/UE

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

2015-06-04 01:25 435 查看
从来没有做过一个完整的游戏,所以用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: