【问题标题】:How to keep a value same inside of the update method in Unity如何在 Unity 的更新方法中保持相同的值
【发布时间】:2020-09-03 22:43:04
【问题描述】:

我有一个脚本,它从一个脚本中获取一个转换值,该脚本通过使用它的更新方法完成获取操作,并且我在另一个脚本中获取它之后使用这个值,该脚本也在其更新方法中使用这个值。所以,我想做的是,一旦我得到了这个值,我希望这个值是相同的,即使它的起始值发生了变化。我无法在启动函数中分配它们,因为一切都发生在运行时。我试图创建一个方法来分配这个值,即使我使用了一个导致该方法被调用一次的 if 语句,它仍然会改变它的值。

这是我使用的代码行,它们都在 Update 方法中。

void Update()
{
    Debug.Log(i);
    if (DragAndDrop.finding == true)
    {
         B = DragAndDrop.lastposofmodel;

在这里我使用分配的值

if (modelobject.collider.gameObject.GetComponent<MeshRenderer>().enabled == true) 
{
    repmodel = modelobject.collider.gameObject;
    finding = true;
    modelobject.collider.gameObject.transform.position = new Vector3(modelobject.collider.gameObject.transform.position.x, 
                 modelobject.collider.gameObject.transform.position.y, 
                 modelobject.collider.gameObject.transform.position.z - 0.1f);

    lastposofmodel = modelobject.collider.gameObject.transform;

这是赋值的地方。

我该如何解决这个问题?

【问题讨论】:

  • 抱歉,我不明白您的目标/问题到底是什么……您能否为您的代码添加更多上下文?
  • 我想要做的是,在使用您看到的第二个脚本获取值之后,将该值分配给您可以从第一个脚本中看到的另一个值,并保持该值即使在更新方法中也一样。
  • 那么为什么不应该保持不变呢?您的第二个脚本是否同时更改它?也许这样说就足够了,例如if(!B) B = DragAndDrop.lastposofmodel; ?所以B 永远保持不变,除非它被销毁
  • 为什么不一样,我认为是因为它们在更新方法中,但我会尝试你的建议。
  • 好吧,很难说何时以及如何准确地调用底部代码块,以及为什么需要通过多个脚本传递引用

标签: c# unity3d


【解决方案1】:

我认为问题在于,B 是一个静态值,因此是按引用而不是按值调用的。因此,如果您想让每个脚本的值 B 保持唯一,您可能应该为每个脚本的该值的每个表示创建一个实例。

【讨论】:

  • 如果通过引用或按值调用某些内容是字段 type 的问题 ...如果它是类类型,则始终是通过引用。如果它是像int 这样的结构或基本类型,则按值调用...与static 无关
猜你喜欢
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 2021-12-14
  • 2022-10-31
  • 2020-11-19
  • 1970-01-01
  • 2016-12-21
  • 2021-10-30
相关资源
最近更新 更多