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

C# Unity3D在另一个脚本中运行脚本,c#,class,unity3d,unity-components,C#,Class,Unity3d,Unity Components,这已经让我发疯了,我已经好几个小时没有运气了 我只想从另一个脚本运行我的一个脚本 using UnityEngine; using System.Collections; public class RedTeam : MonoBehaviour { public Wander wanderScript; void Awake(){ wanderScript = GetComponent<Wander>(); } void Update(){ wanderSc

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

我只想从另一个脚本运行我的一个脚本

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;

public class RedTeam : MonoBehaviour {

public Wander wanderScript;

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

void Update(){ 
    wanderScript();
} 
}
使用UnityEngine;
使用系统集合;
公共类红队:单行为{
公共漫游脚本;
无效唤醒(){
wanderScript=GetComponent();
}
无效更新(){
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);
}
}
使用UnityEngine;
使用系统集合;
[RequiredComponent(typeof(CharacterController))]
公共阶层游荡:单一行为
{
公共浮动速度=5;
公共浮动更改方向时间=1;
公共浮动maxDegreesToChange=30;
字符控制器;
浮动航向;
矢量3定向;
无效唤醒()
{
控制器=GetComponent();
//设置随机旋转
航向=随机范围(0,360);
transform.eulerAngles=新矢量3(0,标题,0);
start例程(NewHeading());
}
无效更新()
{
transform.eulerAngles=Vector3.Slerp(transform.eulerAngles,targetRotation,Time.deltaTime*changeDirectionTime);
var forward=transform.TransformDirection(Vector3.forward);
控制器。SimpleMove(前进*速度);
}
IEnumerator新标题()
{
while(true){
NewHeadingRoutine();
返回新的WaitForSeconds(changeDirectionTime);
}
}
void NewHeadingRoutine()
{
变量地板=数学夹具(标题-maxDegreesToChange,0,360);
var ceil=数学夹具(航向+最大角度变化,0,360);
标题=随机范围(楼层、天花板);
targetRotation=新矢量3(0,航向,0);
}
}
这就是我得到的错误

错误CS1955:成员“RedTeam.wanderScript”不能用作方法或委托


我的主要目标是能够从我的团队红脚本中启用和禁用漫游脚本。

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

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

wanderScript=GetComponent();
wanderScript.enabled=true;
注意:GetComponent只会工作,因为Wander脚本在同一个游戏对象上。 如果漫游脚本位于另一个游戏对象上,则需要首先获取该游戏对象的引用,并在其上调用GetComponent

申报也更有效

wanderScript = GetComponent<Wander>();
wanderScript=GetComponent();

在Start方法中,因此GetComponent只被调用一次。

类是一个对象,方法是它所做的事情。就像你不会说‘我要去做房子!’,你不能仅仅调用漫游的概念。你可能需要做一些C#教程。你想“把整个事情都说出来”是什么意思?是否要将
漫游
脚本/组件的新实例/副本添加到同一
游戏对象
?编辑:Unity的工作方式是,它将在附加的
漫游
脚本上自动执行
更新
方法;您不应该(也可以说)手动调用它。当Wander被激活(并启用)时,它将完成全部工作。唤醒、更新、启动它们都被称为自动基本上我希望能够从我的RedTeam脚本中启用或禁用漫游脚本。我想我可以使用do wanderScript.enabled哇,我不敢相信它这么简单。我花了很长时间想弄明白,但我已经走远了。