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.

1 ответ

Решение

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

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

или же

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

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

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

wanderScript = GetComponent<Wander>();

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

Другие вопросы по тегам