【问题标题】:Unity 3D Set object in coneUnity 3D 在圆锥中设置对象
【发布时间】:2016-03-13 20:32:51
【问题描述】:

我希望将一个对象放置在相对于另一个对象的特定位置:

这个新对象必须放置在粉色区域中,我只知道放置的最小和最大距离、相对于我的第一个对象向前方向的角度(以度为单位的 maxAngle)以及第一个对象的位置。

我已经知道如何检查一个对象是否放置在粉红色区域中,但没有设置它在该区域中的位置。所以我拿了代码来检查锥体中的一个对象,但我不知道如何转换它来设置锥体中的位置。

float distance = Random.Range(minDistance, maxDistance);
float angle = maxAngle *= Mathf.Deg2Rad;
float coneRadius = distance * Mathf.Tan(angle);

Vector3 vect = firstObject.transform.position - targetObject.transform.position;
targetObject.transform.position = new Vector3(angle, 0, firstObject.transform.position.z + distance);

如果你能给我一些线索,那就太好了。

【问题讨论】:

  • 你有中间向量吗?
  • 第一个物体没有移动/旋转,所以它是垂直轴。
  • 所以你有一个方向向量和位置以及一个最大和一个最小距离,不是吗?
  • 是的,我知道所有这些,也知道角度。

标签: c# math unity3d


【解决方案1】:

诀窍是移动局部位置,然后拉直...

这确实是 Unity 或任何基于变换的场景引擎中的基本技术。

创建新对象“newb”。

(1) 将对象准确定位在图像中的“+”处。

(2) 选择你的角度

   angle = Random.Range(-maxAngle, maxAngle);

(3) 将 newb 扭曲这么多:

   newb.transform.eulerAngles = new Vector3( 0f, 0f, angle);

(4) 选择你的距离:

     distance = Random.Range(minDistance,maxDistance);

(5) 然后将newb的LOCAL位置偏移这么多:

     newb.transform.Translate(0f, 0f, distance, Space.Self);

然后是诀窍:

注意“newb”会被“扭曲”,所以让它坐直:

       newb.transform.eulerAngles = Vector3.zero;

【讨论】:

  • 我不明白你在说什么,我不是在寻找如何旋转我要创建的对象,我想将它放置在相对于相对对象的精确角度,问题不是距离,因为计算很简单,而是距离与角度,因为位置必须设置为锥形。
  • 我没有注意到翻译,对不起!很好用,谢谢。
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 2011-02-12
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多