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

时间:2017-08-16 09:30:22

标签: c# unity5 unity2d

我目前正在制作一种基于转弯的游戏类型,但我很难搞清楚如何将玩家移动到所选敌人的位置。

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

 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;

     }

1 个答案:

答案 0 :(得分:0)

听起来很有趣。我认为你需要在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());
}