c# - 单击鼠标时如何跟随单位
问题描述
当我在敌人上单击鼠标时,我需要我的单位向敌人移动,并在我的单位接触他时摧毁
对于移动,我使用 navmesh 和 raycast hit
所有单位都有navmesh代理
敌人按点移动
解决方案
有很多方法可以做到这一点:我给你全局的想法,你适应你的脚本我已经为敌人设置了“敌人”层,只是为了确保追逐一个点击的敌人。在我的示例中层敌人 = 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,这样做没有任何困难。
推荐阅读
- ffmpeg - 使用ffmpeg将广播重定向到多播
- json - JSON jdt替换转换不起作用
- c# - 从 Unity 3.4.2 中提取 .unity3d 文件以升级到 Unity 5.2.3
- android - 如何设置 TabLayout 圆形指示器的 tabBackground
- sql - 将连接查询添加到预先存在的代码
- elasticsearch - 内部负载均衡器的 GCP 运行状况检查
- reactjs - Cognito / Flask / React:如何登录后端?
- netsuite - SuiteScript 2 RESTlet 权限不足
- python - 如何将这种格式的文件中的字符串转换为数字数组?
- c++ - 从串口解码二进制数据