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

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

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

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

Unity

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

Q&A

解決済

1回答

27331閲覧

別オブジェクトからメソッドを実行しエフェクトが呼びたいです。

7939p

総合スコア11

C#

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

Unity

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

0グッド

1クリップ

投稿2016/07/23 07:07

はじめて質問します。よろしくお願いします。

unityで別オブジェクトからメソッドを実行し、エフェクトを呼びたいです。

流れとしてはメソッドを呼ぼうとしたら、
An object reference is required to access non-static memberのエラーが
でたため、staticをつけました。
そしたら、メソッド内のInstantiateにエラーがでて解決できずにいます。。

呼び出し先

using UnityEngine; using System.Collections; public class Chara : MonoBehaviour { public GameObject effectObj; public static void AttachEffect() { Instantiate (effectObj, transform.position, transform.rotation); } }

Assets/Scripts/Chara.cs(10,30):error CS0120:
An object reference is required to access non-static member Chara.effectObj' Assets/Scripts/Chara.cs(10,41): error CS0120: An object reference is required to access non-static member UnityEngine.Component.transform'
Assets/Scripts/Chara.cs(10,61):
error CS0120: An object reference is required to access non-static member UnityEngine.Component.transform' Assets/Scripts/Chara.cs(10,17): error CS1502: The best overloaded method match for UnityEngine.Object.Instantiate(UnityEngine.Object, UnityEngine.Vector3, UnityEngine.Quaternion)' has some invalid arguments
Assets/Scripts/Chara.cs(10,17):
error CS1503: Argument #1' cannot convert object' expression to type `UnityEngine.Object'

呼び出し元

GameObject refObj; void Start() { refObj = GameObject.Find( "Chara" ); } void ShowEffects() { Chara AttachEffect = refObj.GetComponent<Chara>(); if(AttachEffect!=null){ Chara.AttachEffect(); } else { Debug.LogWarning("Charaオブジェクトありません!"); } }

他のオブジェクトからスクリプトを呼び出さず、そのスクリプト単体であれば普通にエフェクトを表示することはできます。その他いろいろとやりましたがうまくいかずstaticをつけたとき、他の場所で発生するエラーの取り方がよくわからんということだという気がしています。
お手数おかけしますが、どうぞよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

AttachEffect()static関数にした場合のエラーの原因として、AttachEffect()内で使用しているeffectObj及びtransformstaticのメンバ変数でないためエラーが発生しています。

ただ、呼び出し元のスクリプトを見る限りrefObjからGetComponent()で特定のコンポーネントを見つけ出しているのでAttachEffect()static関数にする必要はないと思われます。
以下のように修正していただければ、動くと思います。

csharp

1void ShowEffects() 2{ 3 // 変数名が関数名と被っておりわかりにくかったため、AttachEffect -> attachEffectに変更しています。 4 Chara attachEffect = refObj.GetComponent<Chara>(); 5 if(attachEffect!=null){ 6 attachEffect.AttachEffect(); 7 } else { 8 Debug.LogWarning("Charaオブジェクトありません!"); 9 } 10}

csharp

1using UnityEngine; 2using System.Collections; 3 4public class Chara : MonoBehaviour { 5 6 public GameObject effectObj; 7 8 public void AttachEffect() { 9 10 Instantiate (effectObj, transform.position, transform.rotation); 11 12 } 13}

投稿2016/07/23 07:25

urahimono

総合スコア714

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

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

7939p

2016/07/23 08:31

わかりやすい説明ありがとうございます。 自分のちょっとした勘違いにも気付き、 しっかりと動作確認が取れました。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問