Sandrammmm 2018-05-02 02:48 采纳率: 0%
浏览 3057
已结题

有关Unity中多个Prefab物体绑定同一脚本出现相互影响的问题

用unity做了一个3D俄罗斯方块的游戏,七个方块都是Prefab,每个俄罗斯方块又由四个cube组成,他们都绑定了同一个脚本,该脚本实现方块的下落和合法性检测等功能。但运行时第一个方块降落后,第二个方块及往后都不能正常降落。尝试打印信息后发现,在合法性检测那里遍历transform的所有child的时候,第一个方块的child也会被包含进去;在尝试对第一个方块进行销毁(从场景中消失)后,之后的方块能正常下落,但这样就不是俄罗斯方块游戏了,有没有什么办法在不让前边的方块在场景中消失的情况下解决问题。

    private bool IsValidGridPos()
    {
        //Debug.Log(this.transform.name);
        foreach (Transform child in transform)
        {
            Debug.Log(this.transform.name);
            Debug.Log(child.name);
            Vector2 v = MyGrid.Instance.RoundVector2(child.position);
            Debug.Log("v:" + v);


            if (!MyGrid.Instance.IsInside(v))
            {
                Debug.Log("222222");
               // Debug.Log(this.gameObject.name);
                return false;
            }

            if (MyGrid.Instance.grid[(int)v.x, (int)v.y] != null && MyGrid.Instance.grid[(int)v.x, (int)v.y].parent != this.transform)
            {
               // Debug.Log(this.gameObject.name);
                return false;
            }
        }
        return true;
    }

  //方块下落
    void Fall()
    {
        if((Time.time -lastFallTime)>FindObjectOfType<Queue>().TimeFrame)
        {
            transform.position -= new Vector3(0, 1, 0);//让其下落
            Debug.Log("position:" + transform.position);
            Debug.Log(this.transform.name);

            //位置合法性检测
            if (IsValidGridPos())
            {//位置合法
                Debug.Log("合法");
                UpdateGrid();
            }
            else
            {//位置不合法,代表方块降落到底部
                Debug.Log("不合法");
                transform.position += new Vector3(0, 1, 0);

                MyGrid.Instance.DeleteFullRows();

                // GameObject.Find(objName).GetComponent<ARGroups>().enabled = false;
                //Destroy(gameObject);
                gameObject.GetComponent<ARGroups>().enabled = false;
                FindObjectOfType<Spanwer>().SpawnNext();//生成新的方块

               // grandFa = GetComponentsInChildren<Transform>();

                // enabled = false;//控制移动和选择的功能不能用了
            }

            lastFallTime = Time.time;//更新上一次下落的时间为当前时间
        }
    }
  • 写回答

5条回答 默认 最新

  • yangchenxi577 2018-05-02 03:28
    关注

    降落后的方块做检测,脚本隐藏或删除,在合法性检测子物体那里,加个获取脚本判断,第一个方块就不会包含了。

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮