Unity基本功能说明

时间:2015-05-17 15:46:37

标签: c# function unity3d

如标题中所述,我希望有人可以向我解释一些基本的事情。

1)Rigibody.AddForce(Vector3(50, 50, 50) * speed);

为什么物体在给出坐标时会移动?如果你将它乘以如图所示它甚至更快?我想这是相同的:

transform.Translate(-speed * Time.deltaTime * Input.GetAxis("Horizontal"), 0, 0);

整点是:我传递坐标,并使用计算值

向右移动

(坐标*速度* Something_Else)。怎么来的?

我真的很感激任何答案。

更新1:如果我将Vector3乘以某个浮点数,它也会返回一个Vector3,但对象的速度会增加。我不明白为什么。坐标只是坐标。为什么一个物体移动速度更快"更大"坐标?

float speed = 50.00f; Rigibody.AddForce(Vector3(50, 50, 50) * speed);

1 个答案:

答案 0 :(得分:0)

首先,概念:

  1. 变换:场景中的每个对象都有一个变换,表示位置,旋转和缩放
  2. 刚体:统一物理学的一部分,代表物理学应用的物体
  3. 因此,具有变换但没有刚体的物体不会受到重力,碰撞或力的影响

    你可以通过根据时间改变平移的位置来实际“模拟”没有刚体的物理,但它不能与物理系统的其余部分正确交互(这是你的两个实现之间的主要不同,这不是相同但可能看起来相似)

    然后,两者都以相同的方式工作,你传递一个Vector,表示每个轴上的力/距离:

    myRigibody.AddForce(Vector3(2,0,0)); //Force of 2 applied in x axys
    myTransform.Translate(Vector3(2,0,0)); //translate 2 position in x axys
    

    所以,通常,你使用一个标准化向量(模块等于1)并乘以你的速度(或技术上的力):

    //first vector is direction (x axys) and multiply by speed (2)
    myRigibody.AddForce(Vector3(1,0,0)*2); 
    

    将矢量想象为空间中的坐标,而不是该方向上的方向或距离。

    回答更新
    在给出的例子中,我们在谈论Force时有Vector3(50,50,50),它代表每个轴上的一个力:

    Rigidbody.AddForce(Vector3(50, 40, 30));
    

    这种方法,将在每个轴上对物体施加50个单位的初始力(将加速它),也就是说,物体在x轴上的力为50,y轴为40,z为30轴,使它在各个方向加速

    通过escalar乘以向量将返回Vector3,其中所有组件都是乘法,因此Vector3(50,40,30)*2将返回与Vector3(100,80,60)相同的对象,使对象在相同方向上加速但是有“速度”的两倍

    这里的主要问题不是关于编程,而是一些基本的数学/物理理解以及如何使用矢量,正如我之前所说的,矢量不是与坐标相同,简而言之,坐标表示空间中的一个点,而矢量表示方向和“距离”,因此,使用[1,0,0]表示距离原点x轴上的1米,而作为矢量,它表示 [0,0,0]到[1,0,0]的距离和方向。