Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3D c#更改对象的旋转_C#_Unity3d - Fatal编程技术网

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;
    }
我的逻辑是:

  • 调用更新操作
  • 哦。。。森洛特变了。。。因此,将SunRot值复制到Sun gameobject

  • 当我使用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
    ,除非偏移太阳对象的中心,这可能是理想的,也可能不是理想的,取决于您的情况