热门IT资讯网

[unity3d]汽车的开关门动画播放

发表于:2024-11-26 作者:热门IT资讯网编辑
编辑最后更新 2024年11月26日,做到汽车的开关门,原本我是用代码进行控制,在update函数中只要让他旋转到一定的角度就OK了,但后来发现这样实现的效果并不好,所以就决定用动画来实现开关门的效果。操作步骤:1.Project->Ad

做到汽车的开关门,原本我是用代码进行控制,在update函数中只要让他旋转到一定的角度就OK了,但后来发现这样实现的效果并不好,所以就决定用动画来实现开关门的效果。

操作步骤:

1.Project->Add Tab->Animation 来创建动画,然后来创建帧动画。

2.创建完毕之后,可以给关门的最后一帧添加一个事件,但必须确保事件的函数脚本跟动画附着在同一个物体上,然后双击事件指定事件函数。

说明:由于开门关门就是一个重复的相反的动画,所以开门和关门就做了一个动画-开门的动画,关门只需要倒播就行了。

代码:

播放关门声音

using UnityEngine; using System.Collections;  public class playMusic : MonoBehaviour {     public AudioClip music = null;     private GameObject camera;      public float musicVolume = 0.6f;     private AudioSource music_A = null;         // Use this for initialization  void Start () {         //music = GameObject.Find("closedoor1");         camera = GameObject.Find("Main Camera");         music_A = camera.AddComponent();         //添加声音                         music_A.clip = music;         music_A.volume = musicVolume;    }               // Update is called once per frame      void Update () {                }       int i = 0;     void PlayMusic()     {         if (i != 0)         {             music_A.Play();         }         i++;         i = i % 2;     } }

开门脚本:
using UnityEngine; using System.Collections;  public class opendoor : MonoBehaviour {     public GameObject camera;    //左门     //private bool isOpenDoor1 = false;     //private bool openDoor1 = false;     //private bool closeDoor1 = false;     ////右门     //private bool isOpenDoor2 = false;     //private bool openDoor2 = false;     //private bool closeDoor2 = false;     ////左后门     //private bool isOpenDoor3 = false;     //private bool openDoor3 = false;     //private bool closeDoor3 = false;     ////右后门     //private bool isOpenDoor4 = false;     //private bool openDoor4 = false;     //private bool closeDoor4 = false;     /*      //前盖    private bool isOpenDoor3 = false;     private bool openDoor3 = false;     private bool closeDoor3 = false;      //后盖    private bool isOpenDoor4 = false;     private bool openDoor4 = false;     private bool closeDoor4 = false;      */           private int target1 = 0;   private int target2 = 0;        private int target3 = 0;        private int target4 = 0;     int flag1 = 0;     int flag2 = 0;  int flag3 = 0;  int flag4 = 0;     Ray ray;     RaycastHit hitobj;     private GameObject door; //左门    private GameObject door2; //右门  private GameObject door3; //左后门         private GameObject door4; //右后门      float animSpeed = 0.5f;            /*      private GameObject frontGate; //前盖子     private GameObject behindGate; //后盖子    */              // Use this for initialization  void Start () {         camera = GameObject.Find("Main Camera");              /*         doorl = GameObject.Find("doorL");//左门              door2 = GameObject.Find("doorR");//右门         frontGate = GameObject.Find("frontGate");//前盖                 behindGate = GameObject.Find("behindGate");//后盖               */              door = GameObject.Find("doorL1"); //左前门               door.AddComponent();                 door2 = GameObject.Find("doorR1"); //右前门              door2.AddComponent();                door3 = GameObject.Find("doorL2"); //左后门              door3.AddComponent();                door4 = GameObject.Find("doorR2"); //右后门              door4.AddComponent();                //camera = GameObject.Find("MainCamera");                      ////添加声音                        //music_A = camera.AddComponent();         //music_A.clip = music;         //music_A.volume = musicVolume;  }      //public AudioClip music = null;     //public float musicVolume = 0.6f;     //private AudioSource music_A = null;             float n = 0.06f;     int t = 0;    // Update is called once per frame     void Update()     {          move();         //画出射线         ray = Camera.main.ScreenPointToRay(Input.mousePosition);         if (Input.GetMouseButtonDown(0))         {             //鼠标点击车门             if (Physics.Raycast(ray, out hitobj, 1000))             {                 print("ddd");                 Debug.DrawLine(ray.origin, hitobj.point);                 //左车门                 if (hitobj.collider.name == "doorL1")                 {                     print("111");                     //开门                     if (flag1 == 0)                     {                         print("anim");                         door.animation["doorFL"].speed = animSpeed * 1.0f;                         door.animation.Play("doorFL");                         //openDoor1 = true;                         //closeDoor1 = false;                     }                     else                     {                         if (!door.animation.isPlaying)                         {                             door.animation["doorFL"].time = door.animation["doorFL"].length;                             door.animation["doorFL"].speed = -1.0f * animSpeed;                             door.animation.Play("doorFL");                         }                         else                         {                             door.animation["doorFL"].speed = -1.0f * animSpeed;                             door.animation.Play("doorFL");                         }                         //music_A.Play();                         //if (!door.animation.isPlaying)                         //{                         //    print("music");                         //    music_A.Play();                         //}                         //StartCoroutine(closeDoorVoice());                         //closeDoor1 = true;                         //openDoor1 = false;                     }                      flag1++;                     flag1 %= 2;                 }                 //右车门                 if (hitobj.collider.name == "doorR1")                 {                     print(222);                     if (flag2 == 0)                     {                         door2.animation["doorFR"].speed = animSpeed * 1.0f;                         door2.animation.Play("doorFR");                         //openDoor2 = true;                         //closeDoor2 = false;                     }                     else                     {                         if (!door2.animation.isPlaying)                         {                             door2.animation["doorFR"].time = door2.animation["doorFR"].length;                             door2.animation["doorFR"].speed = -1.0f * animSpeed;                             door2.animation.Play("doorFR");                         }                         else                         {                             door2.animation["doorFR"].speed = -1.0f * animSpeed;                             door2.animation.Play("doorFR");                         }                         //closeDoor2 = true;                         //openDoor2 = false;                     }                      flag2++;                     flag2 %= 2;                 }                 //左后车门                 if (hitobj.collider.name == "doorL2")                 {                     print(222);                     if (flag3 == 0)                     {                         door3.animation["doorBL"].speed = animSpeed * 1.0f;                         door3.animation.Play("doorBL");                         //openDoor3 = true;                         //closeDoor3 = false;                     }                     else                     {                         if (!door3.animation.isPlaying)                         {                             door3.animation["doorBL"].time = door3.animation["doorBL"].length;                             door3.animation["doorBL"].speed = -1.0f * animSpeed;                             door3.animation.Play("doorBL");                         }                         else                         {                             door3.animation["doorBL"].speed = -1.0f * animSpeed;                             door3.animation.Play("doorBL");                         }                         //closeDoor3 = true;                         //openDoor3 = false;                     }                      flag3++;                     flag3 %= 2;                 }                 //右车门                 if (hitobj.collider.name == "doorR2")                 {                     print(222);                     if (flag4 == 0)                     {                         door4.animation["doorBR"].speed = animSpeed * 1.0f;                         door4.animation.Play("doorBR");                         //openDoor4 = true;                         //closeDoor4 = false;                     }                     else                     {                         if (!door4.animation.isPlaying)                         {                             door4.animation["doorBR"].time = door4.animation["doorBR"].length;                             door4.animation["doorBR"].speed = -1.0f * animSpeed;                             door4.animation.Play("doorBR");                         }                         else                         {                             door4.animation["doorBR"].speed = -1.0f * animSpeed;                             door4.animation.Play("doorBR");                         }                         //closeDoor4 = true;                         //openDoor4 = false;                     }                      flag4++;                     flag4 %= 2;                 }             }         }                   //if (openDoor1)                 //{                 //    print(11);                 //    //开门                 //    if (target1 < 45 && !isOpenDoor1)                 //    {                 //        door.transform.Rotate(Vector3.forward, 1);                 //        target1 = target1 + 1;                 //    }                 //    else                 //    {                 //        // move();                 //        isOpenDoor1 = true;                 //        music_A.Play();                 //    }                 //}                 //if (closeDoor1)                 //{                 //    print(00);                 //    //关门                 //    if (isOpenDoor1 && target1 > 0)                 //    {                 //        door.transform.Rotate(-Vector3.forward, 1);                 //        target1 -= 1;                 //    }                 //    else                 //    {                 //        //music_A.Play();                 //        isOpenDoor1 = false;                 //    }                 //}                 //开右门                 //if (openDoor2)                 //{                 //    print(11);                 //    //开门                 //    if (target2 < 45 && !isOpenDoor2)                 //    {                 //        door2.transform.Rotate(Vector3.forward, 1);                 //        target2 = target2 + 1;                 //    }                 //    else                 //    {                 //        // move();                 //        isOpenDoor2 = true;                 //        music_A.Play();                 //    }                 //}                 //if (closeDoor2)                 //{                 //    //关门                 //    if (isOpenDoor2 && target2 > 0)                 //    {                 //        door2.transform.Rotate(-Vector3.forward, 1);                 //        target2 -= 1;                 //    }                 //    else                 //    {                  //        isOpenDoor2 = false;                 //    }                 //}                 ////开左后门                 //if (openDoor3)                 //{                 //    //开门                 //    if (target3 < 45 && !isOpenDoor3)                 //    {                 //        door3.transform.Rotate(Vector3.forward, 1);                 //        target3 = target3 + 1;                 //    }                 //    else                 //    {                 //        // move();                 //        isOpenDoor3 = true;                 //        music_A.Play();                 //    }                 //}                 //if (closeDoor3)                 //{                 //    //关门                 //    if (isOpenDoor3 && target3 > 0)                 //    {                 //        door3.transform.Rotate(-Vector3.forward, 1);                 //        target3 -= 1;                 //    }                 //    else                 //    {                 //        isOpenDoor3 = false;                 //    }                 //}                 ////开右门                 //if (openDoor4)                 //{                 //    //开门                 //    if (target4 < 45 && !isOpenDoor4)                 //    {                 //        door4.transform.Rotate(Vector3.forward, 1);                 //        target4 = target4 + 1;                 //    }                 //    else                 //    {                 //        // move();                 //        isOpenDoor4 = true;                 //        music_A.Play();                 //    }                 //}                 //if (closeDoor4)                 //{                 //    //关门                 //    if (isOpenDoor4 && target4 > 0)                 //    {                 //        door4.transform.Rotate(-Vector3.forward, 1);                 //        target4 -= 1;                 //    }                 //    else                 //    {                 //        isOpenDoor4 = false;                 //    }                 //}     }      //IEnumerator closeDoorVoice()     //{     //    yield return new WaitForSeconds(door.animation["doorFL"].time);     //    //music_A.Play();     //}      //void changeSpeed(float target,GameObject obj,float n = 0.3f,int t = 0)     //{     //    doorl.transform.Rotate(Vector3.forward, n*(++t));     //    target1 = 0.5*n*t*t;     //}     //界面的前后左右上下移动     void move()     {         //前移         if (Input.GetKey(KeyCode.W))         {             camera.transform.Translate(transform.forward);         }         //后移         if (Input.GetKey(KeyCode.S))         {             camera.transform.Translate(-transform.forward);         }         //左移         if (Input.GetKey(KeyCode.A))         {             camera.transform.Translate(-transform.right);         }         //右移         if (Input.GetKey(KeyCode.D))         {             camera.transform.Translate(transform.right);         }         //上         if (Input.GetKey(KeyCode.Q))         {             camera.transform.Translate(transform.up);         }         //下         if (Input.GetKey(KeyCode.E))         {             camera.transform.Translate(-transform.up);         }               //调整仰视视角                if(Input.GetKey(KeyCode.Z))             {                       camera.transform.Rotate(Vector3.right);                 }               //调整俯视视角                if(Input.GetKey(KeyCode.C))             {                       camera.transform.Rotate(-Vector3.right);                        }     } } 


0