using UnityEngine; /// /// 举高车类控制器 /// public class ElevatingController : FireExtinguishController { //手动实例化时主臂和二级臂需要展开设为true //通过数据实例化时主臂和二级臂根据数据设置变换,此时设为false public bool isInit = true; //伸展速度 protected float zSpeed = 5; //功能键按下(配合主键实现二级臂的旋转) protected bool ctrlDown = false; //第1伸展臂是否展开 protected bool firstZero = true; protected bool firstFull = false; //第2伸展臂是否展开 protected bool secondZero = true; protected bool secondFull = false; //第3伸展臂是否展开 protected bool thirdZero = true; protected bool thirdFull = false; //第4伸展臂是否展开 protected bool fourthZero = true; protected bool fourthFull = false; //第5伸展臂是否展开 protected bool fifthZero = true; protected bool fifthFull = false; //臂模型 public GameObject part1; public GameObject part2; public GameObject part3; public GameObject part4; public GameObject part5; public GameObject part6; public GameObject part7; //记录各个举臂的变换 protected Vector3 part1Rot; protected Vector3 part1Pos; protected Vector3 part2Rot; protected Vector3 part2Pos; protected Vector3 part3Rot; protected Vector3 part3Pos; protected Vector3 part4Rot; protected Vector3 part4Pos; protected Vector3 part5Rot; protected Vector3 part5Pos; protected Vector3 part6Rot; protected Vector3 part6Pos; protected Vector3 part7Rot; protected Vector3 part7Pos; public override void InitData() { base.InitData(); part1 = transform.Find("Scene/Body/Base").gameObject; part2 = transform.Find("Scene/Body/Base/Bi1").gameObject; part3 = transform.Find("Scene/Body/Base/Bi1/Bi2").gameObject; part4 = transform.Find("Scene/Body/Base/Bi1/Bi2/Bi3").gameObject; part5 = transform.Find("Scene/Body/Base/Bi1/Bi2/Bi3/Bi4").gameObject; part6 = transform.Find("Scene/Body/Base/Bi1/Bi2/Bi3/Bi4/Bi5").gameObject; part7 = transform.Find("Scene/Body/Base/Bi1/Bi2/Bi3/Bi4/Bi5/Bi6").gameObject; } private void Start() { task = transform.Find("Info/Task").GetComponent(); GetOriginalTransform(); if (isInit) Init(); } /// /// 获取初始变换数据 /// protected virtual void GetOriginalTransform() { part1Pos = part1.transform.localPosition; part1Rot = part1.transform.localEulerAngles; part2Pos = part2.transform.localPosition; part2Rot = part2.transform.localEulerAngles; part3Pos = part3.transform.localPosition; part3Rot = part3.transform.localEulerAngles; part4Pos = part4.transform.localPosition; part4Rot = part4.transform.localEulerAngles; part5Pos = part5.transform.localPosition; part5Rot = part5.transform.localEulerAngles; part6Pos = part6.transform.localPosition; part6Rot = part6.transform.localEulerAngles; part7Pos = part7.transform.localPosition; part7Rot = part7.transform.localEulerAngles; } /// /// 初始化 /// protected virtual void Init() { } private void Update() { hose.SetActive(isHose = task.text.Contains("灭火") || task.text.Contains("掩护") || task.text.Contains("冷却")); } protected override void LateUpdate() { base.LateUpdate(); if (SelectionManager.IsContains(gameObject)) { if (Input.GetKeyDown(PowerManager.Instance.fn)) { ctrlDown = true; } if (Input.GetKeyUp(PowerManager.Instance.fn)) { ctrlDown = false; } if (Input.GetKeyDown(PowerManager.Instance.reset)) OnReset(); BaseControl(); MainArmControl(); SecondArmControl(); PlatformControl(); } } /// /// 水炮旋转控制 /// protected override void WaterGunControl() { if (!ctrlDown && Input.GetKey(PowerManager.Instance.waterGunUp)) { waterGun.transform.Rotate(-Time.deltaTime * rotSpeed, 0, 0); } else if (!ctrlDown && Input.GetKey(PowerManager.Instance.waterGunDown)) { waterGun.transform.Rotate(Time.deltaTime * rotSpeed, 0, 0); } } /// /// 转盘控制 /// private void BaseControl() { if (Input.GetKey(PowerManager.Instance.leftR)) { part1.transform.Rotate(0, -Time.deltaTime * rotSpeed, 0); } else if (Input.GetKey(PowerManager.Instance.rightR)) { part1.transform.Rotate(0, Time.deltaTime * rotSpeed, 0); } } /// /// 主臂控制 /// protected virtual void MainArmControl() { if (!ctrlDown && Input.GetKey(PowerManager.Instance.down)) { part2.transform.Rotate(Time.deltaTime * rotSpeed, 0, 0); } else if (!ctrlDown && Input.GetKey(PowerManager.Instance.up)) { part2.transform.Rotate(-Time.deltaTime * rotSpeed, 0, 0); } } /// /// 二级臂控制 /// protected virtual void SecondArmControl() { } /// /// 平台控制 /// protected virtual void PlatformControl() { } /// /// 重置变换 /// protected virtual void OnReset() { part1.transform.localPosition = part1Pos; part1.transform.localEulerAngles = part1Rot; part2.transform.localPosition = part2Pos; part2.transform.localEulerAngles = part2Rot; part3.transform.localPosition = part3Pos; part3.transform.localEulerAngles = part3Rot; part4.transform.localPosition = part4Pos; part4.transform.localEulerAngles = part4Rot; part5.transform.localPosition = part5Pos; part5.transform.localEulerAngles = part5Rot; part6.transform.localPosition = part6Pos; part6.transform.localEulerAngles = part6Rot; part7.transform.localPosition = part7Pos; part7.transform.localEulerAngles = part7Rot; firstZero = true; firstFull = false; secondZero = true; secondFull = false; thirdZero = true; thirdFull = false; fourthZero = true; fourthFull = false; fifthZero = true; fifthFull = false; } }