Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 围绕点旋转对象并沿正弦函数移动它_Unity3d - Fatal编程技术网

Unity3d 围绕点旋转对象并沿正弦函数移动它

Unity3d 围绕点旋转对象并沿正弦函数移动它,unity3d,Unity3d,首先:我对团结非常陌生,就像在一个非常新的地方一样 我想做以下工作:我想围绕一个固定点旋转一个立方体(在我的例子中是一个相机),其半径在inspector中是可调的。立方体的Z轴应始终朝向摄影机的位置。当立方体围绕相机旋转时,它还应该遵循正弦函数,以2的幅度上下移动 我有一些工作代码,唯一的问题是随着时间的推移距离会增加。运行时间越长,立方体与摄影机之间的距离越高 以下是我目前拥有的: void Awake() { cameraPosition = GameObject.F

首先:我对团结非常陌生,就像在一个非常新的地方一样

我想做以下工作:我想围绕一个固定点旋转一个立方体(在我的例子中是一个相机),其半径在inspector中是可调的。立方体的Z轴应始终朝向摄影机的位置。当立方体围绕相机旋转时,它还应该遵循正弦函数,以2的幅度上下移动

我有一些工作代码,唯一的问题是随着时间的推移距离会增加。运行时间越长,立方体与摄影机之间的距离越高

以下是我目前拥有的:

 void Awake()
 {
         cameraPosition = GameObject.FindGameObjectWithTag("MainCamera").transform;
         transform.position = new Vector3(x: transform.position.x,
                                          y: transform.position.y,
                                          z: cameraPosition.position.z + radius);
         movement = transform.position;
 }
我在Awake()方法中实例化了一些变量,并将多维数据集的位置设置为它应该在的位置(是否在Awake()中实例化?)。稍后,我将在代码中使用矢量3运动来“摆动”立方体

 void Update()
 {
         transform.LookAt(cameraPosition);
         transform.RotateAround(cameraPosition.position, cameraPosition.transform.up, 30 * Time.deltaTime * rotationSpeed);
         MoveAndRotate();
 }
在这里,我设置立方体z轴的方向,并围绕摄影机旋转它。30只是我用来测试的一个常数

void MoveAndRotate() 
{
         movement += transform.right * Time.deltaTime * movementSpeed;
     
         transform.position = movement + Vector3.up * Mathf.Sin(Time.time * frequency) * magnitude;
}

坦率地说,我不完全理解这段代码。但是,我知道这包括一个旋转,因为它沿着它的x轴以及世界的y轴移动立方体。我还没有接触到向量和矩阵,所以如果你能分享你在这个主题上的知识,我将不胜感激。

在Awake中实例化变量应该没问题,但是如果你愿意,你也可以使用Unity提供的
Start(){}
方法

对于主要的问题本身,我猜每帧调用这个函数就是问题所在,因为你会增加位置

movement += transform.right * Time.deltaTime * movementSpeed;
如果你能尝试用这段代码替换它,看看它是否有用,那就太好了

movement = transform.right * Time.deltaTime * movementSpeed;

看来我已经找到了解决问题的办法,而且很容易

首先,我们需要立方体的初始位置,因为我们需要访问它的原始y坐标以考虑偏移

所以在Awake()中,而不是

movement = transform.position;
我们只是把它改成

initialPosition = transform.position;
使代码更具可读性

接下来,我们将MoveAndRotate()方法更改为只有一行

void MoveAndRotate() 
{
        transform.position = new Vector3(transform.position.x,
                                         Mathf.Sin(Time.time * frequency) * magnitude + initialPosition.y,
                                         transform.position.z);
}
那条线到底是什么意思?它将立方体的位置设置为新的矢量3。该向量由

its current x-value
our newly calculated y-value (our height, if you want to say so) + the offset from our original position
its current z value
这样,立方体只会随着自身与摄影机的距离而上下摆动


我还发现了距离增加的原因:我的移动方法不是描述一个球体(无论你如何旋转立方体,它都会保持相同的距离),而是一个平面。当然,沿平面移动立方体会自动增加某些移动点的距离。

对于你的最后一个问题,我自己也不太确定,stackoverflow有一个非常活跃的社区,但我从来没有问过问题,只是在谷歌上搜索了一下。因此,我在stackoverflow和Unity论坛上分享了一些很好的建议。哦,就因为你是从Unity开始的,我总是喜欢在YT上推荐Brackeys。他真的很好,他的“创造游戏系列”也是我的第一场Unity游戏。相信我,我今天在谷歌上搜索了很多次。我认为我的主要问题是我还没有熟练掌握这些问题所需要的数学知识。我已经在看Brackey了,试着理解他的一些概念。不过多亏了你的好心,先生。没问题,我总是喜欢看到更多的人进入游戏开发,正如你所知,Brackeys甚至制作了一个小系列,其中他谈到了游戏数学可能对你有帮助:D。我不确定这里问的问题是什么。。。如果“编辑”后的部分是自答,则应将其作为答案发布,而不是问题的编辑@谢谢你通知我。我还是个新手,所以我想编辑我的帖子就足够了。如果我只想让多维数据集变成“bop”,那就行了。但是每次将向量和立方体的位置设置为单个位置只会导致立方体振动(因为我首先调用RotateAround()。但是距离并没有变大,所以它似乎与我在相机周围旋转立方体的方式有关。因此,如果我在你进行更改时理解正确,我建议球的距离不会变大,但你不再有预期的“bop”了?它保持了bop,但它不再绕着摄像机旋转了。距离也发生了变化,但我已经找到了原因。很高兴现在距离的增加仍然存在还是消失了?如果你修复了它,请解释原因并写下来作为回应,并将其标记为已解决(没有什么比最终找到一个具有相同问题的人更糟糕的了,他只是说自己解决了lol),它仍然存在,但现在应该可以了。我可能需要学习四元数来绕球体旋转,但我认为我应该首先学习如何正确使用向量lol。这是我在学校的第一个脚本任务之一,所以我的老师应该对我的结果非常满意。