Unity3D在另一个脚本中运行脚本

时间:2014-04-01 20:55:02

标签: c# class unity3d unity-components

这让我很疯狂,而且我几个小时都没有运气。

我想要做的就是从另一个脚本运行我的一个脚本。

两个脚本都附加到同一个游戏对象。 这是我想用来运行其他脚本的脚本。

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&#39;不能用作方法或委托

我的主要目标是能够从我的TeamRed脚本启用和禁用漫游脚本。

1 个答案:

答案 0 :(得分:2)

如果要从RedTeamScript启用/禁用漫游脚本,请在RedTeamScript中执行以下操作...

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

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

注意:GetComponent仅起作用,因为Wander脚本位于同一个gameObject上。 如果漫游脚本在另一个gameObject上,则需要先获取对该gameObject的引用,然后在其上调用GetComponent。

声明

也更有效
wanderScript = GetComponent<Wander>();

在你的Start方法中,只有一次调用GetComponent。