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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

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

Q&A

2回答

2073閲覧

他のgameobjectのスクリプトの使い方

RyotaOkamoto

総合スコア6

C#

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

Unity

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

0グッド

1クリップ

投稿2016/12/31 13:10

###前提・実現したいこと
unity c#で各チームのオブジェクト同士が戦うゲームを作っています。

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

以下のコードにあるtargetのスクリプトにある変数を使いたいのですが、どうすればいいのでしょうか。

###該当のソースコード

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class blackAttack : MonoBehaviour { 6 public GameObject target; 7 public string enemy1; 8 public string enemy2; 9 public float timeBetweenAttacks = 0.5f; 10 public int attackDamage = 10; 11 12 UnityEngine.AI.NavMeshAgent nav; 13 Vector3 destination; 14 GameObject[] a; 15 GameObject[] b; 16 bool targetInRange; 17 float timer; 18 float eD; 19 20 void FixedUpdate(){ 21 target = null; 22 float minDis = 9999f; 23 a = GameObject.FindGameObjectsWithTag (enemy1); 24 b = GameObject.FindGameObjectsWithTag (enemy2); 25 26 foreach(GameObject go in a){ 27 if(go == null){ 28 continue; 29 } 30 eD = Vector3.Distance (transform.position, go.transform.position); 31 if(eD < minDis){ 32 minDis = eD; 33 destination = go.transform.position; 34 target = go; 35 } 36 } 37 38 foreach(GameObject go in b){ 39 if(go == null){ 40 continue; 41 } 42 eD = Vector3.Distance (transform.position, go.transform.position); 43 if(eD < minDis){ 44 minDis = eD; 45 destination = go.transform.position; 46 target = go; 47 } 48 } 49 50 51 } 52 53 54} 55

###試したこと

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

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

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

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

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

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

guest

回答2

0

①変数を使いたいクラスのクラスブロック内で、同じクラスの型の変数を宣言します。

C#

1 2public class ObjectA : MonoBehaviour{ 3 blackAttack bAttack; 4}

②次にStart()やAwake()で、その変数に、オブジェクトのスクリプトの実体をつくって代入します。

C#

1public class ObjectA : MonoBehaviour{ 2 3 blackAttack bAttack; 4 5 void Start(){ 6 bAttack = GameObject.Find("blackAtackがついているオブジェクトの名前").GetComponent<blackAttack>(); 7 } 8}

・GameObject.Find()で、オブジェクトを区別します。
・GetComponent()で、スクリプトの実体を生成したり、いろいろやります。

③これで、以降、Update()などで、

bAttack.target という要領で変数を呼び出せます。

「public」と宣言されている変数以外は、他のオブジェクトやそれについているスクリプトなど、とにかく外部からは呼び出せません。

まとめて書くとこうです。

C#

1 2using UnityEngine; 3using System.Collections; 4 5public class ObjectA : MonoBehaviour { 6 7 blackAttack bAttack; 8 9 void Start(){ 10 bAttack = GameObject.Find("ObjectB").GetComponent<blackAtttack>(); 11 } 12 13 void Update(){ 14 Debug.Log(bAttack.target); 15 } 16 17}

投稿2017/01/06 02:36

編集2017/01/06 04:33
camblian

総合スコア50

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

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

0

以下の方法で使用出来ます。
unity学習帳 - 他のスクリプトオブジェクトの変数の参照や関数の実行
(質問する前にまずは一度ご自分で検索することをオススメします)

投稿2017/01/04 11:04

sakura_hana

総合スコア11427

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問