Unity3D c#更改对象的旋转
我试着在我的游戏中做昼夜循环。。。有一台服务器向我发送太阳的方位角,我想用这个方位角来改变平行光的旋转,下面是我的代码:Unity3D c#更改对象的旋转,c#,unity3d,C#,Unity3d,我试着在我的游戏中做昼夜循环。。。有一台服务器向我发送太阳的方位角,我想用这个方位角来改变平行光的旋转,下面是我的代码: public static Sun instance; public GameObject gameObject; public Vector3 SunRot; private bool rotate; void FixedUpdate() { ///Rotate gameObject with SunRot val
public static Sun instance;
public GameObject gameObject;
public Vector3 SunRot;
private bool rotate;
void FixedUpdate()
{
///Rotate gameObject with SunRot values
}
internal void UpdateRotation(double altitude, double azimuth)
{
Debug.Log(azimuth);
SunRot = new Vector3((float)azimuth, (float)altitude, 0);
rotate = true;
}
我的逻辑是:
当我使用EulerAngles时,它复制方位角就像[从服务器:304.00075,在transform.rotation:65.99825中]。。。我希望这样做[从服务器:304.00075,在transform.rotation:304.00075中]最好保留来自服务器的上一个值,并在其更改时使用
transform.rotation(deltaRotation)
。不过,对于边界为0-360的情况,您需要小心
public static Sun instance;
public GameObject gameObject;
private Transform sunTransform = gameObject.Transform;
private Vector3 previousServerValues;
private bool rotate;
void FixedUpdate()
{
///Rotate gameObject with SunRot values
}
internal void UpdateRotation(double altitude, double azimuth)
{
var newServerVals = new Vector3((float)azimuth, (float)altitude, 0);
Vector3 deltaRotation = newServerRot - previousServerRot ;
if (deltaRotation.x < 0) //boundary case, may need it for altitude as well
deltaRotation.x += 360;
sunTransform.Rotate (deltaRotation);
rotate = true;
}
公共静态Sun实例;
公共游戏对象游戏对象;
私有转换sunTransform=gameObject.Transform;
私有向量3先前的服务器值;
私人厕所;
void FixedUpdate()
{
///使用SunRot值旋转游戏对象
}
内部空隙更新(双高度、双方位)
{
var newServerVals=新矢量3((浮动)方位角,(浮动)高度,0);
Vector3 deltaRotation=newServerRot-previousServerRot;
if(deltaRotation.x<0)//边界情况下,高度也可能需要它
三角旋转x+=360;
旋转(三角旋转);
旋转=真;
}
顺便说一下,您可能需要使用
Transform.RotateAround
,除非偏移太阳对象的中心,这可能是理想的,也可能不是理想的,这取决于您的情况。最好保留服务器上的上一个值,并在其更改时使用Transform.Rotate(deltaRotation)
。不过,对于边界为0-360的情况,您需要小心
public static Sun instance;
public GameObject gameObject;
private Transform sunTransform = gameObject.Transform;
private Vector3 previousServerValues;
private bool rotate;
void FixedUpdate()
{
///Rotate gameObject with SunRot values
}
internal void UpdateRotation(double altitude, double azimuth)
{
var newServerVals = new Vector3((float)azimuth, (float)altitude, 0);
Vector3 deltaRotation = newServerRot - previousServerRot ;
if (deltaRotation.x < 0) //boundary case, may need it for altitude as well
deltaRotation.x += 360;
sunTransform.Rotate (deltaRotation);
rotate = true;
}
公共静态Sun实例;
公共游戏对象游戏对象;
私有转换sunTransform=gameObject.Transform;
私有向量3先前的服务器值;
私人厕所;
void FixedUpdate()
{
///使用SunRot值旋转游戏对象
}
内部空隙更新(双高度、双方位)
{
var newServerVals=新矢量3((浮动)方位角,(浮动)高度,0);
Vector3 deltaRotation=newServerRot-previousServerRot;
if(deltaRotation.x<0)//边界情况下,高度也可能需要它
三角旋转x+=360;
旋转(三角旋转);
旋转=真;
}
顺便说一句,您可能需要使用Transform.RotateAround
,除非偏移太阳对象的中心,这可能是理想的,也可能不是理想的,取决于您的情况