我有一个附加到GameObject的Projectile脚本。现在我想从附加到GameObject A的脚本A访问Projectile脚本中的LinearProjectile()方法。这里我在脚本A中创建了一个类型为Projectile的公共字段,并传入一个连接了Projectile脚本的GameObject。
要访问我刚刚做过的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()。方法(),但即使我无法访问这里的错误是什么?我花了很多时间找出但没有成功..帮助我
答案 0 :(得分:2)
提供了这样的场景:
GameObject
,我们称之为Item
ProjectileScript
附加到Item
A
Item
脚本
我们需要做的就是调用A
脚本:
gameObject.GetComponent<ProjectileScript>().LinearProjectile();
如果它位于另一个GameObject
,我会亲自在A
脚本中创建要在Inspector
中使用的字段,例如:public GameObject ProjectileScriptHolder
,然后只需拖动{{1}从包含GameObject
的场景到ProjectileScript
中的变量并以此方式访问:
Inspector
我还会在调用方法之前检查每个ProjectileScriptHolder.GetComponent<ProjectileScript>().LinearProjectile();
因为它可能返回null,即:
GetComponent<T>
如果您无法通过ProjectileScript script = ProjectileScriptHolder.GetComponent<ProjectileScript>();
if (script != null)
script.LinearProjectile();
附加项目,则可以使用Inspector
并在场景中找到FindWithTag()
,只要其附加了GameObject
。 Tag
将FindWithTag()
作为参数,并在场景中查找带有此类标记的string
。
答案 1 :(得分:0)
我知道你想从另一个游戏对象上的另一个脚本访问脚本!
方式1
有一种简单的方法可以缓存脚本。 (假设脚本的名称是:“ProjectileScript”)
在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();
这对你有意义吗?对不起我的英文。