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