Unity/C# - gameObject.name 返回不一致的名称
Unity / C# - gameObject.name returning inconsistent names
大家好,我正在学习 C#/Unity 并正在制作 space 入侵者类型的游戏,遇到了一个我不理解的问题。
我有一个 class 正在生成我的敌人(基于此 "Enemy Spawner" 中有多少位置游戏对象子项)。我不喜欢每一个旁边的名称(克隆),并希望在我开始构建 weapons/projectiles/collisions 等
时在我的日志中获得更多反馈
问题:打印 gameObject.name 时得到不一致的结果 -- 初始加载按预期打印(敌人 1、敌人 2、敌人 3 等)。我有一个射弹碰撞,将命中 dmg 发送给敌人,但这是出现不一致名称的地方——它显示那里的所有敌人都只是 "Enemy"。
tl;dr
印刷品有预期的 gameObject.name 在敌人生成器和激光中返回,但在我们收到 dmg 后不会在敌人控制器中返回。
敌方生成器:
public class EnemySpawner : MonoBehaviour {
public GameObject enemyPrefab;
// Use this for initialization
void Start() {
var i = 1;
//spawn enemy prefab for each position inside Enemy Spawner
foreach (Transform child in transform)
{
GameObject enemy = Instantiate(enemyPrefab, child.transform.position, Quaternion.identity) as GameObject;
enemy.transform.parent = child;
enemy.name = ("Enemy " + i);
print (enemy.name);
i++;
}
}
}
激光:
public class Laser : MonoBehaviour {
public float laserDmg = 5f;
public EnemyController enemyController;
public void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.name.StartsWith("Enemy"))
{
enemyController.ReceiveDmg(laserDmg);
Destroy(gameObject);
}
else
{
print("laser touched a " + collision.gameObject.name);
}
}
}
敌方控制者:
public class EnemyController : MonoBehaviour {
public float enemyHP = 40f;
public string myName;
// Use this for initialization
void Start () {
myName = gameObject.name;
print(myName);
gameObject.name = myName;
}
public void ReceiveDmg (float amount)
{
print(gameObject.name + " Took " + amount + " DMG || Now has " + this.enemyHP + " Remaining" );
}
}
编辑* 敌人控制器中的启动变量是我试图让 receiveDmg 函数使用这些变量打印正确的名称(在启动时正确打印)——我也尝试了很多其他的东西,我想我会问因为我可能只是在一些微不足道的事情上弄错了。
这很可能是因为激光中的 EnemyController 引用设置不正确。
它不能保证与 OnTriggerEnter2D 中的 collision.gameObject 相同的游戏对象,并可能指向预制件。
你得到同一个名字是正常的,你总是在这里调用附加在同一个对象上的同一个脚本
enemyController.ReceiveDmg(laserDmg);
你应该调用附加在它刚击中的游戏对象上的脚本
collision.gameObject.GetComponent<EnemyController>().ReceiveDmg(laserDmg);
大家好,我正在学习 C#/Unity 并正在制作 space 入侵者类型的游戏,遇到了一个我不理解的问题。
我有一个 class 正在生成我的敌人(基于此 "Enemy Spawner" 中有多少位置游戏对象子项)。我不喜欢每一个旁边的名称(克隆),并希望在我开始构建 weapons/projectiles/collisions 等
时在我的日志中获得更多反馈问题:打印 gameObject.name 时得到不一致的结果 -- 初始加载按预期打印(敌人 1、敌人 2、敌人 3 等)。我有一个射弹碰撞,将命中 dmg 发送给敌人,但这是出现不一致名称的地方——它显示那里的所有敌人都只是 "Enemy"。
tl;dr
印刷品有预期的 gameObject.name 在敌人生成器和激光中返回,但在我们收到 dmg 后不会在敌人控制器中返回。
敌方生成器:
public class EnemySpawner : MonoBehaviour {
public GameObject enemyPrefab;
// Use this for initialization
void Start() {
var i = 1;
//spawn enemy prefab for each position inside Enemy Spawner
foreach (Transform child in transform)
{
GameObject enemy = Instantiate(enemyPrefab, child.transform.position, Quaternion.identity) as GameObject;
enemy.transform.parent = child;
enemy.name = ("Enemy " + i);
print (enemy.name);
i++;
}
}
}
激光:
public class Laser : MonoBehaviour {
public float laserDmg = 5f;
public EnemyController enemyController;
public void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.name.StartsWith("Enemy"))
{
enemyController.ReceiveDmg(laserDmg);
Destroy(gameObject);
}
else
{
print("laser touched a " + collision.gameObject.name);
}
}
}
敌方控制者:
public class EnemyController : MonoBehaviour {
public float enemyHP = 40f;
public string myName;
// Use this for initialization
void Start () {
myName = gameObject.name;
print(myName);
gameObject.name = myName;
}
public void ReceiveDmg (float amount)
{
print(gameObject.name + " Took " + amount + " DMG || Now has " + this.enemyHP + " Remaining" );
}
}
编辑* 敌人控制器中的启动变量是我试图让 receiveDmg 函数使用这些变量打印正确的名称(在启动时正确打印)——我也尝试了很多其他的东西,我想我会问因为我可能只是在一些微不足道的事情上弄错了。
这很可能是因为激光中的 EnemyController 引用设置不正确。
它不能保证与 OnTriggerEnter2D 中的 collision.gameObject 相同的游戏对象,并可能指向预制件。
你得到同一个名字是正常的,你总是在这里调用附加在同一个对象上的同一个脚本
enemyController.ReceiveDmg(laserDmg);
你应该调用附加在它刚击中的游戏对象上的脚本
collision.gameObject.GetComponent<EnemyController>().ReceiveDmg(laserDmg);