Unity3D запускает скрипт внутри другого скрипта

Это сводило меня с ума, и я безуспешно занимался этим часами.

Все, что я хочу сделать, это запустить один из моих сценариев из другого сценария.

Оба скрипта привязаны к одному и тому же игровому объекту. Вот сценарий, который я хочу использовать для запуска другого сценария.

using UnityEngine;
using System.Collections;

public class RedTeam : MonoBehaviour {

public Wander wanderScript;

void Awake(){
    wanderScript = GetComponent<Wander>();
}

void Update(){ 
    wanderScript();
} 
}

Вот мой скрипт блуждания...

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]

public class Wander : MonoBehaviour
{
public float speed = 5;
public float changeDirectionTime = 1;
public float maxDegreesToChange = 30;

CharacterController controller;
float heading;
Vector3 targetRotation;

void Awake ()
{
    controller = GetComponent<CharacterController>();

    // Set random rotation
    heading = Random.Range(0, 360);
    transform.eulerAngles = new Vector3(0, heading, 0);

    StartCoroutine(NewHeading());
}

void Update ()
{
    transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, targetRotation, Time.deltaTime * changeDirectionTime);
    var forward = transform.TransformDirection(Vector3.forward);
    controller.SimpleMove(forward * speed);
}

IEnumerator NewHeading ()
{
    while (true) {
        NewHeadingRoutine();
        yield return new WaitForSeconds(changeDirectionTime);
    }
}

void NewHeadingRoutine ()
{
    var floor = Mathf.Clamp(heading - maxDegreesToChange, 0, 360);
    var ceil  = Mathf.Clamp(heading + maxDegreesToChange, 0, 360);
    heading = Random.Range(floor, ceil);
    targetRotation = new Vector3(0, heading, 0);
}
}

Это ошибка, которую я получаю.

ошибка CS1955: член RedTeam.wanderScript не может использоваться как метод или делегат

Моя главная цель — иметь возможность включать и отключать скрипт Wander из моего скрипта TeamRed.


person iEpic    schedule 01.04.2014    source источник
comment
Класс — это объект, а методы — то, что он делает. Точно так же, как вы не говорите: «Я пойду заниматься домом!», вы не можете просто использовать концепцию блуждания. Возможно, вам придется пройти несколько руководств по C#.   -  person Magus    schedule 02.04.2014
comment
Что вы имеете в виду, что хотите назвать все это? Вы хотите добавить новый экземпляр/копию Wander скрипта/компонента в тот же GameObject? РЕДАКТИРОВАТЬ: как работает Unity, он будет выполнять метод Update в прикрепленном скрипте Wander автоматически; вы не (и, возможно) не должны вызывать его вручную.   -  person Chris Sinclair    schedule 02.04.2014
comment
Когда блуждание активировано (и включено), оно сделает все это. Awake, Update, Start — все они вызываются автоматически.   -  person Kay    schedule 02.04.2014
comment
По сути, я хочу иметь возможность включать или отключать скрипт Wander из моего скрипта RedTeam.   -  person iEpic    schedule 02.04.2014
comment
Думаю, я мог бы просто использовать do wakeScript.enabled Ничего себе, я не могу поверить, что это было так просто. Я так долго пытался понять это, и я был далеко.   -  person iEpic    schedule 02.04.2014
comment
вам на самом деле следует пройти несколько руководств по ООП/C#, прежде чем пытаться сделать игру.   -  person Roberto    schedule 02.04.2014


Ответы (1)


Если вы хотите включить/отключить скрипт Wander из вашего RedTeamScript, сделайте следующее в своем RedTeamScript...

wanderScript = GetComponent<Wander>();
wanderScript.enabled = false;

or

wanderScript = GetComponent<Wander>();
wanderScript.enabled = true;

Примечание: GetComponent будет работать только потому, что скрипт Wander находится на том же игровом объекте. Если бы скрипт блуждания находился в другом игровом объекте, вам нужно было бы сначала получить ссылку на этот игровой объект и вызвать для него GetComponent.

Также более эффективно объявить

wanderScript = GetComponent<Wander>();

В вашем методе Start GetComponent вызывается только один раз.

person Greg Quinn    schedule 01.04.2014