首页 > 解决方案 > 单击鼠标时如何跟随单位

问题描述

当我在敌人上单击鼠标时,我需要我的单位向敌人移动,并在我的单位接触他时摧毁

对于移动,我使用 navmesh 和 raycast hit

所有单位都有navmesh代理

敌人按点移动

图片便于理解

标签: c#unity3dnavmesh

解决方案


有很多方法可以做到这一点:我给你全局的想法,你适应你的脚本我已经为敌人设置了“敌人”层,只是为了确保追逐一个点击的敌人。在我的示例中层敌人 = 8

3个阶段:

第一阶段:点击检测并捕获被点击的游戏对象

private bool chasing = false;
public Transform selectedTarget;

    if (Input.GetMouseButtonDown(0))
    {
        //Shoot ray from mouse position
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit[] hits = Physics.RaycastAll(ray);

        foreach (RaycastHit hit in hits)
        { //Loop through all the hits
            if (hit.transform.gameObject.layer == 8)
            { //Make a new layer for targets
                //You hit a target!

                selectedTarget = hit.transform.root;
                chasing = true;//its an enemy go to chase it
                break; //Break out because we don't need to check anymore
            }
        }
    }

第二阶段:追敌。所以你必须使用碰撞器和至少一个刚体,你有很多教程来解释如何检测碰撞。

    if (chasing)
    {
        // here i have choosen a speed of 5f
        transform.position = Vector3.MoveTowards(transform.position, selectedTarget.position, 5f * Time.deltaTime);
    }

使用 OnCollisionEnter(或 InTriggerEnter)在碰撞时销毁

void OnCollisionEnter(Collision col)
{
    if (col.gameObject.tag == "enemy")
    {
        Destroy(col.gameObject);
    }
}

给定的代码是针对 3d 游戏的,如果您使用的是 2d 游戏,只需将代码调整为 2D,这样做没有任何困难。


推荐阅读