unity3d————游戏对象随机位置移动

1.首先我们需要在游戏先创建一个坦克预设体,然后 我们思路就是 声明位置数组 然后数组中的每一个元素都包含 位置 信息类 比如:public Transform\[\] randomPos对于这个数组 我们可以在外面创建空位置 然后把位置拖到 数组里面就行了 多少个位置由我们决定

2.然后我们需要一个函数来实现这个功能,代码如下:

cs 复制代码
 //产生随机点
    private void RandPos()
    {
        if (randomPos.Length == 0)
            return;

        targetPos = randomPos[Random.Range(0, randomPos.Length)];
    }
方法定义:
复制代码
 ###### `private void RandPos()`:定义了一个名为`RandPos`的私有方法,该方法没有返回值(`void`)也不接受任何参数。
检查随机点数组:
复制代码
 ###### `if (randomPos.Length == 0) return;`:这行代码检查`randomPos`数组的长度是否为0。如果是,说明数组中没有可用的随机点,因此方法直接返回,不执行后续代码。这是一种防御性编程的做法,用于确保在数组为空时不会尝试访问其元素,从而避免引发错误。
选取随机点:
复制代码
 ###### `targetPos = randomPos[Random.Range(0, randomPos.Length)];`:这行代码执行了两个主要操作:

 *

   ###### `Random.Range(0, randomPos.Length)`:使用`Random.Range`方法生成一个介于0(包含)和`randomPos.Length`(不包含)之间的随机整数。这个整数将作为数组索引来选取一个随机点。

 *

   ###### `randomPos[...]`:使用上一步生成的随机整数作为索引,从`randomPos`数组中选取对应的元素(即一个随机点)。
复制代码
 ###### 最后,选取的随机点被赋值给`targetPos`变量。这样,`targetPos`就包含了一个新的随机位置,后续代码可以使用这个位置来控制对象的移动或朝向。
综上所述,RandPos方法的作用是从randomPos数组中随机选取一个点,并将这个点设置为目标位置(targetPos)。这种方法在游戏开发中很常见,可以用于实现对象的随机移动、敌人的随机巡逻路径、玩家的随机出生点等功能。

3.在start 生命周期函数调用 RandPos(); 随机生成 一个目标位置 targetPos 加下来上代码:

cs 复制代码
 void Update()
    {
        this.transform.LookAt(targetPos);
        this.transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

        //判断2点距离 接近时候 就随机切换位置
        if (Vector3.Distance(this.transform.position, targetPos.position) < 0.05f)
        {
            RandPos();
        }
    }
void Update() 方法:
复制代码
 ###### `Update()` 是Unity中的一个特殊方法,它会在每一帧被自动调用。这意味着Unity引擎会不断地执行`Update()`方法中的内容,直到游戏结束或对象被销毁。
this.transform.LookAt(targetPos);:
复制代码
 ###### 这行代码使当前对象(`this`)朝向`targetPos`这个目标位置。`transform`是Unity中用于管理对象位置、旋转和缩放等属性的组件。`LookAt`方法会根据目标位置自动计算并设置对象的旋转,使得对象"看向"目标位置。
this.transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);:
复制代码
 ###### 这行代码使对象沿着其前方(`Vector3.forward`)移动。`moveSpeed`是对象的移动速度,`Time.deltaTime`是上一帧到当前帧的时间间隔。将这三者相乘,可以确保对象的移动是平滑且帧率无关的,即无论游戏运行的帧率如何,对象的移动速度都保持一致。
距离判断与随机位置切换:
复制代码
 ###### `if (Vector3.Distance(this.transform.position, targetPos.position) < 0.05f)`:这行代码判断当前对象与目标位置之间的距离是否小于0.05f(这个值可以根据需要调整)。如果是,说明对象已经接近目标位置。
复制代码
 ###### `RandPos();`:当对象接近目标位置时,调用`RandPos()`方法。这个方法的具体实现没有在代码片段中给出,但从上下文来看,它的作用很可能是随机生成一个新的位置,并将这个位置赋值给`targetPos`,从而实现对象位置的随机切换。

综上所述,这段代码实现了一个简单的游戏逻辑:对象会自动朝向并移动向一个目标位置,当接近这个目标位置时,会随机切换到一个新的目标位置,然后继续朝向并移动向新的目标位置。这种逻辑可以用于制作各种游戏效果,比如敌人的巡逻行为、玩家的随机移动等。

相关推荐
外收内放5 小时前
面向对象高级(实战案例)
开发语言·python·学习
zimoyin6 小时前
在 C# 里嵌入 JavaScript:用 Jint 做可热更新的自动化脚本(从入门到踩坑)
javascript·c#·自动化
薛定e的猫咪6 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪7 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
小羊没烦恼!8 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
郝学胜-神的一滴9 小时前
游戏设计:原型与开发 08:我们到底在为谁做游戏
程序人生·游戏·游戏引擎·游戏开发·游戏策划
别动我齐刘海10 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
c#上位机10 小时前
C#上位机项目实战——exe项目调试更改dll中源代码
开发语言·c#
五仁烧饼10 小时前
动手学 Shader Graph(二):溶解与边缘发光
游戏·unity·shader·shader graph
一直C10 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull