2D随机位置生成敌人

目标

  • 得到一个2D的环形的随机范围,然后使用玩家角色的坐标加上生成的坐标就可以实现随机位置生成敌人,
  • 同时也可以通过限制 distance ,指定生成距离为 distance 的坐标点,得到的结果为一个圆上的所有点

测试代码

public class TestRandom : MonoBehaviour  
{  
    // Update is called once per frame  
    void Update()  
    {  
        if (Input.GetKeyDown(KeyCode.Space))  
        {  
            var randomPos = RandomPos(5f, 10f);  
            Debug.Log("测试的距离范围是5-10,随机出来的向量为: " + randomPos);  
        }  
    }  

	/// <summary>  
	/// 随机距离和位置,生成位置是一个环形  
	/// </summary>
    public Vector2 RandomDistancAndPos(float min, float max)  
    {  
        // 首先得出本次随机的长度(两点之间的长度),比如 7
        var distance = Random.Range(min, max);  
        // 根据随机确定 X 的符号,Random.Range(0, 2) 只有 0,1 两种可能,整型变量是左闭右开,  
        // 如果随机为 1,那么符号为 1,如果随机为 0, 符号为 -1
        var symbolX = Random.Range(0, 2) == 1 ? 1f : -1f;  
        // 然后随机出一个 X 的值,它的范围是最小距离到本次随机出来的长度  
        // 如果 X == distance,就代表 Y 轴为0,如果 X == 0, 那么Y轴为 distance        
        var randomX = symbolX * Random.Range(0, distance);  
  
        // 确定 Y 的符号,如上  
        var symbolY = Random.Range(0, 2) == 1 ? 1f : -1f;  
        // 通过开平方得到具体 Y 值,因为 Unity 中 Mathf.Sqrt 只会得出正数,所以要乘以 symbolY        
        var posY = symbolY * Mathf.Sqrt(distance * distance - randomX * randomX);  
  
        // 最后整合为一个 Vector2 向量,并返回  
        Vector2 pos = new Vector2(randomX, posY);  
        return pos;  
    } 
    
	/// <summary>  
	/// 只随机最终位置,生成位置是一个圆上的所有点  
	/// </summary>
	 public Vector2 RandomOnlyPos(float min, float max, float distance)  
    {  
        
        var symbolX = Random.Range(0, 2) == 1 ? 1f : -1f;  
        var randomX = symbolX * Random.Range(0, distance);  
        
        var symbolY = Random.Range(0, 2) == 1 ? 1f : -1f;       
        var posY = symbolY * Mathf.Sqrt(distance * distance - randomX * randomX);  
        
        Vector2 pos = new Vector2(randomX, posY);  
        return pos;  
    }  
}

测试结果

请添加图片描述

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于Unity自动生成敌人Unity2D AI敌人自动追踪的问题,我可以继续提供一些建议。 对于自动生成敌人,我们可以使用Unity中的预制体(Prefab)来实现。具体地说,你可以在项目中创建一个敌人预制体,包含敌人的模型、动画、碰撞体、脚本等元素。然后,你可以在场景中放置一个空对象作为敌人生成器,编写脚本来实现自动生成敌人的功能。 在脚本中,你可以使用Instantiate方法来生成敌人实例。具体地说,你可以将敌人预制体作为参数传入,生成一个新的敌人实例,并设置它的初始位置、属性等信息。你可以使用Random类来随机生成敌人位置和属性,使得每次生成敌人都不同。 对于敌人的自动追踪,你可以使用Unity中的NavMeshAgent组件来实现。具体地说,你可以为敌人添加一个NavMeshAgent组件,使它能够在场景中自动寻路。然后,你可以编写代码来实现敌人的追踪行为,例如让敌人朝向玩家并向其移动。 除此之外,你还可以为敌人添加视野范围、攻击距离等限制,使得敌人只有在一定范围内才会追踪玩家,并只有在一定距离内才会攻击玩家。你可以使用Collider组件和Raycast来实现这些限制。 总的来说,Unity提供了很多方便的工具和功能,可以帮助你实现自动生成敌人和AI追踪等功能。如果你需要更具体的代码实现或者有其他问题,可以继续向我提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值