[unity3d]汽车的开关门动画播放
admin
2023-01-20 18:23:20
0

做到汽车的开关门,原本我是用代码进行控制,在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);	 		}     } } 


相关内容

热门资讯

一举创下3项世界纪录,中国自主... 【环球时报报道 记者 郭媛丹】21日上午,中船集团旗下中船澄西船舶修造有限公司为力拓集团建造的自主研...
试图把国内矛盾外引?专家解析菲... 【环球时报报道 记者 樊巍】21日上午,外交部边海司负责人就菲律宾在仁爱礁蓄意挑衅、袭击中国海警执法...
特朗普宣布两年后对仿制药征收1... △美国总统特朗普(资料图)当地时间7月21日,美国总统特朗普在社交媒体发文表示,自2026年8月1日...
美国贸易代表暗示将很快出台新关... 新华社纽约7月21日电(记者刘亚南) 美国贸易代表贾米森·格里尔21日在接受媒体采访时暗示,美国联邦...
中国空调“一机难求”,人民日报... 中国空调“一机难求”,创意产品持续热销,本报记者实地探访——消暑降温,欧洲民众为何追捧中国制造?(第...
美防长:对伊朗战争已耗资375... △美国国防部长赫格塞思(资料图)央视记者当地时间21日获悉,美国国防部长赫格塞思表示,美国对伊朗战争...
在全国抗议声中,泽连斯基解除乌... 据乌克兰媒体《基辅独立报》报道,乌克兰总统泽连斯基解除了乌克兰武装部队总司令瑟尔斯基的职务,并任命联...
也门胡塞武装:停靠沙特港口船只... 新华社科威特城7月21日电(记者尹炣)萨那消息:也门胡塞武装20日警告国际航运公司称,与沙特港口开展...
特朗普:胡塞武装若封锁红海,美... 新华社华盛顿7月21日电(记者黄强 徐剑梅)美国总统特朗普21日在白宫会见到访的黎巴嫩总统奥恩时表示...
AI第一城|GOAI世界人工智... 7月21日上午,GOAI世界人工智能开源大赛(Global Open-source AI Chall...