質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oculus

Oculusは、 仮想現実のハードウェアなどを開発している米IT企業、およびそのVRデバイスのシリーズ。低価格で広い視野角やヘッドトラッキングが特徴のVRヘッドセット「Oculus Rift」を始め、さまざまなVRデバイスがリリースされています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2856閲覧

Unity2019.4でOculus Integrationをインポートした際に起こるコンパイルエラー

yamakomiya

総合スコア3

Oculus

Oculusは、 仮想現実のハードウェアなどを開発している米IT企業、およびそのVRデバイスのシリーズ。低価格で広い視野角やヘッドトラッキングが特徴のVRヘッドセット「Oculus Rift」を始め、さまざまなVRデバイスがリリースされています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/10/24 00:04

編集2020/10/24 01:18

前提・実現したいこと

Unityでoculus integrationをインポートした時に以下のエラーメッセージが発生しました。
自分で作ったプロジェクトをOculus Quest1で作動させたいのですが、コンパイルエラーが出てしまい、実行ができません。このエラーを解決したいです。

発生している問題・エラーメッセージ

エラーメッセージ
Assets\Oculus\SampleFramework\Core\DebugUI\Scripts\DebugUIBuilder.cs(229,12): error CS1061: 'Button' does not contain a definition for 'onClick' and no accessible extension method 'onClick' accepting a first argument of type 'Button' could be found (are you missing a using directive or an assembly reference?)

該当のソースコード

c#です。文字制限で最後の方の一部を削除してしまいました。もし必要であればお仰せください。

コード /************************************************************************************ Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved. See SampleFramework license.txt for license terms. Unless required by applicable law or agreed to in writing, the sample code is provided “AS IS” WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the license for specific language governing permissions and limitations under the license. ************************************************************************************/ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; #if UNITY_EDITOR using UnityEngine.SceneManagement; #endif public class DebugUIBuilder : MonoBehaviour { // room for extension: // support update funcs // fix bug where it seems to appear at a random offset // support remove // Convenience consts for clarity when using multiple debug panes. // But note that you can an arbitrary number of panes if you add them in the inspector. public const int DEBUG_PANE_CENTER = 0; public const int DEBUG_PANE_RIGHT = 1; public const int DEBUG_PANE_LEFT = 2; [SerializeField] private RectTransform buttonPrefab = null; [SerializeField] private RectTransform labelPrefab = null; [SerializeField] private RectTransform sliderPrefab = null; [SerializeField] private RectTransform dividerPrefab = null; [SerializeField] private RectTransform togglePrefab = null; [SerializeField] private RectTransform radioPrefab = null; [SerializeField] private GameObject uiHelpersToInstantiate = null; [SerializeField] private Transform[] targetContentPanels = null; private bool[] reEnable; [SerializeField] private List<GameObject> toEnable = null; [SerializeField] private List<GameObject> toDisable = null; public static DebugUIBuilder instance; public delegate void OnClick(); public delegate void OnToggleValueChange(Toggle t); public delegate void OnSlider(float f); public delegate bool ActiveUpdate(); private const float elementSpacing = 16.0f; private const float marginH = 16.0f; private const float marginV = 16.0f; private Vector2[] insertPositions; private List<RectTransform>[] insertedElements; private Vector3 menuOffset; OVRCameraRig rig; private Dictionary<string, ToggleGroup> radioGroups = new Dictionary<string, ToggleGroup>(); LaserPointer lp; LineRenderer lr; public LaserPointer.LaserBeamBehavior laserBeamBehavior; public void Awake() { Debug.Assert(instance == null); instance = this; menuOffset = transform.position; // TODO: this is unpredictable/busted gameObject.SetActive(false); rig = FindObjectOfType<OVRCameraRig>(); for (int i = 0; i < toEnable.Count; ++i) { toEnable[i].SetActive(false); } insertPositions = new Vector2[targetContentPanels.Length]; for (int i = 0; i < insertPositions.Length; ++i) { insertPositions[i].x = marginH; insertPositions[i].y = -marginV; } insertedElements = new List<RectTransform>[targetContentPanels.Length]; for (int i = 0; i < insertedElements.Length; ++i) { insertedElements[i] = new List<RectTransform>(); } if (uiHelpersToInstantiate) { GameObject.Instantiate(uiHelpersToInstantiate); } lp = FindObjectOfType<LaserPointer>(); if (!lp) { Debug.LogError("Debug UI requires use of a LaserPointer and will not function without it. Add one to your scene, or assign the UIHelpers prefab to the DebugUIBuilder in the inspector."); return; } lp.laserBeamBehavior = laserBeamBehavior; if (!toEnable.Contains(lp.gameObject)) { toEnable.Add(lp.gameObject); } GetComponent<OVRRaycaster>().pointer = lp.gameObject; lp.gameObject.SetActive(false); #if UNITY_EDITOR string scene = SceneManager.GetActiveScene().name; OVRPlugin.SendEvent("debug_ui_builder", ((scene == "DebugUI") || (scene == "DistanceGrab") || (scene == "OVROverlay") || (scene == "Locomotion")).ToString(), "sample_framework"); #endif } public void Show() { Relayout(); gameObject.SetActive(true); transform.position = rig.transform.TransformPoint(menuOffset); Vector3 newEulerRot = rig.transform.rotation.eulerAngles; newEulerRot.x = 0.0f; newEulerRot.z = 0.0f; transform.eulerAngles = newEulerRot; if (reEnable == null || reEnable.Length < toDisable.Count) reEnable = new bool[toDisable.Count]; reEnable.Initialize(); int len = toDisable.Count; for (int i = 0; i < len; ++i) { if (toDisable[i]) { reEnable[i] = toDisable[i].activeSelf; toDisable[i].SetActive(false); } } len = toEnable.Count; for (int i = 0; i < len; ++i) { toEnable[i].SetActive(true); } int numPanels = targetContentPanels.Length; for (int i = 0; i < numPanels; ++i) { targetContentPanels[i].gameObject.SetActive(insertedElements[i].Count > 0); } } public void Hide() { gameObject.SetActive(false); for (int i = 0; i < reEnable.Length; ++i) { if (toDisable[i] && reEnable[i]) { toDisable[i].SetActive(true); } } int len = toEnable.Count; for (int i = 0; i < len; ++i) { toEnable[i].SetActive(false); } } // Currently a slow brute-force method that lays out every element. // As this is intended as a debug UI, it might be fine, but there are many simple optimizations we can make. private void Relayout() { for (int panelIdx = 0; panelIdx < targetContentPanels.Length; ++panelIdx) { RectTransform canvasRect = targetContentPanels[panelIdx].GetComponent<RectTransform>(); List<RectTransform> elems = insertedElements[panelIdx]; int elemCount = elems.Count; float x = marginH; float y = -marginV; float maxWidth = 0.0f; for (int elemIdx = 0; elemIdx < elemCount; ++elemIdx) { RectTransform r = elems[elemIdx]; r.anchoredPosition = new Vector2(x, y); y -= (r.rect.height + elementSpacing); maxWidth = Mathf.Max(r.rect.width + 2 * marginH, maxWidth); } canvasRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, maxWidth); canvasRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, -y + marginV); } } private void AddRect(RectTransform r, int targetCanvas) { if (targetCanvas > targetContentPanels.Length) { Debug.LogError("Attempted to add debug panel to canvas " + targetCanvas + ", but only " + targetContentPanels.Length + " panels were provided. Fix in the inspector or pass a lower value for target canvas."); return; } r.transform.SetParent(targetContentPanels[targetCanvas], false); insertedElements[targetCanvas].Add(r); if (gameObject.activeInHierarchy) { Relayout(); } } public RectTransform AddButton(string label, OnClick handler, int targetCanvas = 0) { RectTransform buttonRT = GameObject.Instantiate(buttonPrefab).GetComponent<RectTransform>(); Button button = buttonRT.GetComponentInChildren<Button>(); button.onClick.AddListener(delegate { handler(); }); ((Text)(buttonRT.GetComponentsInChildren(typeof(Text), true)[0])).text = label; AddRect(buttonRT, targetCanvas); return buttonRT; } public RectTransform AddLabel(string label, int targetCanvas = 0) { RectTransform rt = GameObject.Instantiate(labelPrefab).GetComponent<RectTransform>(); rt.GetComponent<Text>().text = label; AddRect(rt, targetCanvas); return rt; } public RectTransform AddSlider(string label, float min, float max, OnSlider onValueChanged, bool wholeNumbersOnly = false, int targetCanvas = 0) { RectTransform rt = (RectTransform)GameObject.Instantiate(sliderPrefab); Slider s = rt.GetComponentInChildren<Slider>(); s.minValue = min; s.maxValue = max; s.onValueChanged.AddListener(delegate (float f) { onValueChanged(f); }); s.wholeNumbers = wholeNumbersOnly; AddRect(rt, targetCanvas); return rt; } public RectTransform AddDivider(int targetCanvas = 0) { RectTransform rt = (RectTransform)GameObject.Instantiate(dividerPrefab); AddRect(rt, targetCanvas); return rt; } public RectTransform AddToggle(string label, OnToggleValueChange onValueChanged, int targetCanvas = 0) { RectTransform rt = (RectTransform)GameObject.Instantiate(togglePrefab); AddRect(rt, targetCanvas); Text buttonText = rt.GetComponentInChildren<Text>(); buttonText.text = label; Toggle t = rt.GetComponentInChildren<Toggle>(); t.onValueChanged.AddListener(delegate { onValueChanged(t); }); return rt; }

試したこと

ネットで調べて、翻訳をして、私の乏しいプログラミング知識で解決しようとしましたが、どこを変えたら良いのかがさっぱり分かりません。

補足情報(FW/ツールのバージョンなど)

windows10
unity2019.4.11f personal
Oculus Integration Latest version 20.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/10/24 00:09

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
fiveHundred

2020/10/24 02:15

そもそも、これは元のSDKから何か変更したのでしょうか?
yamakomiya

2020/10/24 07:30

なにも編集しておりません。
guest

回答2

0

ベストアンサー

プロジェクト内の自作スクリプトにButtonクラスがありませんか?あるならそちらが優先されてしまうのでクラス名とファイル名を一緒に変えるかnamespaceをつけてください。

自作のButtonクラスがないなら同じバージョンのUnityとOculus Integrationで空プロジェクトにインポートしても同じエラーは出ますか?これならエラーは出ないはずですがもし出てしまうなら環境に問題があるかもしれません。

投稿2020/10/24 04:20

shiena

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamakomiya

2020/10/24 07:48

別のプロジェクトではたくさんの警告は出ましたが、コンパイルエラーは出ませんでした。VRMやUnityちゃんとの相性やマウスを使った視点切り替えのスクリプトとの相性が悪かったのでしょうか。
shiena

2020/10/24 09:01

自作スクリプトにButtonクラスはありませんか?コンパイルエラーが起きたButton.onClickはUnityEngine.UI.Buttonクラスを使うはずですが、自作クラスにnamespaceがないButtonクラスがあるとそちらが優先されてしまいます。 実行エラーならともかくコンパイルエラーなら相性問題はほぼなく、文法間違いや名前被りで違うクラスを参照する事が原因です。
yamakomiya

2020/10/24 09:44

Buttonクラスが存在していました。そのスクリプトを削除したら問題なく出来ました。丁寧なご対応ありがとうございました。無事に解決しましたので、この回答をベストアンサーにさせて頂きます。
guest

0

google翻訳
error CS1061: 'Button'には 'onClick'の定義が含まれておらず、タイプ 'Button'の最初の引数を受け入れるアクセス可能な拡張メソッド 'onClick'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

エラーになってる場所も出してくれてるので、そこらへん見直してみよう

投稿2020/10/24 00:10

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問