【问题标题】:Unity3D optimize codeUnity3D优化代码
【发布时间】:2016-07-06 21:48:58
【问题描述】:

我有 2 个对象在行为方面做同样的事情,但唯一不同的是造成的伤害。现在我有 2 个脚本,它们是相互复制粘贴的。相同的功能相同的一切。我怎样才能制作 1 个脚本来优化我的工作而不是重复我的东西?谢谢。

using UnityEngine;
using System.Collections;


 public class Script1 : MonoBehaviour {

private float attackDamage = 5;

void OnCollisionEnter(碰撞项) { item.gameObject.GetComponent().Damage(attackDamage); 禁用Obs(); }

public void disableObs()
{
    gameObject.SetActive(false);
}

}

脚本 2 也是一样。我只是改变了伤害变量

【问题讨论】:

    标签: c# unity3d unityscript


    【解决方案1】:

    用以下方式装饰你的变量:

     [SerializeField] private int damage;
    

    现在这是一个在 Inspector 中公开的私有变量。

    关于工作流程,您可以将尽可能多的 Script1 拖到许多对象上,它们将有自己的 Script1 操作集。但目的是让步兵的伤害值为 1,坦克的伤害值为 100。您需要做的就是设置预制件的值。一个地方设置它们。然后您可以实例化预制件,它们将使用给定的值。

    【讨论】:

      【解决方案2】:

      您可以将损坏变量更改为公共,并在将脚本添加到不同对象时通过检查器设置该变量。或者,如果您通过实例化代码进行更改,只需调用特定对象的 setDamage(damage) 函数:

      gameobject.GetComponent<Script1>().setDamage(damage1);
      gameobject2.GetComponent<Script1>().setDamage(damage2);
      

      【讨论】:

      • 我的效果怎么样?粒子系统也一样?
      • 是的,您可以在具有不同配置的不同对象中拥有相同的脚本和粒子系统。如果对您有帮助,请点赞作为答案。
      • 是的。但我有 1 个小问题不在我的问题中。在销毁我禁用我的对象,我的粒子系统是对象的孩子。所以效果不会播放,因为它被禁用了。反正有没有延迟效果被禁用?我希望它产生效果然后被禁用。
      • 您可以禁用网格渲染器、脚本并将其保留为空,而不是销毁它。变换将保持不变,但不会发生任何变化,粒子效果仍将处于活动状态。如果你希望粒子系统被延迟破坏,你需要为此编写一个脚本。
      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 2011-12-21
      • 2011-12-09
      • 2012-11-13
      相关资源
      最近更新 更多