物理实验室器件制作
永动机:
永动机模型分为三部分,分别是重力球、转盘、基座。
基座是静止不动的。在基座上添加collider,以及铰链组件。
通过unity的铰链与轮盘中心相连,使得转盘被固定,并且转盘只能按照教练规定的轴旋转。
(取消轮盘与基座的碰撞,避免在转动过程中个,产生不必要的碰撞)
转盘内部,建模的时候分为一个个的隔间,在场景中,为每个隔间的周围添加box collider碰撞。每个隔间中放置一个小球,在小球上也添加sphere collier球形碰撞,添加rigidbody刚体,调整其大小和质量,使小球能在隔间内自由运动并带动整个转盘转动。
为了模拟理想状态下永动机转动不停的效果,给转盘添加force组件,给予一个同方向的初始力让转盘转动。
之后在转动方向上持续给予一个relative force恒力。调整各部分组件的大小和质量。
摆钟实验:
模型,分为多个摆球,摆球与基座的悬挂绳,和一个用来悬挂摆球的基座。
在基座的两条悬挂杆上面设置铰链组件,将所有的摆球的悬挂绳与基座链接,只能够沿规定的轴旋转。
在作数第二个球和右数第二个摆球上面添加脚本,用来接收最边上的小球的撞击作用力,然后传递给另一侧的小球。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetAndSetForce : MonoBehaviour { private Rigidbody getBody; public Rigidbody setBody; private Vector3 vel; public float addRate; // Use this for initialization void Start () { getBody = this.GetComponent<Rigidbody>(); } // Update is called once per frame void Update () { } void OnCollisionEnter(Collision c) { Vector3 tempVel = c.gameObject.GetComponent<Rigidbody>().velocity; if (c.gameObject.tag == "ball" ) { vel.x = tempVel.x*addRate; vel.y = tempVel.y*addRate; vel.z = tempVel.z*addRate; c.gameObject.GetComponent<Rigidbody>().velocity = Vector3.zero; setBody.velocity = vel; } } }
例如,提起右侧的小球,将其放下,小球产生的作用力被右侧第二个球记录,再将这个作用力传递给左数第二个球,在又左侧第二个球传递给最左侧的小球,最左侧的小球受力飞起,之后循环次过程。在没有摩擦力的虚拟环境中,这个过程会一直持续下去。
为了模仿理想情况下的力的传递没有损耗,可以将传递后的力放大,再施加。
最后调整模型的大小和质量,以及力的传递后放大的倍数,实现虚拟理想情况下钟摆实验。