如何在单击鼠标时跟随单位
How to follow the unit when you click the mouse
我需要我的单位在我点击敌人时移动到敌人身边并在我的单位接触到他时摧毁
为了移动,我使用导航网格和光线投射命中
所有单位都有导航网格代理
敌人按点移动
有很多方法可以做到这一点:我给你全局的想法,你适应你的脚本
我已将敌人层设置为 "enemy" 以确保追逐点击的敌人。在我的样本中层 enemy = 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,这没有任何困难。
我需要我的单位在我点击敌人时移动到敌人身边并在我的单位接触到他时摧毁
为了移动,我使用导航网格和光线投射命中
所有单位都有导航网格代理
敌人按点移动
有很多方法可以做到这一点:我给你全局的想法,你适应你的脚本 我已将敌人层设置为 "enemy" 以确保追逐点击的敌人。在我的样本中层 enemy = 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,这没有任何困难。