【问题标题】:Unity3D Running A Script Inside Another ScriptUnity3D 在另一个脚本中运行一个脚本
【发布时间】:2014-04-01 20:55:01
【问题描述】:

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

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

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

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 脚本。

【问题讨论】:

  • 类是一个对象,方法是它所做的事情。就像你不说“我会去做房子!”一样,你不能仅仅引用流浪的概念。您可能需要学习一些 C# 教程。
  • 你想“调用整个事情”是什么意思?是否要将Wander 脚本/组件的新实例/副本添加到同一个GameObject?编辑:Unity 的工作方式,它将在附加的Wander 脚本上执行Update 方法自动;你不(并且可以说)不应该手动调用它。
  • 当 Wander 被激活(并启用)时,它将完成整个事情。 Awake、Update、Start 都是自动调用的
  • 基本上我希望能够从我的 RedTeam 脚本中启用或禁用 Wander 脚本。
  • 我想我可以使用 dowanderScript.enabled 哇,我不敢相信它这么简单。我花了很长时间试图弄清楚,但我离题了。

标签: c# class unity3d unity-components


【解决方案1】:

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

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

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

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

声明的效率也更高

wanderScript = GetComponent<Wander>();

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

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2023-01-13
    • 1970-01-01
    • 2016-09-03
    相关资源
    最近更新 更多