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 вызывается только один раз.