【问题标题】:Change Sprite array to GameObject array in Unity在 Unity 中将 Sprite 数组更改为 GameObject 数组
【发布时间】:2018-06-12 15:38:51
【问题描述】:

[编辑]:current inspector output image

我从统一开始,我想将这个公共的精灵数组转换为一个公共的游戏对象数组。我该怎么做?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Obstacle : MonoBehaviour, IRecyle 
{

    public Sprite[] sprites;

    public void Restart()
    {
        var renderer = GetComponent<SpriteRenderer>();
        renderer.sprite = sprites[Random.Range(0, sprites.Length)];        
    }

    public void Shutdown()
    {

    }
}

【问题讨论】:

  • 在你所说的“将字符串数组更改为游戏对象数组”的问题标题中。这涉及到哪些字符串?
  • 您的问题需要更多背景信息。 GameObject 是一个变换 + 组件。你不能把Sprite 变成GameObject;您可以做的是用SpriteRenderer 组件实例化GameObjects 并将Sprites 应用于它们。单个GameObject 只能有一个SpriteRenderer。那是你想做的吗?
  • 是的,这正是我需要的!
  • 基本上,在检查器中,我需要选择 4 个独立的游戏对象预制件而不是精灵(我附上了一张检查器当前的样子)。
  • 更改公共 Sprite[] 精灵;公开 SpriteRenderer[] sprites;

标签: c# unity3d


【解决方案1】:

如果您有想要使用的精灵的预制件,请尝试更改您的代码:

这个:

    public Sprite[] sprites;

到这里:

    public GameObject[] spriteGameObjects;`

还有这个:

renderer.sprite = sprites[Random.Range(0, sprites.Length)];

到这里:

renderer.sprite = spritesGameObjects[Random.Range(0, spritesGameObjects.Length)]
.GetComponent<SpriteRenderer>().sprite;

我现在无法访问 Unity,所以我没有检查它是否可以正常工作,但我认为应该可以。 请让我知道这是否有帮助。

【讨论】:

  • 我在播放代码错误 CS1061 时收到以下错误:'int' 不包含'GetComponent' 的定义,并且没有扩展方法'GetComponent' 接受'int' 类型的第一个参数可以找到(您是否缺少 using 指令或程序集引用?) (CS1061) (Assembly-CSharp)
  • 啊抱歉,我错过了一个 ']' 字符:更改 renderer.sprite = spritesGameObjects[Random.Range(0, spritesGameObjects.Length) .GetComponent().sprite];到:renderer.sprite = spritesGameObjects[Random.Range(0, spritesGameObjects.Length)] .GetComponent().sprite;我也在我的回答中更正了它。
猜你喜欢
  • 2014-10-22
  • 2017-01-19
  • 2019-02-22
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2017-02-19
  • 1970-01-01
相关资源
最近更新 更多