开发平台:unity2017 个人版 目前实现的效果:   1   2   3   无人机的模型是采用moya软件制作。 控制代码是使用C#语言。 总结C#语言的用法: (1)脚本的生命周期 1)Awake():在游戏运行时调用,用于初始化,在加载场景时运行。 2)Start()在游戏开始时执行一次,在Awake()函数后面执行。一般将变量初始化、游戏对象的获取是放在这个函数中运行。 3)Update()在游戏的每一帧都会运行一次,在游戏中的大部分代码放在此处,在Start()函数的后面执行。 4)LateUpdate()和Update一样在游戏的每一帧都会执行,在Update后面执行。 5)FixedUpdate()是固定时间更新,这个更新的时间周期可以设置。一般将运动学相关的计算放在此处运行。 6)OnGUI是绘制界面的函数,将于界面相关的代码放在此处运行,比如建立按钮、输入输出框、label、slider等 7)一些与鼠标有关的回调函数:OnMouseOver、OnMouseEnter、OnMouseExit、OnMouseDown、OnMouseUp、OnMouseDrag 8)一些与触发相关的回调函数:OnTriggerEnter、OnTriggerExit、OnTriggerStart 9)一些与碰撞相关的回调函数:OnCollisionEnter、OnCollisionExit、OnControlCollisionHit 10)一些与渲染有关的回调函数:OnBecameInvisible、OnBecamevisible 11)对象可用或激活 的回调函数:OnEnable 12)脚本销毁的回调函数:OnDestroy 13)GUI事件的回调函数:OnGUI (2)C#语言语句 1)找到对象:GameObject.Find(“对象的名称或对象的路径+名称”)  
  uav_2_self = GameObject.Find("uav_2");

 
   uav_2_front_motor1_right = GameObject.Find("uav_2/front_motor_right24/motor/propellor24");

    2)找到对象的组成元件(比如物理引擎):  
 Rigidbody uav_2_rigidbody = null;
  uav_2_rigidbody = uav_2_self.GetComponent<Rigidbody>();
    3)不同脚本之间变量调用: uav_2脚本  
   static public  Vector3 uav_2_motor1_speed = Vector3.zero;//1号电机的速度
   static public  Vector3 uav_2_motor2_speed = Vector3.zero;//2号电机的速度
   static public  Vector3 uav_2_motor3_speed = Vector3.zero;//3号电机的速度
   static public  Vector3 uav_2_motor4_speed = Vector3.zero;//3号电机的速度
    uav2_propellor脚本  
 uav_2_front_motor1_right.transform.Rotate(0, uav_2.uav_2_motor1_speed.x + uav_2.uav_2_motor1_speed.y + uav_2.uav_2_motor1_speed.z, 0);
 uav_2_front_motor3_left.transform.Rotate(0, uav_2.uav_2_motor2_speed.x + uav_2.uav_2_motor2_speed.y + uav_2.uav_2_motor2_speed.z, 0);
 uav_2_back_motor2_right.transform.Rotate(0, uav_2.uav_2_motor3_speed.x + uav_2.uav_2_motor3_speed.y + uav_2.uav_2_motor3_speed.z, 0);
 uav_2_back_motor4_left.transform.Rotate(0, uav_2.uav_2_motor4_speed.x + uav_2.uav_2_motor4_speed.y + uav_2.uav_2_motor4_speed.z, 0);
    4)调试输出  
Debug.Log("uav_2.uav_2_tagetSpeed.y"+ uav_2.uav_2_tagetSpeed.y);
Debug.Log("uav_2.uav_2_currentSpeed.y"+ uav_2.uav_2_currentSpeed.y);
Debug.Log("uav_2.uav_2_motor1_speed.x"+ uav_2.uav_2_motor1_speed.x);
    5)限制取值范围  
 uav_2_tagetSpeed.x = Mathf.Clamp(uav_2_tagetSpeed.x, -speed_max, speed_max);
 uav_2_tagetSpeed.y = Mathf.Clamp(uav_2_tagetSpeed.y, -speed_max, speed_max);
 uav_2_tagetSpeed.z = Mathf.Clamp(uav_2_tagetSpeed.z, -speed_max, speed_max);
    6)GUI与键盘  
 //向右的箭头按下
        if(Input.GetKey(KeyCode.RightArrow))
        {
            uav_2_targetVcc = Vector3.zero;
            uav_2_targetVcc = Vector3.right * speed;
            uav_2_motor3_Vcc = Vector3.up;
            uav_2_motor4_Vcc = Vector3.up;
            uav_2_motor1_Vcc = Vector3.up * 0.5f;
            uav_2_motor2_Vcc = Vector3.up * 0.5f;

        }
        //界面的按钮
       else  if (GUILayout.RepeatButton("向右"))
        {
            uav_2_targetVcc = Vector3.zero;
            uav_2_targetVcc = Vector3.right * speed;
            uav_2_motor3_Vcc = Vector3.up;
            uav_2_motor4_Vcc = Vector3.up;
            uav_2_motor1_Vcc = Vector3.up * 0.5f;
            uav_2_motor2_Vcc = Vector3.up * 0.5f;
        }