【问题标题】:Changing prefab instances through script通过脚本更改预制实例
【发布时间】:2016-03-10 09:20:42
【问题描述】:

我制作了一个带有刚体组件的预制游戏对象。 每当我从检查器更改原始预制件的质量时,场景中存在的所有实例都会受到影响(该字段不会被覆盖)。但是当我尝试使用脚本做同样的事情时,实例的质量保持不变(只有主预制件受到影响,每次我进入播放模式时,它都会保留之前的值!)。该脚本附加到另一个游戏对象,如下所示:

using UnityEngine;
using System.Collections;

public class CubeScript : MonoBehaviour {

    public GameObject largeCube; // dragged the original prefab in the inspector
    private Rigidbody rb;
    // Use this for initialization
    void Start () 
    {

        rb = (Rigidbody) largeCube.GetComponent ("Rigidbody");
        rb.mass = 44; // this is not changing the instances, rather only the main prefab. Note that the mass is not overridden

    }

}

作为初学者,我不明白。请给我解释一下。

【问题讨论】:

  • 你可以试试rb = largeCube.GetComponent<RigidBody>()吗?

标签: c# unity3d game-engine unity5


【解决方案1】:

我相信“应用”按钮负责将所有值应用于检查器级别的预制实例。从脚本中,您需要手动执行(您没有任何称为“应用”的按钮或方法)。

最好的(我认为也是最有效的)是为预制件创建标签和使用

GameObject[] myPrefabInstances = GameObject.FindGameObjectsWithTag("yourTagName"). 

然后:

foreach (var go in myPrefabInstances) 
{
        var rb = (Rigidbody) go.GetComponent ("Rigidbody");
        rb.mass = 44;
}

【讨论】:

  • 这非常有效。这个也是:Rigidbody[] rigidbodies = FindObjectsOfType(typeof(Rigidbody)) as Rigidbody[]; foreach(Rigidbody rb in rigidbodies) { rb.mass = 44; } 但是你能再解释一下不同之处吗?
  • 根据统一论坛,FindGameObjectsWithTagFindObjectsOfType 快。
  • 我的意思是-为什么我的第一个代码不起作用,主要问题中描述的那个?教程说,无论您是从检查器中更改某些内容还是使用类似的脚本,都是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
相关资源
最近更新 更多