• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

unity无人机3D仿真总结

人工智能 永望 2520次浏览 0个评论

  开发平台:unity2017 个人版 目前实现的效果:  
unity无人机3D仿真总结  
unity无人机3D仿真总结  
unity无人机3D仿真总结   无人机的模型是采用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;
        }

     


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明unity无人机3D仿真总结
喜欢 (0)

您必须 登录 才能发表评论!

加载中……