質問編集履歴

1 質問について追記しました

Aya_program

Aya_program score 26

2016/07/12 16:46  投稿

Unityでほかのスクリプト参照
Plefab PA と PB が存在し
Script SA と SB があります
PAにSAとPBをアタッチします
PBにSBをアタッチします
SAのスクリプトよりPAの子オブジェクトにPBが生成されます
このPBからSAのスクリプトを読み込み 変数 を参照したいのですがうまくいかないです
SA のスクリプト
```C#
using UnityEngine;
using System.Collections;
public class AngelScript : MonoBehaviour {
   public bool P1db_attckon = false;
   public bool P2db_attckon = false;
   
   private Transform player1;
   private Transform player2;
   public GameObject AngelSword;
   public bool toplayer;
   // Use this for initialization
   void Start () {
       // 始めにプレイヤーの位置を取得できるようにする
       player1 = GameObject.FindWithTag("Player1").transform;
       player2 = GameObject.FindWithTag("Player2").transform;
   }
   // Update is called once per frame
   void Update()
   {
       if (P1db_attckon)
       {
           toplayer = true;
           P1_AttackAngel();
           P1db_attckon = false;
       }
       if (P2db_attckon)
       {
           toplayer = false;
           P2_AttackAngel();
           P2db_attckon = false;
       }
   }
   private void P1_AttackAngel()
   {
       GameObject obj = Instantiate(AngelSword, player1.transform.position + new Vector3(0,8f,3f), player1.transform.rotation) as GameObject;
       obj.transform.parent = this.transform;
   }
   private void P2_AttackAngel()
   {
       GameObject obj = Instantiate(AngelSword, player2.transform.position + new Vector3(0, 8f, 3f), player2.transform.rotation) as GameObject;
       obj.transform.parent = this.transform;
   }
}
```
SBのスクリプト
```C#
using UnityEngine;
using System.Collections;
public class AngelSword : MonoBehaviour {
   //使いたいメソッドや変数のあるスクリプト名
   AngelScript angelscript;
   //そのスクリプトが使われているGameObjを入れるための物
   public GameObject angel;
   private Transform player;
   private Transform player1;
   private Transform player2;
   private const float waitTime1 = 3;
   private const float waitTime2 = 5;
   private const float waitTime3 = 8;
   private const float waitTime4 = 8.15f;
   private float rotationSmooth = 10.0f;   // 回転速度
   private float countTime = 0;
   bool flag = true;
   public bool debug = false;
   // Use this for initialization
   void Start () {
       angelscript = angel.GetComponent<AngelScript>();
       // 始めにプレイヤーの位置を取得できるようにする
       //player = GameObject.FindWithTag("Player").transform;
       player1 = GameObject.FindWithTag("Player1").transform;
       player2 = GameObject.FindWithTag("Player2").transform;
   }
   // Update is called once per frame
   void Update () {
       if (angelscript.toplayer) debug = true;
       else debug = false;
       //毎フレームカウント
       countTime += Time.deltaTime;
       if (countTime < waitTime1)
       {
       }
       else if((countTime >= waitTime1) && (countTime < waitTime2))
       {
           //angle変数(x,y,z)の数値にTime.deltaTimeを掛けて毎フレームごとに移動するようにする
           Vector3 angle = new Vector3(0, 50f, 0);
           transform.Rotate(angle);
         
       }
       else if((countTime >= waitTime2) && (countTime < waitTime3))
       {
           if (angelscript.toplayer)
           {
               // プレイヤーの方向を向く
               Quaternion targetRotation = Quaternion.LookRotation(player1.position - transform.position);
               transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotationSmooth);
           }
           else
           {
               // プレイヤーの方向を向く
               Quaternion targetRotation = Quaternion.LookRotation(player2.position - transform.position);
               transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotationSmooth);
           }
           // プレイヤーの方向を向く
           //Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);
           //transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotationSmooth);
       }
       else if((countTime >= waitTime3) && (countTime < waitTime4))
       {
           if (flag)
           {
               flag = false;
               if (angelscript.toplayer)
               {
                   // プレイヤーの方向を向く
                   Quaternion targetRotation = Quaternion.LookRotation(player1.position - transform.position);
                   transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotationSmooth);
                   transform.Rotate(new Vector3(1, 0, 0), 90);
               }
               else{
                   // プレイヤーの方向を向く
                   Quaternion targetRotation = Quaternion.LookRotation(player2.position - transform.position);
                   transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotationSmooth);
                   transform.Rotate(new Vector3(1, 0, 0), 90);
               }
               // プレイヤーの方向を向く
              // Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);
              // transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * rotationSmooth);
               //transform.Rotate(new Vector3(1, 0, 0), 90);
           }
       }
       else
       {
           if (angelscript.toplayer)
           {
               Vector3 direction = (player1.transform.position - transform.position).normalized;
               this.gameObject.GetComponent<Rigidbody>().AddForce(transform.up * 20, ForceMode.Impulse);
               Destroy(this.gameObject.transform.root.gameObject, 1f);
           }
           else
           {
               Vector3 direction = (player2.transform.position - transform.position).normalized;
               this.gameObject.GetComponent<Rigidbody>().AddForce(transform.up * 20, ForceMode.Impulse);
               Destroy(this.gameObject.transform.parent.gameObject, 1f);
           }
           //Vector3 direction = (player.transform.position - transform.position).normalized;
           //this.gameObject.GetComponent<Rigidbody>().AddForce(transform.up * 20, ForceMode.Impulse);
           //Destroy(this.gameObject.transform.root.gameObject,1f);
       }
   }
}
```
読み込みたい変数はangelscript.toplayerです
デバックで確認したところ
SAの P1db_attckon を TRUE に変更しても
SBの debug は FALSE のままでした
何か根本的なことで間違っているのでしょうか?
何か根本的なことで間違っているのでしょうか?
---
追記
プロジェクトビューには Prefab PA PB SA SB
ヒエラルキービューには PA
PA にスクリプトSAをアタッチ
プロジェクトビューのPBのAngelには プロジェクトビューの PA を入れています
  • Unity

    6754 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る