public void Prime(MenuItemScript menuItem) { if (textName != null) { textName.text = menuItem.ItemText; } if (sprite != null) { sprite.sprite = menuItem.ItemImage; } }
/// <summary> /// 指定した方向を見たときに一番近い項目IDを得る /// </summary> /// <param name="origin">現在の項目</param> /// <param name="items">対象項目群</param> /// <param name="direction">方向</param> /// <returns></returns> private int FindMinDistanceMenuItem(MenuItemScript origin, MenuItemScript[] items, Direction direction) { int index = -1; float minDistance = float.PositiveInfinity; foreach (var item in items) { Vector3 position = item.transform.position; Vector3 diff = position - origin.transform.position; switch (direction) { case Direction.Up: if (diff.y <= 0.0f) { continue; } break; case Direction.Down: if (diff.y >= 0.0f) { continue; } break; case Direction.Left: if (diff.x >= 0.0f) { continue; } break; case Direction.Right: if (diff.x <= 0.0f) { continue; } break; } float distance = diff.magnitude; if (distance < minDistance) { minDistance = distance; index = item.Index; } } return(index); }
void MenuOpen() { normalisedMousePosition = new Vector2(Input.mousePosition.x - Screen.width / 2, Input.mousePosition.y - Screen.height / 2); currentAngle = Mathf.Atan2(normalisedMousePosition.y, normalisedMousePosition.x) * Mathf.Rad2Deg; //dividing the screen into 8ths currentAngle = (currentAngle + 360) % 360; selection = (int)currentAngle / 45; if (selection != previousSelection) { previousMenuItemSc = menuItems[previousSelection].GetComponent <MenuItemScript>(); previousMenuItemSc.Deselect(); previousSelection = selection; menuItemSc = menuItems[selection].GetComponent <MenuItemScript>(); menuItemSc.Select(); } }
// Update is called once per frame void Update() { normalisedMousePosition = new Vector2(Input.mousePosition.x - Screen.width / 2, Input.mousePosition.y - Screen.height / 2); currentAngle = Mathf.Atan2(normalisedMousePosition.y, normalisedMousePosition.x) * Mathf.Rad2Deg; currentAngle = (currentAngle + 360) % 360; selection = (int)currentAngle / 45; if (selection != previousSelection) { previousmenuItemSc = menuItems[selection].GetComponent <MenuItemScript>(); previousmenuItemSc.Deselect(); previousmenuItemSc = selection; menuItemSc = menuItems[selection].GetComponent <MenuItemScript>(); menuItemSc.Select(); } Debug.Log(selection); }
// Start is called before the first frame update void Start() { fireScript = fire.GetComponentInChildren <MenuItemScript>(); waterScript = water.GetComponentInChildren <MenuItemScript>(); plantScript = plant.GetComponentInChildren <MenuItemScript>(); }
protected override void Update() { if (SceneChangeSingleton.instance.IsFading) { return; } if (IsPopChildMenu) { if (ChildMenu != null) { // 子メニューが開いてるため、このメニューは操作を受け付けない return; } ReturnChildMenu(); } Direction direction = Direction.None; if (Input.GetButton("CursorRight")) { direction = Direction.Right; } else if (Input.GetButton("CursorLeft")) { direction = Direction.Left; } else if (Input.GetButton("CursorUp")) { direction = Direction.Up; } else if (Input.GetButton("CursorDown")) { direction = Direction.Down; } if (direction != Direction.None) { if (!IsOldButton) { // 押した瞬間 switch (direction) { case Direction.Up: CurrentCursorIndex = IndexToItem(CurrentCursorIndex).UpItemIndex; break; case Direction.Down: CurrentCursorIndex = IndexToItem(CurrentCursorIndex).DownItemIndex; break; case Direction.Left: CurrentCursorIndex = IndexToItem(CurrentCursorIndex).LeftItemIndex; break; case Direction.Right: CurrentCursorIndex = IndexToItem(CurrentCursorIndex).RightItemIndex; break; } IsOldButton = true; } } else { IsOldButton = false; } //------ 項目選択処理 ------ bool isMenuDecision = false; // メニュー項目を決定 // マウス座標の位置にあるゲームオブジェクトを得る Ray ray; Vector3 mousePosition = Input.mousePosition; if (menuCamera != null) { ray = menuCamera.ScreenPointToRay(mousePosition); } else { ray = Camera.main.ScreenPointToRay(mousePosition); } Debug.DrawRay(ray.origin, ray.direction * 1000.0f); RaycastHit hit; MenuItemScript menuItem = null; bool isMenuitem = false; // マウスがメニューの項目上にあるかどうか if (Physics.Raycast(ray, out hit, 1000.0f, 1 << Layers.Menu.layer)) { // MenuItemScriptがアタッチされているのでメニュー項目 menuItem = hit.transform.GetComponent <MenuItemScript>(); isMenuitem = true; if (mousePosition != oldMousePosition && menuItem != null) { CurrentCursorIndex = menuItem.Index; } } oldMousePosition = mousePosition; if (!isMenuDecision && (Input.GetKeyDown(KeyCode.Z) || Input.GetKeyUp(KeyCode.Return))) { isMenuDecision = true; } if (Input.GetButtonDown("Select") && isMenuitem) { isMenuDecision = true; } if (isMenuDecision) { if (CurrentCursorItem.ChildMenuPrefab != null) { PopChildMenu(); } else if (MenuSelected != null) { if (!MenuSelected(CurrentCursorName)) { Destroy(gameObject); } } } if (Input.GetButtonDown(CanselMessage)) { if (transform.parent == null) { if (!MenuSelected(CanselMessage)) { Destroy(gameObject); } } else { if (!MenuSelected(ReturnMessage)) { Destroy(gameObject); } } } }
/// <summary> /// 指定の方向の移動先項目IDを調べる /// </summary> /// <param name="origin">現在の項目</param> /// <param name="items">対象項目群</param> /// <param name="direction">方向</param> /// <returns></returns> private int FindTargetItem(MenuItemScript origin, MenuItemScript[] items, Direction direction) { int index = FindMinDistanceMenuItem(origin, items, direction); return(index); }