viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ceb87fa11d028310dffe6fa47565f9311496be5ca5c55cc833f0eb95b4826540007bb530db580d7fd15a97f82a1c954c1ce3d2ebc9f66de86eea2ce

์ฝ๋Š”์šฉ๋„๋กœ ์ด๋ฏธ์ง€ ์˜ฌ๋ฆผ.



๋ณต๋ถ™์šฉ๋„๋กœ ์ฝ”๋“œ ์˜ฌ๋ฆผ.


//FocusedButton์˜ ์ธ์Šคํ„ด์Šค๋Š” ํ•œ๋ฒˆ์— 1๊ฐœ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅ๋œ๋‹ค.

public class FocusedButton {

private Transform _originalParent; //ํฌ์ปค์Šค ๋˜๊ธฐ ์ „ ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ

private int _originalSiblingIndex; //ํฌ์ปค์Šค ๋˜๊ธฐ ์ „ ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ์—์„œ์˜ ์ž์‹ ์ˆœ์„œ


private Transform _focusedObject;

private Button _focusedButton;

private UnityAction _onClickButtonAction;


private GameObject _emptyObjForLayout;

//์˜ค๋ธŒ์ ํŠธ๋ฅผ ์˜ฎ๊ฒจ๊ฐ€๋Š”๊ณผ์ •์—์„œ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ๋“ฑ์ด ๊นจ์ง€๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ ์˜ค๋ธŒ์ ํŠธ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค


public FocusedButton(Transform focusObj, Button refButton, UnityAction action) {

_focusedObject = focusObj;

_focusedButton = refButton;

_onClickButtonAction = action;


_originalParent = _focusedObject.parent;

_originalSiblingIndex = _focusedObject.GetSiblingIndex();


_focusedButton.onClick.AddListener(OnClickFocusedButton);

}


//ํฌ์ปค์Šค ๋Œ€์ƒ์„ ์˜ค๋ฒ„๋ ˆ์ด UI ์œ„์— ์˜ฌ๋ ค๋‘”๋‹ค

public void SetFocus(Transform focusPlane) {

_focusedObject.SetParent(focusPlane.transform);


_emptyObjForLayout = Global_ResourceLoader.Instance.LoadEmptyUIObject(_originalParent);

_emptyObjForLayout.transform.SetSiblingIndex(_originalSiblingIndex);

}


private void ResetFocus() {

if (_emptyObjForLayout != null) {

Destroy(_emptyObjForLayout);

}

if (_originalParent == null) { //์›๋ž˜ ๋ถ€๋ชจ๊ฐ€ ์—†์—ˆ๋˜ ์˜ค๋ธŒ์ ํŠธ๋Š” ๊ทธ๋ƒฅ ์‚ญ์ œ

Destroy(_focusedObject);

} else {

_focusedObject.SetParent(_originalParent);

_focusedObject.SetSiblingIndex(_originalSiblingIndex);

}

}


private void OnClickFocusedButton() {

ResetFocus();

_focusedButton.onClick.RemoveListener(OnClickFocusedButton);

_onClickButtonAction?.Invoke();

}

}




๋Œ€์ถฉ ์ฝ”๋“œ ์„ค๋ช… :

๊ฐ€๋ฆผํŒ์œ„์— ๋ฒ„ํŠผ์„ ์˜ฎ๊ฒจ์˜ค๊ณ , ํ•ด๋‹น ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฒ„ํŠผ์„ ์›์œ„์น˜ ์‹œํ‚จ ํ›„ ๋ฒ„ํŠผ์˜ ์›๋ž˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•จ.


focusObject์™€ focusButton์ด ๋‚˜๋‰œ ์ด์œ ๋Š”, ๊ฐ€๋”์”ฉ ํ„ฐ์น˜์˜์—ญ ๊ฐœ์„ ์„ ์œ„ํ•ด [๋ฒ„ํŠผ ์ด๋ฏธ์ง€ ์˜ค๋ธŒ์ ํŠธ]์™€, [์‹ค์ œ ํ„ฐ์น˜์ž…๋ ฅ์„ ๋ฐ›๋Š”ย ํˆฌ๋ช…๋ฒ„ํŠผ]์„ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ๋•Œ๋ฌธ์ž„.

ํˆฌ๋ช…๋ฒ„ํŠผ๋งŒ ๊ฐ€๋ฆผํŒ ์œ„๋กœ ์˜ฌ๋ผ์˜ค๋ฉด ๊ณค๋ž€ํ•˜๋ฏ€๋กœ, ์ตœ์ƒ์œ„์˜ค๋ธŒ์ ํŠธ์™€ ๋ฒ„ํŠผ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ๊ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊น€.



๋ฒ„ํŠผ์„ ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค์ง€์•Š๊ณ  ์ด๋™์‹œ์ผœ์„œ ๊ฐ€์ ธ์™”๊ธฐ๋•Œ๋ฌธ์—, ์›๋ž˜ ์ž๋ฆฌ๊ฐ€ ์–ด๋”˜์ง€ ๊ธฐ์–ตํ•ด์ค˜์•ผ๋จ.

๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊นจ์ง€์ง€ ์•Š๊ฒŒํ•˜๊ธฐ์œ„ํ•ด์„œ ์ด๋™ํ• ๋•Œ ๋นˆ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•˜๋‚˜ ๋†“๊ณ ์™€์•ผ๋จ.


๋ณต์‚ฌํ•˜์ง€์•Š๊ณ  ์ด๋™์‹œํ‚จ์ด์œ  : ๋ฒ„ํŠผ์ด ๋ฐ˜ํˆฌ๋ช…์ด๊ฑฐ๋‚˜ ๋ฒ„ํŠผ์— ์• ๋‹ˆ๋ฉ”์ด์…˜/์ดํŽ™ํŠธ๊ฐ€ ์žˆ๋Š”๊ฒฝ์šฐ ๋ณต์‚ฌํ•ด์„œ ๊ฒน์น˜๋ฉด ์–ด์ƒ‰ํ•˜๊ธฐ๋•Œ๋ฌธ

๊ทธ๋ ‡๋‹ค๊ณ  ์ด๋™์ด ๋ฌด์กฐ๊ฑด ์ข‹์€๊ฑด์•„๋‹˜. ๋ฒ„ํŠผ์ด ์ด๋™ํ•ด์žˆ๋Š”๋™์•ˆ ์›๋ณธ ๊ณ„์ธต๊ตฌ์กฐ์— ๋ณ€๊ฒฝ์ด ์žˆ์œผ๋ฉด ๋งŽ์ด ๊ผฌ์ž„.

์žฅ๋‹จ์ ์ด ์žˆ๋Š”๋“ฏ.