我怎样才能改变每个游戏对象的移动速度?

2024-02-06

在层次结构中我有 2 ThirdPersonController。 在“窗口”>“动画器”中,我创建了新的空状态,将其称为“步行”并将其设置为“HumanoidWalk”,以便在运行游戏时两个玩家都在步行。

在其中一个上,我添加了脚本并将第二个 ThirdPersonController(1) 作为预制件。

然后,当运行游戏时,它会克隆 ThirdPersonController(1)。 所以我在层次结构中看到更多 N ThirdPersoncontrollers。

今天,为了更改每个 ThirdPersonController 的行走速度,我在检查器中更改了移动速度倍增器。 但是,如果我想在创建克隆时在脚本中设置彼此的速度,我该怎么办?

using UnityEngine;
using System.Collections;

public class Multiple_objects : MonoBehaviour {

    public GameObject prefab;
    public GameObject[] gos;
    public int NumberOfObjects;

    void Awake()
    {
            gos = new GameObject[NumberOfObjects];
        for(int i = 0; i < gos.Length; i++)
        {
            GameObject clone = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity);
            gos [i] = clone;

        }
    }

    // Use this for initialization
    void Start () {


    }

    // Update is called once per frame
    void Update () {

    }
}

我现在尝试的是获取预制件的 Animator 组件并设置所有克隆的速度:

using UnityEngine;
using System.Collections;

public class Multiple_objects : MonoBehaviour {

    public GameObject prefab;
    public GameObject[] gos;
    public int NumberOfObjects;
    private Animator _animaotr;

    void Awake()
    {
            gos = new GameObject[NumberOfObjects];
        for(int i = 0; i < gos.Length; i++)
        {
            GameObject clone = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity);
            gos [i] = clone;
            _animaotr.speed = 10;
        }
    }

    // Use this for initialization
    void Start () {

        _animaotr = prefab.GetComponent<Animator> ();

    }

    // Update is called once per frame
    void Update () {

    }
}

但主要问题是,在层次结构中的第一个 ThirdPersonController 上,我在“窗口”>“动画器”空状态中创建的原始控制器将其称为“Walk”并设置“HumandoidWalk”。

现在,由于某种原因设置速度,改变动画器速度不会产生任何影响,例如:

_animaotr.speed = 10;

仅当在 ThirdPersonController > Inspector > Third Person Character (Script) > Move Speed Multiplier 中更改速度时。它正在将相同的速度更改为层次结构中的所有 ThirdPerson 控制器,包括此 i 克隆。

但是我如何将每个克隆速度更改为另一个速度值?为什么 _ animator.speed 没有改变任何东西而我需要使用这个移动速度倍增器?


The 移动速度倍增器编辑器中显示的属性声明为m_MoveSpeedMultiplier in the ThirdPersonCharacter脚本。它是德拉克作为float m_MoveSpeedMultiplier = 1f;这意味着它是一个private变量和cannot可以从另一个脚本访问。它出现在编辑器中的原因是因为它有[SerializeField]在它上面,这意味着它是一个序列化的private多变的。

要在运行时访问它,您必须从float m_MoveSpeedMultiplier = 1f; to public float m_MoveSpeedMultiplier = 1f; in the ThirdPersonCharacter script.

Use GetComponent获取实例ThirdPersonCharacter来自 gos GameObject 然后将其保存在某处以供重新使用。既然你有 2ThirdPersonCharacter,您可以创建两个ThirdPersonCharacter保存这些实例的数组。它应该类似于下面的代码:

using UnityEngine;
using System.Collections;
using UnityStandardAssets.Characters.ThirdPerson;

public class Multiple_objects : MonoBehaviour
{
    public GameObject prefab;
    public GameObject[] gos;
    public int NumberOfObjects;

    private ThirdPersonCharacter[] thirdPersonCharacter;

    void Awake()
    {
        thirdPersonCharacter = new ThirdPersonCharacter[2];

        gos = new GameObject[NumberOfObjects];
        for (int i = 0; i < gos.Length; i++)
        {
            GameObject clone = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity);
            gos[i] = clone;
            thirdPersonCharacter[i] = clone.GetComponent<ThirdPersonCharacter>();
        }
    }

    // Use this for initialization
    void Start()
    {

        thirdPersonCharacter[0].m_MoveSpeedMultiplier = 5f;
        thirdPersonCharacter[1].m_MoveSpeedMultiplier = 5f;
    }

    // Update is called once per frame
    void Update()
    {

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我怎样才能改变每个游戏对象的移动速度? 的相关文章

  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 构建 C# MVC 5 站点时项目之间的处理器架构不匹配

    我收到的错误如下 2017 年 4 月 20 日构建 13 23 38 C Windows Microsoft NET Framework v4 0 30319 Microsoft Common targets 1605 5 警告 MSB3
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐