Vector3.MoveTowards同时跟随光标?

时间:2018-04-28 05:48:30

标签: unity3d

我正在制作一个跟随我的鼠标位置的角色。

我也有被实例化的敌人,并希望这个角色移向敌人的位置但比敌人高几英尺。

由于我的角色是飞行的敌人,我不确定如何使用朝向统一的方向。 当我的敌人被摧毁时,我也希望角色继续跟随光标。

public class FollowCursor : MonoBehaviour 
{

    // Use this for initialization
    void Start ()
    {   
    }

    // Update is called once per frame
    void Update () 
    {
        if(GameObject.FindWithTag("Enemy"))
        {   
            transform.position = Vector3.MoveTowards.GameObject.FindWithTag("Enemy").transform.position;
        }
        else
        {   
            transform.position = Camera.main.ScreenToWorldPoint( new Vector3(Input.mousePosition.x,Input.mousePosition.y,8.75f));
        }
    }
}                        

1 个答案:

答案 0 :(得分:1)

我知道你希望移向一个飞行的敌人和/或让飞行的敌人向你的角色移动。

我也明白你希望使用MoveTowards方法来做到这一点。

您应该可以通过忽略Y位置或将其设置为固定值来执行此操作。

喜欢这个。

//Method used: Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta); 

//Set movespeed/steps
float speed = 5f;
float step = speed * Time.deltaTime;

//Define y position
float yourFixedYValue = 8.75f;

//Find target
Vector3 enemyPosition = GameObject.FindWithTag("Enemy").transform.position;
Vector3 target = new Vector3(enemyPosition.x, yourFixedYValue, enemyPosition.z);

//Move from current position towards target with step increment.
transform.position = Vector3.MoveTowards(transform.position, target, step);

如果没有回答你的问题,请详细说明你的意思。

编辑:

要移向鼠标,您可以在Update方法中使用类似这样的Raycast。

if (Input.GetMouseButtonDown(0)) 
{ //If left mouse clicked
    RaycastHit hit; 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //Fire ray towards where mouse is clicked, from camera.
    if (Physics.Raycast(ray, out hit))  //If hit something
        target = hit.point; //point is a vector3 //hit.point becomes your target
}

那"某事"可以是任何对手,也可以是敌人。所以可以用来移动一般并向敌人移动。