Monobhaviourを非Monobhaviourクラスのインスタンス内でどのように渡すことができますか?私はこれを見つけましたlink TonyLiはクラスのインスタンスの中でコルーチンを開始したり停止したりするためにMonobehaviourを渡すことができると述べていますが、あなたはそれをどうやって行うことができないのかを示しています。彼はこれを行うtheEvent.StartEvent(myMonoBehaviour);彼はどこから彼が私のMonobehaviourを取得するかを示していません。私はインターネット上を見回しましたが、どうやって見つけることができません。ここでMonoBehaviourクラス以外のクラス内のコルーチンを使用
- 編集
は私がしようとしているものです。クラスのインスタンス内でコルーチンを実行したい私はクラスのインスタンスの中でコルーチンを止めることもできるようにしたい。私はこのようにして、大規模な管理者を持つオブジェクトを私のシーンに持たないようにします。そして、私がこのようにピンポンしたいオブジェクトのコードを再利用できるようにします。コードはゲームオブジェクトをある方向に動かし、その後ブレークして別の方向に動かし、ブレークします。しかし、クラス外からコルーチンを開始することはできません。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
[RequireComponent (typeof(Image))]
public class SpecialBar : MonoBehaviour {
public float rangeX;
public float breakTime;
public float step;
float startProgress = 0.5f;
PingPongGameObject pingPonger;
Color[] teamColors = new Color[]{new Color(255,136,0),new Color(0,170,255)};
void Start()
{
for(int i = 0; i < teamColors.Length; ++i)
{
teamColors[i] = StaticFunctions.NormalizeColor (teamColors[i]);
}
pingPonger = new PingPongGameObject (gameObject.transform.position,
new Vector3(rangeX,0.0f,0.0f),
gameObject,
startProgress,
breakTime,
step
);
}
}
私のコルーチンをしているところ第二のクラスがある。
public class PingPongGameObject
{
float step;
Vector3 center;
Vector3 range;
GameObject ball;
float progress;
float breakTime;
Vector3 endPos;
Vector3 oppositePosition;
public PingPongGameObject(Vector3 _center, Vector3 _range, GameObject _ball, float _startProgress, float _breakTime, float _step)
{
center = _center;
range = _range;
ball = _ball;
progress = _startProgress;
breakTime = _breakTime;
step = _step;
endPos = center - range;
oppositePosition = center + range;
// This is where I want to start the coroutine
}
public IEnumerator PingPong()
{
while (progress < 1) {
progress += Time.deltaTime * step;
Vector3 newPos = Vector3.Lerp (oppositePosition, endPos, progress);
ball.transform.position = newPos;
yield return null;
}
Vector3 temp = endPos;
endPos = oppositePosition;
oppositePosition = temp;
progress = 0;
yield return new WaitForSeconds (breakTime);
yield return null;
}
public float Step
{
set{step = value;}
}
public void StopCoroutine()
{
// This is where I want to stop the coroutine
}
}
はい、私はちょうど私の質問にexplenationを入れます。 –
私はその質問を書き直しました。 –
私が残した答えを確認してください。 'this'キーワードを使うことができます。 – Programmer