我试图“挤压”一个GameObject,当Squeezer1和Squeezer2 都与它相撞并继续向对方移动时。我希望减小宽度(x比例),以便GameObject的总面积保持,同时仍然在两个Squeezers之间。因为我不是高级程序员,有人可以为我提供可随时部署的脚本吗?
这个问题与这个问题密切相关:Question
答案 0 :(得分:2)
脚本如何工作?
它有box,squezedbox,defaultScale,speed和counter。
squezed box - > squzedBox对象,在设计时用蓝灰色标记。
框 - > 在设计时使用绿色标记的cubeProps对象。
defaultScale - > 将是您的默认比例。您可以在Start()方法中指定它。它将有盒子的比例。
重要的是我们要改变盒子对象(cubeProps)的比例,因为它有网格渲染器组件。
using UnityEngine;
using System.Collections;
public class normalBoxScript : MonoBehaviour {
private int counter;
public GameObject box;
public GameObject squezeBox;
private Vector3 defaultScale;
public float speed;
// Use this for initialization
void Start () {
defaultScale = box.transform.localScale;
}
void Update () {
Debug.Log(counter);
updateScale();
}
void OnTriggerEnter(Collider col)
{
if (col.tag == "Player")
{
counter++;
}
}
void OnTriggerExit(Collider col)
{
if (col.tag == "Player")
{
counter--;
}
}
void updateScale()
{
if (counter == 2)
{
box.transform.localScale = Vector3.MoveTowards(box.transform.localScale, squezeBox.transform.localScale, speed);
}
else
{
box.transform.localScale = Vector3.MoveTowards(box.transform.localScale, defaultScale, speed);
}
}
}
答案 1 :(得分:0)
如果您只使用具有三个组件(长度X,长度Y,长度Z)的立方体,并且挤压始终垂直于表面(意味着角度不会改变),您可以基本上将问题减少为找到两个一个人被固定的组件。在您的例子中,宽度设置为两个挤压立方体的面之间的距离,并且当您需要保存区域时,您可以推断出高度。
Area = Width * Height
Height = Area / NewWidth
Width = NewWidth
在三维中,您可以假设您要推导的两个组件是相等的......
正如我写这篇文章一样,我认为你可以通过弹簧正确地模拟这个。方形/立方体的每个边缘都是连接角落的弹簧。应定义弹簧的粗糙度,l0应为您考虑的长度。
有点提醒春天方程:
Let F be the force exerced by a spring
l0 the length of the spring at rest
l the current length of the spring
k a constant that tweak the force (equivalent to the roughness of the spring)
F = k * (l - l0)
如果挤压垂直于表面,单独的弹簧将无法保护该区域。在这种情况下,您需要更新未取消维度的 l0 。