需求:
如图所示,在下方的场景导航中,需要点击红色按钮,然后跳转到响应场景中,但是由于蓝色导航icon
遮挡住了红色所在的物体。此时需要解决触发不灵敏的问题。
Unity在创建Image
之后会自动勾选Raycast Target
,但是有些情况下是不需要这个属性的勾选,所以需要取消勾选。
比如说这个图片遮挡住了其他物体,其他物体的点击无法触发,这时就要对该图片取消勾选Raycast Target
属性。
如果是单个Image
,只需要在面板中取消勾选即可,但是如果Image
比较多或者Image
是变化的,那就需要动态调整。
实现:
GameObject.Find("YourTargetObject").GetComponent<Image>().raycastTarget = false;
//可以使用标签来查找多个物体,然后再获取其身上组件属性,置为false
_mainCamera = GameObject.FindWithTag("Image");
这样就会取消勾选了Raycast Target
属性,就不会存在触发不灵敏问题的Bug。
另外一种实现方法:
调整Image自身大小,同样可以实现相同的功能。
public override void OnUpdate()
{
if (current != null)
{
current.sizeDelta = new Vector2(40f, 40f);
//这里是为了控制小地图上的箭头始终保持宽高始终为40,解决了红点的触发问题
}
}
需要注意的地方是这的Current
一定要判断是否为NULL
,否则会在引擎中报空物体的错误,因为可能还没有加载完毕就执行了下方语句,造成错误。
Unity设置游戏物体始终朝向摄像头
思路:
把所有需要改变朝向的物体遍历出来,加到一个容器中,使用for循环对每一个物体的Rotation
做计算。
实现代码
private GameObject _mainCamera;//设置UI朝向摄像机使用
private void Start()
{
_mainCamera = GameObject.FindWithTag("MainCamera");//按标签查找
}
private void Update()
{
var TextObjList1 = new List<string>() { "测试触发点1", "测试触发点2", "测试触发点3", "测试触发点4"};
_mainCamera = GameObject.FindWithTag("MainCamera");
for (int i = 0; i < TextObjList1.Count; i++)
{
TextObj = GameObject.Find(TextObjList1[i]);
var rotation = Quaternion.LookRotation(_mainCamera.transform.TransformVector(Vector3.forward), _mainCamera.transform.TransformVector(Vector3.up));
rotation = new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w);
if (TextObj != null)
{
TextObj.transform.rotation = rotation;
}
else
{
return;
}
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容