unity无人机3D仿真总结

79
0
2020年11月16日 09时25分

 

开发平台: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;
        }

 

 

 

发表评论

后才能评论