アクセスするスクリプトが同じゲームオブジェクトにアタッチされていない場合、別のスクリプト関数にアクセスするにはどうすればよいですか?

ダニエル・ハルフォニ
using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;

 public class Teleport : MonoBehaviour {

     public GameObject player;
     public Camera mainCamera;
     public Camera firstCam;
     public Camera camera;
     private List<GameObject> TeleportBooths;

     private TeleportationsCore tc;

     private void Start()
     {
         InstantiateObjects gos = GetComponent<InstantiateObjects>();

         TeleportBooths = new List<GameObject>();
         TeleportBooths = gos.PrefabsList();
         firstCam.enabled = false;
         mainCamera.enabled = false;
         camera.enabled = true;

         for (int i = 0; i < TeleportBooths.Count; i++)
         {
             TeleportBooths[i].AddComponent<TeleportationsCore>();
         }
         tc = GetComponent<TeleportationsCore>();
         WorkingBooth();
     }

     private void WorkingBooth()
     {
         player.transform.position = TeleportBooths[tc.WorkingBooth()].transform.position;
         camera.transform.position = new Vector3(TeleportBooths[tc.WorkingBooth()].transform.position.x - 10, TeleportBooths[tc.WorkingBooth()].transform.position.y + 10, TeleportBooths[tc.WorkingBooth()].transform.position.z);
         camera.transform.LookAt(TeleportBooths[tc.WorkingBooth()].transform);
     }

     private void Update()
     {
         WorkingBooth();
     }
 }

私がやっている:

tc = GetComponent<TeleportationsCore>();

しかし、tc は null です。

そして、私がアクセスしたいスクリプト:

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;

 public class TeleportationsCore : MonoBehaviour
 {
     public float spinSpeed = 2.0f;

     private bool rotate = false;
     private bool exited = false;
     private int boothIndex = 0;

     private void Start()
     {
         WorkingBooth();
     }

     void OnTriggerEnter(Collider other)
     {
         if (other.gameObject.tag == "Player")
         {
             Debug.Log("Player entered the hole");
             rotate = true;
         }
     }

     private void OnTriggerExit(Collider other)
     {
         if (other.gameObject.tag == "Player")
         {
             Debug.Log("Player exited the hole");
             rotate = false;
             exited = true;
         }
     }

     void Rotate()
     {
         if (rotate)
         {
             if (spinSpeed == 350)
             {
                 rotate = false;
                 exited = true;
                 boothIndex++;
                 WorkingBooth();
             }
             else
             {
                 transform.Rotate(Vector3.up, spinSpeed * Time.deltaTime);
                 spinSpeed += 1f;
             }

         }
         if (rotate == false && exited == true)
         {
             transform.Rotate(Vector3.up, spinSpeed * Time.deltaTime);
             if (spinSpeed > 0.0f)
                 spinSpeed -= 1f;
         }
     }

     public int WorkingBooth()
     {
         return boothIndex;
     }

     private void Update()
     {
         Rotate();
     }
 }

私が欲しいのは、スクリプトをすべてのゲームオブジェクトにアタッチして、TeleportationsCore の WorkingBooth 関数にアクセスした後です。

そして、TeleportationsCore を、Teleport がアタッチされているゲームオブジェクトにアタッチしたくありません。TeleportationsCore の WorkingBooth にアクセスするには、他にどのような方法が必要ですか? WorkingBooth を public static にしますか?

カロリスJc

これを変える:

 for (int i = 0; i < TeleportBooths.Count; i++) {
     TeleportBooths[i].AddComponent<TeleportationsCore>();
 }

に:

TeleportationsCore[] tCores = TeleportBooths.Select(booth => booth.AddComponent<TeleportationsCore>());

リストから必要なコアを選択するだけです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ