将游戏对象移动到通过鼠标单击选择的另一个游戏对象?



我目前正在制作回合制游戏,但是我坚持弄清楚如何将玩家移动到所选敌人的位置。

这是带有敌人位置的玩家脚本。

void Update()
{
if ((Input.GetKeyDown("1")) && (BattleFlow.playerTurn == 1)) // attack monster 1
{
BattleFlow.currentDamage = 40;
GetComponent<Animator>().SetTrigger("PlayerMelee");
GetComponent<Transform>().position = new Vector2(-4.78f, 3.68f);
StartCoroutine(playerAttack());
}
else if ((Input.GetKeyDown("1")) && (BattleFlow.playerTurn == 1)) //  attack monster 2
{
GetComponent<Animator>().SetTrigger("PlayerMelee");
GetComponent<Transform>().position = new Vector2(-4.45f, 1.77f);
StartCoroutine(playerAttack2());
}
}

玩家可以移动到怪物 1 的位置,但怪物 2 的脚本不起作用。即使我点击了怪物 2,玩家仍然朝着怪物 1 的方向前进。

这是我放在敌方脚本上的鼠标单击代码。

// Update is called once per frame
void Update () {
void OnMouseDown()
{
Debug.Log(gameObject.name);
BattleFlow.selectedEnemy = gameObject.name;
}

听起来很有趣。我认为您需要在 if 和 else if 中的另一个条件来检查所选的怪物名称。像这样:

if (Input.GetKeyDown("1") && BattleFlow.playerTurn == 1)
{
if (BattleFlow.selectedEnemy == "monster1name")  //  attack monster 1
{
BattleFlow.currentDamage = 40;
GetComponent<Animator>().SetTrigger("PlayerMelee");
GetComponent<Transform>().position = new Vector2(-4.78f, 3.68f);
StartCoroutine(playerAttack());
} 
else if (BattleFlow.selectedEnemy == "monster2name") //  attack monster 2
{
GetComponent<Animator>().SetTrigger("PlayerMelee");
GetComponent<Transform>().position = new Vector2(-4.45f, 1.77f);
StartCoroutine(playerAttack2());
}
}

还有一件事,我不知道,但它可能有助于存储选定的游戏对象而不仅仅是名称:

BattleFlow.selectedEnemy = gameObject;

通过这种方式,你不仅可以访问所选敌人的名称,还可以访问包括位置在内的任何内容。这意味着你可以做这样的事情来一般地处理攻击任何敌人,并且你不需要为每个敌人单独设置一个案例,假设你可以将游戏对象转换位置转换为正确的位置。

if (Input.GetKeyDown("1") && BattleFlow.playerTurn == 1)
{
var enemyPosition = = BattleFlow.selectedEnemy.transform.position;
BattleFlow.currentDamage = 40;
GetComponent<Animator>().SetTrigger("PlayerMelee");
GetComponent<Transform>().position = enemyPosition;
StartCoroutine(playerAttack());
}

最新更新