【问题标题】:Creating an object relative to the position and rotation of the previous object创建一个对象相对于前一个对象的位置和旋转
【发布时间】:2023-01-15 19:22:04
【问题描述】:

我正在尝试创建一个相对于前一个对象的旋转和位置的对象。我需要创建的对象考虑到前一个对象的旋转,也就是说,如果前一个对象旋转50度,当前对象也会旋转50度,它的位置考虑了旋转50度,也就是有条件的生成在Z轴线的旁边(位置随机)。我知道该怎么做,只要让当前对象成为前一个对象的子对象,然后更改本地位置,就很容易了,但是我会生成一堆这样的对象,以后我想添加清理,这样的解决方案会导致问题

newCheckpoint = Instantiate(checkPointPrefab, Vector3.one, Quaternion.identity);
newCheckpoint.transform.Rotate(0f, prevCheckpointRotation.eulerAngles.y, 0f);
newCheckpoint.transform.position = new Vector3(
    Random.Range(prevCheckpointPosition.x - 5f, prevCheckpointPosition.x + 5f),
    Random.Range(3f, 10f),
    Random.Range(prevCheckpointPosition.z + 5f, prevCheckpointPosition.z + 20f));

【问题讨论】:

  • 你说的清洁是什么意思?
  • @Obscure021,我的意思是清理创建的对象,也就是将它们从场景中移除,因为大量的对象会影响性能

标签: c# unity3d


【解决方案1】:

只需将之前的对象保存为变量即可。此外,通过临时保存位置,向量处理会更容易。

public GameObject objectType; // add your object reference here
private GameObject lastObject; // save last created object on a private variable

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        var _obj = Instantiate(objectType, Vector3.zero, Quaternion.identity);

        if (lastObject)
        {
            var _vector = lastObject.transform.position;
            
            _vector.x += Random.Range(-5, 5);
            _vector.z += Random.Range(-5, 20);
            _vector.y = Random.Range(3, 10);
            
            _obj.transform.position = _vector;
            
            _obj.transform.eulerAngles = lastObject.transform.eulerAngles + new Vector3(0f, 50f, 0f);
        }

        lastObject = _obj;
    }
}

【讨论】:

  • 我需要下一个对象考虑前一个对象的旋转,也就是说,它是相对于前一个对象的局部旋转产生的。现在它会相对于全局旋转产生,也就是说,对它来说,过去对象的 z 轴总是指向“直线”。我正在尝试生成一条轨道,这些对象是检查点,这样的旋转允许您在轨道上创建转弯。
【解决方案2】:

@Hatemsla。您可以使用对象池来生成对象。它经过了很好的优化。如果您不了解 Unity 中的对象池,请前往Brackeys video

您还可以使用 Unity 2021 内置的池化系统,说明来自Tarodev video

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2016-06-13
    • 2015-11-20
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2012-11-04
    相关资源
    最近更新 更多