捕捉gameObject到网格

本文关键字:网格 gameObject 捕捉 | 更新日期: 2023-09-27 18:12:04

我正在制作一款2D TD游戏,目前我已经使用quill18教程制作了一个简单的建筑系统。然而,我试图让它snap在我的瓷砖,因为我鼠标在他们。

这是我的脚本应用到建筑对象

    void Update(){
    Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    mousePos.z = 0;
    Vector2 mp = mousePos;
    this.transform.position = mousePos;
    Collider2D col = GetComponent<Collider2D> ();
    if (GameManager.instance.player.CanAffordCurrentBuilding()
        && !col.IsTouchingLayers(LayerMask.GetMask("NonBuildingLayer"))
        && col.IsTouchingLayers(LayerMask.GetMask("BuildingLayer"))
        && !col.IsTouchingLayers(LayerMask.GetMask("BlockingLayer"))) {
        SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>();
        foreach(SpriteRenderer sr in sprites)
            sr .color = Color.green;
        canPlace = true;
    } 
    else {
        SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>();
        foreach(SpriteRenderer sr in sprites)
            sr .color = Color.red;
        canPlace = false;
    }
    if (Input.GetMouseButtonDown (0) && canPlace) {
        SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>();
        foreach(SpriteRenderer sr in sprites)
            sr .color = Color.white;
        Destroy(GetComponent<Rigidbody2D>() );
        Destroy(this);
        GameManager.instance.player.BuildingWasPlaced();
    }

这样做的是,如果触摸层是"BuildingLayer",我将能够放置对象,对象总是跟随我的鼠标,直到我放置它。然而,我希望它只跟随我的鼠标当触摸层不是BuildingLayer。当触摸层是BuildingLayer时,我想让它附着在最靠近鼠标的贴图上。当我移动鼠标时,不断地改变抓拍片

我怎么能完成这样的事情?我有一个名为grid的列表,它包含了游戏中所有的建筑砖块。

捕捉gameObject到网格

我认为你可以做的是在你的建筑中添加触发碰撞盒。如果你要拖拽一个,让你要拖拽的那个有一个稍微大一点的触发碰撞框。然后检查在你拖动的对象上是否有一个触发碰撞,如果有,捕捉到一个相对于与之发生碰撞的对象的位置。你需要检查碰撞是在底部、左侧、顶部还是右侧