홈>
캔버스에서 요소를 찾고 있습니다 (텍스트 필드 및 슬라이더). 값을 검색하여 함수에 전달할 수 있습니다.
그러나 지금까지 나는 그것들에 접근하는 방법을 알 수 없다. 캔버스 자체의 메소드는 볼 수 있지만 캔버스에 추가 한 요소의 이름은 볼 수 없습니다.캔버스를 공용 변수에 저장했습니다. 그런 다음 텍스트 레이블에 연결된 슬라이더와 텍스트 필드를 배치했습니다. 레이블이나 슬라이더 또는 텍스트 필드에 액세스 할 수 없습니다.
Canvas --
|___ Text
| |_____ InputField
|
|___ Text
|_____ Slider
canvas.text.inputfield.text와 같은 작업을 수행하는 입력 필드의 텍스트 값에 액세스하려고했지만 점 표기법을 사용할 때 텍스트 필드의 이름을 볼 수 없으므로 작동하지 않습니다. 슬라이더도 마찬가지입니다.
public Canvas mainmenu;
void Start() {
mainmenu = mainmenu.Getomponent<Canvas>();
}
public RetrieveData(){
// dot notation does not find sub elements of mainmenu canvas
// only the properties and methods of the canvas itself.
}
다른 요소의 부모 인 경우에도 직접 볼 수없는 경우 실제로 UI 캔버스의 요소에 어떻게 액세스합니까?
- 답변 # 1
- 답변 # 2
여러 가지 가능성이 있습니다
정적 함수GameObject.Find ()를 사용하여 게임 객체를 찾을 수 있습니다 전체 장면에서 이름. 그러나이 기능은 약간 느리므로 시도하십시오. 한 번만 호출합니다.
검색 만하는 비 정적 함수Transform.Find ()를 사용할 수도 있습니다. 변환의 아이들. Transform.FindChild는 더 이상 사용되지 않습니다. Transform.Find ()와 동일합니다.
- 답변 # 3
Canvas 자체를 가져와 gameObject의 속성에 액세스하려고하기 때문입니다. 그러니 시도 해봐요
MainMenu
GetComponentInChildren
관련 자료
- Android Studio 4.1에서 ViewBinding을 사용하여 MainActivity.kt의 content_main.xml 요소에 액세스하는 방법은 무엇입니까?
- javascript - DCJS (D3) 캔버스 요소를 올바르게 오버레이
- javascript - "li"요소에 하위 "a"가 포함 된 목록에 액세스하려면 어떻게해야합니까?
- c++ - for 루프 내에서 벡터의 요소에만 액세스 할 수 있습니다
- html - 축소되었을 때 navbar의 요소에 액세스하는 방법은 무엇입니까?
- python - Selenium을 사용하여 중첩 된 HTML 태그의 웹 요소에 액세스하는 방법
- google app maker - Appmaker의 목록 행 안에있는 요소의 활성화 된 속성에 액세스하는 방법은 무엇입니까?
- html - 자바 스크립트로 배열 요소에 액세스
- python - 목록을 여러 줄로 나눈 다음 해당 줄의 특정 요소에 어떻게 액세스합니까?
- arrays - VBA 사전 키 요소에 직접 액세스하는 방법
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 문자열에서 특정 문자 제거
- JavaScript 변수를 HTML div에 '출력'하는 방법
이름으로 게임 오브젝트를 찾지 않는 것이 좋습니다 (
GameObject.Find
사용) 또는transform.Find
피할 수있을 때마다 기존 답변에서 제안한대로)내 경험상 이것은 실수로 깨지기 쉬운 스크립트와 다른 이국적인 버그 사이의 취성 관계를 초래하는 경향이 있습니다
특정
InputField
를 사용해야하는 스크립트가있는 경우 가장 안정적인 방법 그리고Slider
이러한 유형의 공개/직렬화 된 필드 제공:... 검사관에 연결하십시오.
이것은 에디터를 사용하는 모든 사람에게이 객체들 사이의 의존성을명시 적합니다-이 스크립트를 첨부하자마자 인스펙터가 필요한 것을 알려줍니다
이 의존성은 Unity에서도 볼 수 있으므로 모든 장면 오브젝트가 아닌 경우 빌드에 어떤 자산을 함께 포함해야하는지 알고 있습니다. 이러한 참조는 객체가로드 될 때 즉시 채워 지므로 한 스크립트가
Start()
할 시간이없는 다른 스크립트의 필드에 액세스하려고 할 때 일반적인 실행 순서 문제를 피합니다. 아직.동일한 유형이나 같은 이름의 다른 개체를 추가하거나 육아 계층을 변경해도 개체에 직접적인 참조가 있기 때문에 실수로이를 중단하지 않습니다. 비슷한 이름의 기능을하는 100 개의 물체가있는 장면에서도 원하는 것을 정확하게 지정할 수 있습니다.
이러한 객체가 같은 장면에 존재하지 않으면이 참조를 보유하는 중간 스크립트를 만들 수도 있습니다. 예. Wyzwyz
<시간>MainMenu
와 같은 각 하위 페이지에 대해 알고있는 스크립트 그리고HighScoresMenu
및SettingsMenu
입력 값에 대한 참조 보유 그리고SettingsMenu
. 그런 다음 다른 스크립트가이 필드에 액세스해야하는 경우 (이유를 모르겠습니다. 스크립트를 사용하는 스크립트는 아마도PlayerNameField
에 있어야합니다 그러나 정당한 이유가 있다고 가정 해 봅시다)-GammaSlider
에 대한 참조를 얻을 수 있습니다. 인스턴스 및SettingsMenu
사용 . 이러한 중간 스크립트는 저렴하며 메뉴에서 계층 구조로 구성되는 방법에 대한 정보를 얻을 필요가 없으며 검사기에서 스크립트 배선 작업을 중앙 집중화 할 필요가 없도록 나머지 코드를 절약 할 수 있습니다.보다 자동으로 연결하려면 GetComponentInChildren을 사용할 수도 있습니다 :
mainMenu.settingsMenu.gammaSlider
의 하위 계층을 검색합니다.public Canvas mainMenu; private InputField _inputField; void Start() { _inputField = mainMenu.GetComponentInChildren<InputField>(); }
로 무언가를 찾을 때까지 손자 등을 포함하여 구성 요소를 반환하십시오. (GetComponentsInChildren을 사용하여 모든 일치 항목의 배열을 가져올 수도 있습니다)이름으로 객체를 찾는 것과 같은 문제가 있습니다 (
mainMenu
이동). 새로운 부모에게 우리가 그것을 놓칠 수 있습니다. 관련없는 다른InputField
추가 우리는 잘못된 것을 잡을 수 있습니다), 그러나 우리는 우리가 올바른 유형을 되찾고 있음을 알고 있습니다. 또한 "InputField"라는 이름의 개체를 "PlayerNameInput"으로 변경하거나 오타/자본을 수정하여 가독성을 향상시키려는 사람도 문제를 일으키지 않습니다.InputField
와 같이 자신의 유형에 대해 명시 적으로 사용하는 경우 위의 예에서 이러한 위험은 크게 사라집니다. 두 개의InputField
를 사용하여 양식을 작성할 수 있습니다. s, 그러나 당신은SettingsMenu
의 두 사본을 사용하지 않을 것입니다 따라서InputField
스크립트 사용SettingsMenu
직접 참조 대신 찾을 수는 있지만 실수로 망가지지는 않습니다.