我在2D中获得了一个用于摆动斧头的小脚本。就像这里的例子一样:
我的问题是,我不知道如何将2D代码翻译成3D。我的物体上有一个刚体和一个铰链(用于摆动物理学)。
Rigidbody.angularVelocity
需要获取Vector3而不是浮点值。
我的代码:
Rigidbody rigid;
float rangeToPush = 0.3f;
float velocity = 120;
private void Start()
{
rigid = GetComponent<Rigidbody>();
rigid.angularVelocity = Vector3.down * velocity;
}
private void Update()
{
if (transform.rotation.z > 0 &&
transform.rotation.z < -rangeToPush &&
rigid.angularVelocity.magnitude > 0 &&
rigid.angularVelocity.magnitude < velocity)
{
rigid.angularVelocity = Vector3.down * velocity;
}
else if (transform.rotation.z < 0 &&
transform.rotation.z > rangeToPush &&
rigid.angularVelocity.magnitude < 0 &&
rigid.angularVelocity.magnitude > -120)
{
rigid.angularVelocity = Vector3.down * -velocity;
}
}
缺少的东西是
的价值data.Rigid.angularVelocity = ?Vector3?
而不是我的浮点值,显然我的两个if语句是错误的,我有
if( /* the other statements .. && */ data.Rigid.angularVelocity > 0 && data.Rigid.angularVelocity < data.RigidVelocity)
我需要将其转换为3D。
非常感谢您的帮助!
编辑:我尝试使用
data.Rigid.angularVelocity = Vector3.down * data.RigidVelocity;
和我的if-statements
Rigid.angularVelocity.magnitude
但这将在有限的时间内摆动,而不是无止境的。所以也许我必须更改数据脚本中的值,否则我必须使用其他东西而不是大小...我不知道
答案 0 :(得分:2)
我终于明白了。我删除了HingeJoint并使用此代码使其无休止地摇摆:
float speed = 0.4f; // Speed
float amplitude = 70; // How far can it swing?
private void Update()
{
transform.rotation = Quaternion.Euler(new Vector3(0, 0, Mathf.Sin(Time.timeSinceLevelLoad * Mathf.PI * speed) * amplitude)); // Swing
}