1

这让我发疯了,我已经好几个小时没有运气了。

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

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

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”不能用作方法或委托

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

4

1 回答 1

2

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

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

或者

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

注意:GetComponent 只能工作,因为 Wander 脚本在同一个游戏对象上。如果漫游脚本在另一个游戏对象上,您需要先获取对该游戏对象的引用并在其上调用 GetComponent。

申报也更有效率

wanderScript = GetComponent<Wander>();

在您的 Start 方法中,因此 GetComponent 仅被调用一次。

于 2014-04-01T22:26:57.267 回答