旋转实例化预制件
Rotate instantiated prefabs
我正在通过以下代码在围绕中心点的圆圈中实例化预制件...
#pragma strict
var numPoints : int = 7;
var radiusX : int;
var radiusY : int;
var chair : Transform;
function Start () {
distributeFields();
}
function distributeFields() {
var centrePos = Vector3(-350,24,-490);
for (var pointNum = 0; pointNum < numPoints; pointNum++)
{
var i = (pointNum * 1.0) / numPoints;
var angle = i * Mathf.PI * 2;
var x = Mathf.Sin(angle) * radiusX;
var z = Mathf.Cos(angle) * radiusY;
var pos = Vector3(x, 0, z) + centrePos;
Instantiate(chair, pos, Quaternion.LookRotation(pos));
}
}
我想让每个预制件都面向中心,但它们都在同一个方向旋转。我假设每次迭代都将所有 "chair" 预制件旋转到当前迭代的旋转。我在这里做错了什么?
似乎所有的椅子现在都从原点看向别处,这就是为什么它们看起来都在看同一个方向。之所以如此,是因为 Quaternion.LookRotation
将椅子的位置向量作为输入。
如果我理解正确的话,所需的输入是从椅子到 centrePos
的向量。这可以通过将实例化行更改为此来完成:
Instantiate(chair, pos, Quaternion.LookRotation(-Vector3(x, 0, z)));
我正在通过以下代码在围绕中心点的圆圈中实例化预制件...
#pragma strict
var numPoints : int = 7;
var radiusX : int;
var radiusY : int;
var chair : Transform;
function Start () {
distributeFields();
}
function distributeFields() {
var centrePos = Vector3(-350,24,-490);
for (var pointNum = 0; pointNum < numPoints; pointNum++)
{
var i = (pointNum * 1.0) / numPoints;
var angle = i * Mathf.PI * 2;
var x = Mathf.Sin(angle) * radiusX;
var z = Mathf.Cos(angle) * radiusY;
var pos = Vector3(x, 0, z) + centrePos;
Instantiate(chair, pos, Quaternion.LookRotation(pos));
}
}
我想让每个预制件都面向中心,但它们都在同一个方向旋转。我假设每次迭代都将所有 "chair" 预制件旋转到当前迭代的旋转。我在这里做错了什么?
似乎所有的椅子现在都从原点看向别处,这就是为什么它们看起来都在看同一个方向。之所以如此,是因为 Quaternion.LookRotation
将椅子的位置向量作为输入。
如果我理解正确的话,所需的输入是从椅子到 centrePos
的向量。这可以通过将实例化行更改为此来完成:
Instantiate(chair, pos, Quaternion.LookRotation(-Vector3(x, 0, z)));