【问题标题】:Snap gameObject to grid?将游戏对象捕捉到网格?
【发布时间】:2015-09-09 07:20:20
【问题描述】:

我正在制作一个 2D TD 游戏,目前我使用 quill18 教程制作了一个简单的构建系统。但是,当我将鼠标悬停在瓷砖上时,我试图让它卡在我的瓷砖上。

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

    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 的列表,其中包含游戏中的所有建筑图块。

【问题讨论】:

    标签: c# unity3d 2d mouse


    【解决方案1】:

    我在想你能做的就是为你的建筑添加触发碰撞盒。 如果你要拖动一个,让你拖动的那个有一个稍大的触发碰撞框。 然后检查您拖动的对象上是否存在触发碰撞,如果是,则捕捉到相对于发生碰撞的对象的位置。您需要检查碰撞是在底部、左侧、顶部还是右侧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多