

具体例としては自動ドアなのですが、オブジェクトA(カードキー）を近づける、もしくは当てるとオブジェクトB(自動ドア）が開く仕組みを作りたいです。

なのでカードキーが遠ざかったらまた自動ドアは閉じてほしいのですが、たどり着いたコードでは動作しませんでした。どこを直せばよいでしょうか？（それとも根本的に何か足りないでしょうか）  
また、C#は初実践なのですがそもそも導入方法が合っているかわかっていません。  
UnityでCreateからC#を作成し、メモパッドへ入力、VRチャットでの運用のためU#に変換して各オブジェクトに割り当てています。お手数おかけしますがご教示いただけますと幸いです。

[code]

    using UnityEngine;
    
    public class Example : MonoBehaviour
    {
        public GameObject targetObject;
        public GameObject objectToRemove;
        public float thresholdDistance = 1.0f;
        private bool isObjectRemoved = false;
    
        void Update()
        {
            float distance = Vector3.Distance(transform.position, targetObject.transform.position);
    
            if (distance < thresholdDistance)
            {
                if (!isObjectRemoved)
                {
                    // Aのオブジェクトが近くにある場合に、オブジェクトBを削除する
                    objectToRemove.SetActive(false);
                    isObjectRemoved = true;
                }
            }
    
            else
            {
                if (isObjectRemoved)
                {
                    // Aのオブジェクトが近くになくなった場合に、オブジェクトBを再度表示する
                    objectToRemove.SetActive(true);
                    isObjectRemoved = false;
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2023-01-22T12:10:40.730
93510
2023-02-05T07:58:01.333
2023-01-22T16:01:36.797
3060
56713
question
c# unity3d
Unityで特定のオブジェクトAを当てたらBが消える仕組みは作れるでしょうか？


「targetObject が何を指しているのか」「このスクリプトが何の GameObject にアタッチされているのか」が不明ですね。  
スクリプトでは「targetObject」と「スクリプトがアタッチされた
GameObject」の距離を測っています。このやり方を残すならば以下のようにすると期待通りに動くでしょう。

[code]

    using UnityEngine;
    
    /// <summary>
    /// カギのオブジェクトにアタッチすると、そのオブジェクトがドアに近づいたらドアが消える機能を提供するコンポーネント
    /// </summary>
    public class Example93510 : MonoBehaviour
    {
        /// <summary>ドアのオブジェクト。インスペクターからオブジェクトをアサインすること。</summary>
        public GameObject _door;
        /// <summary>これ以上近づくとドアが消える距離。インスペクターから適切な値を設定すること。</summary>
        public float _thresholdDistance = 3f;
    
        void Update()
        {
            float distance = Vector3.Distance(transform.position, _door.transform.position);
    
            if (distance < _thresholdDistance)
            {
                _door.SetActive(false);
            }
            else
            {
                _door.SetActive(true);
            }
        }
    }
    
[/code]

**実行すると** このような動きになります。

![](https://i.stack.imgur.com/B2QKd.gif)

上記のシーンを unitypackage
にしたものを[置いておきます](https://www.dropbox.com/s/9mj66qoaemj85e5/93510.unitypackage?dl=1)。

> UnityでCreateからC#を作成し、メモパッドへ入力

VR チャットとか U# のことは知りませんが、Unity で C# を書く時はメモパッド（？）ではなく Visual Studio
を使いますね。自動補完や予測入力をしてくれたり、メソッドやプロパティの意味などを表示してくれますが、初めての人はこれがないととても難しいでしょう。それをするためには
Unity と Visual Studio の連携をすれば簡単にできます。

  * [Unity と Visual Studio の統合（連携）設定のやり方](https://www.youtube.com/watch?v=g25bfk0ltCM)


CC BY-SA 4.0
2023-02-05T07:58:01.333
93713
2023-02-05T07:58:01.333
48297
93510
answer