我有一个平台围绕轴旋转并让玩家随之旋转。
首先,我做了一个围绕y轴旋转的平台
[SerializeField]
bool counterclockwise; // rotation left or right?
[SerializeField]
private int speed;
private void Start()
{
if (counterclockwise)
speed = -speed;
}
private void Update()
{
transform.Rotate(new Vector3(0, speed * Time.deltaTime, 0));
}
private void OnTriggerEnter(Collider col)
{
col.transform.parent = transform; // keep the player as a child, to rotate him with the platform rotation
}
private void OnTriggerExit(Collider col)
{
col.transform.parent = null; // remove the player as a child
}
这真的很棒。因此,当尝试在x轴或z轴上旋转平台时,会出现一些错误。
当玩家得到平台的孩子(在x轴或z轴上旋转)时,他变得非常大,物理崩溃,他会自动飞到没有重力的空气中......
有人可以帮我解决这个错误吗?
所以当前的代码是
[SerializeField]
Vector3 rotationVector;
private void Update()
{
transform.Rotate(rotationVector * Time.deltaTime);
}
private void OnTriggerEnter(Collider col)
{
col.transform.parent = transform;
}
private void OnTriggerExit(Collider col)
{
col.transform.parent = null;
}
答案 0 :(得分:1)
显然,当你将setParent设置为GameObject时,问题就会发生,与triger输入或旋转没有关系,这个问题的原因似乎是:
我做了两个实验:
character.transform.parent = this.transform;
和
character.transform.SetParent(this.transform);
问题仍然存在。
我通过创建 Empty GameObject 解决了这个问题,将其置于平台的中间(您可以对此进行编程或使用编辑器)。然后我创建了一个脚本来制作这个Empty GameObject的子节点,平台和角色。还必须在此Empty GameObject的update()中执行旋转。
您可以尝试编写此脚本,只添加Start()和Update()方法来测试此解决方案:
void Start () {
GameObject character = GameObject.FindGameObjectWithTag("character");
GameObject platform = GameObject.FindGameObjectWithTag("platform");
character.transform.SetParent(this.transform,false);
platform.transform.SetParent(this.transform,false);
}
对于Update()
private void Update()
{
transform.Rotate(new Vector3(0, speed * Time.deltaTime, 0));
//transform.Rotate(new Vector3(speed * Time.deltaTime, 0, 0));
//transform.Rotate(new Vector3(0 , 0 , speed * Time.deltaTime));
}
经过测试,你仍然需要实现OnTriggerEnter和其他东西的部分,但至少你会看到使用Empty GameObject你可以“链接两者”
我想如果对于其中一个旋转你没有看到任何问题是因为该角度隐藏了变形,但是如果你转动GameObject你会看到它,并且将被隐藏为另一个角度的旋转。这取决于你的玩家和平台GameObjects的形状