脚本中的方法从未被调用

本文关键字:调用 方法 脚本 | 更新日期: 2023-09-27 18:25:57

我有一个附加到游戏对象的投射脚本。现在我想从附加到游戏对象A的脚本A访问Projectile Script中的LinearProjectile()方法。在这里,我在脚本A中创建了一个类型为Projectile的公共字段,并传入了一个附加了Projectile Script的游戏对象。

为了访问LinearProjectile()方法,我刚刚做了。

projectile.LinearProjectile(transform.position, transform.rotation, this.direction, this.shotPower);
//Here is my method defination..
public void LinearProjectile(Vector3 position, Quaternion rotation, Vector2 direction, float force)
{
    Debug.Log("called");
    this.direction = direction;
    this.force = force;
    this.projectileType = ProjectileType.Linear;
}

此方法中分配的所有字段值都处于默认状态,因为从未调用此方法。如何从其他GameObject脚本访问此方法。我尝试了GetComponent().method(),但即使我无法访问,这里的错误是什么?我花了很多时间去寻找,但没有成功。。帮助我完成

脚本中的方法从未被调用

提供了这样的场景:

  • 场景中有一个GameObject,我们称之为Item
  • 我们已将ProjectileScript附加到Item
  • 我们有一个A脚本附加到Item

我们所需要做的就是调用A内部脚本:

gameObject.GetComponent<ProjectileScript>().LinearProjectile();

如果它在另一个GameObject上,我会亲自在脚本A中创建字段,用于Inspector,例如:public GameObject ProjectileScriptHolder,然后将GameObject从包含ProjectileScript的场景拖动到Inspector中的那个变量中,并以这种方式访问它:

ProjectileScriptHolder.GetComponent<ProjectileScript>().LinearProjectile();

在调用方法之前,我还会检查每个GetComponent<T>,因为它可能返回null,即:

ProjectileScript script = ProjectileScriptHolder.GetComponent<ProjectileScript>();
if (script != null)
    script.LinearProjectile();

如果不能通过Inspector附加项目,则可以使用FindWithTag()并在场景中找到GameObject,前提是它附加了正确的TagFindWithTag()string为参数,在场景中查找带有该标签的GameObject

我知道您想从另一个游戏对象上的另一个脚本访问脚本!

方式1

有一种简单的方法可以做到这一点,即缓存脚本。(假设脚本名称为:"ProjectleScript")

在ScriptA上创建

public ProjectileScript pS;

并且您需要对其进行初始化,有两种方法:1-在GameObjectA的检查器上,用projectileScript拖动GameObject。

2.1-如果脚本在同一个游戏对象中:

pS = GetComponent<ProjectileScript> ();

2.2-如果它在另一个游戏对象上,你可能需要以某种方式找到这个对象。考虑使用标签

 pS = GameObject.FindGameObjectWithTag("projectile").GetComponent<"ProjectileScript">(); 

并将其放入脚本A:中

pS.LinearProjectile();

方式2

或者你可以用ProjectileScript在GameObject上制作一个通用标签,然后找到它:

GameObject.FindGameObjectWithTag("projectile").GetComponent<"ProjectileScript">.LinearProjectile();

这对你来说有意义吗?对不起我的英语。