void Start()
    {
        // !!!
        CreateGrid();
        // !!!
        Comp_Animator = GetComponent <Animator>();
        LayoutStartingPoint_InitialPosition    = LayoutStartingPoint.transform.localPosition;
        Sub_FunctionalityMenuHandler           = GameObject.FindObjectOfType <FunctionalityMenuHandler>();
        DictionaryOfNormalAffordanceMenus      = new Dictionary <Affordances.Names, GameObject>();
        DictionaryOfCaptionlessAffordanceMenus = new Dictionary <Affordances.Names, GameObject>();
        DeviceControllerDictionary             = new Dictionary <string, GameObject>();

        for (int i = 0; i < allAfordanceMenuCouples.Length; i++)
        {
            DictionaryOfNormalAffordanceMenus.Add(allAfordanceMenuCouples[i].name, allAfordanceMenuCouples[i].Menu_Normal);
            DictionaryOfCaptionlessAffordanceMenus.Add(allAfordanceMenuCouples[i].name, allAfordanceMenuCouples[i].Menu_Camptionless);
        }
    }
    //End of Adding Feedback to Model
    #endregion

    void Start()
    {
        #region Getting Initial Position and Rotation
        initialPosition = transform.position;
        initialRotation = transform.rotation;
        #endregion

        #region Initializing Important Variables
        desiredPosition         = Vector3.zero;
        ListOfAffordances       = new List <Affordances>();
        DictionaryOfAffordances = new Dictionary <Affordances.Names, Affordances>();
        DictionaryOfFeedBacks   = new Dictionary <Affordances.Names, FeedBackBase>();
        supportedMediaFormats   = new List <Affordances.MediaTypes>();
        hasChildren             = (transform.childCount > 0);
        Child_MainBody          = transform.FindChild("MainBody");

        Renderer Sub_Renderer = GetComponent <Renderer>() == null?transform.GetChild(0).GetComponent <Renderer>() : GetComponent <Renderer>();

        if (Child_MainBody == null)
        {
            initialTextures     = new Texture[Sub_Renderer.materials.Length];
            initialColors       = new Color[Sub_Renderer.materials.Length];
            initialMaterialName = new string[Sub_Renderer.materials.Length];

            initialMaterials = Sub_Renderer.materials;
            initialMaterial  = Sub_Renderer.material;

            for (int i = 0; i < Sub_Renderer.materials.Length; i++)
            {
                initialTextures[i]     = Sub_Renderer.materials[i].mainTexture;
                initialMaterialName[i] = Sub_Renderer.materials[i].name;
                if (Sub_Renderer.materials[i].HasProperty("_Color"))
                {
                    initialColors[i] = Sub_Renderer.materials[i].color;
                }
            }
            if (Sub_Renderer.material.HasProperty("_Color"))
            {
                initialColor = Sub_Renderer.material.color;
            }
        }
        else
        {
            initialTextures     = new Texture[Child_MainBody.GetComponent <Renderer>().materials.Length];
            initialColors       = new Color[Child_MainBody.GetComponent <Renderer>().materials.Length];
            initialMaterialName = new string[Child_MainBody.GetComponent <Renderer>().materials.Length];

            initialMaterials = Child_MainBody.GetComponent <Renderer>().materials;
            initialMaterial  = Child_MainBody.GetComponent <Renderer>().material;


            for (int i = 0; i < Child_MainBody.GetComponent <Renderer>().materials.Length; i++)
            {
                initialTextures[i]     = Child_MainBody.GetComponent <Renderer>().materials[i].mainTexture;
                initialMaterialName[i] = Child_MainBody.GetComponent <Renderer>().materials[i].name;
                if (Child_MainBody.GetComponent <Renderer>().materials[i].HasProperty("_Color"))
                {
                    initialColors[i] = Child_MainBody.GetComponent <Renderer>().materials[i].color;
                }
            }

            if (Child_MainBody.GetComponent <Renderer>().material.HasProperty("_Color"))
            {
                initialColor = Child_MainBody.GetComponent <Renderer>().material.color;
            }
        }

        #endregion
        #region Finding Refrence to Important Scripts
        Sub_FunctionalityMenuHandler = GameObject.FindObjectOfType <FunctionalityMenuHandler>();
        Sub_LoadingAnimationHandler  = GameObject.FindObjectOfType <LoadingAnimationHandler>();
        Sub_Lollypop = GameObject.FindObjectOfType <Lollypop>();
        Sub_DeviceConnectivityManager = GameObject.FindObjectOfType <InputOutputManager>();
        #endregion

        SetUpColliderAndAffordanceFeedback();

        RecognizingAffordances();
    }