脚本中的方法从未被调用
本文关键字:调用 方法 脚本 | 更新日期: 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
,前提是它附加了正确的Tag
。FindWithTag()
以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();
这对你来说有意义吗?对不起我的英语。