【问题标题】:How to bring a specific child on the front in horizontal layout in Unity如何在Unity的水平布局中将特定的孩子放在前面
【发布时间】:2021-03-19 21:07:34
【问题描述】:

所以基本上我有一手牌。这些卡片是游戏对象预制件,当我将其悬停时,它会放大并略微向上移动。但是当缩放它时,它会覆盖他左边的卡片并留在他右边的卡片后面,我希望这张卡片能越过卡片。

我试图改变 z 索引和层,但手上的所有卡片都由相同的水平布局统治......

我应该只在悬停的卡片的每一侧推动卡片吗?或者有人有办法在其他人面前画一个特定的孩子?

【问题讨论】:

    标签: c# unity3d layout gameobject


    【解决方案1】:

    您可以做的是动态添加一个新的 Canvas 到您想要在前面的对象,并覆盖排序:

    在代码中,你可以这样做:

    var newCanvas = yourGameObject.AddComponent<Canvas>();
    newCanvas.overrideSorting = true;
    newCanvas.sortingOrder = 1; // this has to be higher than order of parent canvas
    

    当然,您应该记住在不再需要此画布时将其移除。

    编辑:使用我验证有效的完整代码更新了解决方案。我错过了将光线投射器添加到新画布中。这是完整的代码:

    public class YourClass : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler
    {
        private Canvas tempCanvas;
        private GraphicRaycaster tempRaycaster;
    
        public void OnPointerEnter(PointerEventData eventData)
        {
            // add and configure necessary components
            tempCanvas = gameObject.AddComponent<Canvas>();
            tempCanvas.overrideSorting = true;
            tempCanvas.sortingOrder = 1;
            tempRaycaster = gameObject.AddComponent<GraphicRaycaster>();
            
            // your operations on the object
            transform.localScale = new Vector2(1.1f, 1.1f);
            // ...
        }
    
        public void OnPointerExit(PointerEventData eventData)
        {
            // remove components that are not needed anymore
            Destroy(tempRaycaster);
            Destroy(tempCanvas);
            
            // your operations on the object
            transform.localScale = new Vector2(1f, 1f);
            // ...
        }
    }
    

    【讨论】:

    • 感谢您的回答,我尝试添加一个画布,但它似乎删除并中断了任何指针事件,您知道它的行为是否正确吗?也许我做错了?我的游戏对象有多个需要保持活动状态的指针事件,例如拖动卡片。我只希望对象显示在相同水平布局中的其他对象的前面。
    • 嘿 Tanguy,很抱歉没有早点回复您。添加新画布时,您还需要添加新的 raycaster 以使事件正常工作。更新了答案以显示完整代码。希望对您有所帮助!
    • 是的,我对 Unity 和 raycast 还很陌生……我应该知道这一点,但我非常感谢您的帮助,这正是我想要的行为!
    猜你喜欢
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2011-11-06
    • 2022-10-09
    • 2018-05-17
    • 2020-01-31
    • 2021-05-24
    • 2013-03-23
    相关资源
    最近更新 更多