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

做到汽车的开关门,原本我是用代码进行控制,在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<AudioSource>();
        //添加声音
        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<BoxCollider>();
		door2 = GameObject.Find("doorR1"); //右前门
		door2.AddComponent<BoxCollider>();
		door3 = GameObject.Find("doorL2"); //左后门
		door3.AddComponent<BoxCollider>();
		door4 = GameObject.Find("doorR2"); //右后门
		door4.AddComponent<BoxCollider>();
		//camera = GameObject.Find("MainCamera");

        ////添加声音
        //music_A = camera.AddComponent<AudioSource>();
        //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);
		}
    }
}
时间: 2024-09-12 14:51:27

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

动画播放以及射线查询的Unity3d脚本

using UnityEngine; using System.Collections; public class SampleMoveScriptC : MonoBehaviour { public float speed = 3.0f; public float rotatationSpeed = 200.0f; private float curSpeed = 0.0f; private GameObject obj = null; private Vector3 point; // Us

【ANDROID游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2ME的游戏类库与ANDROID游戏开发!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/361.html 由于写书的缘故,博文更新缓慢,大家体谅,今天针对群内常提出动画实现的问题来进行一个详细讲述: 此章节适合没有做过游戏开发的同学学习! 做过Android软件的童鞋们,在学习游戏开发的时候,思维总是被固定在了Android系统组件上!比如动画实现总想着利用BitmapDrawable.Animatio

用pb实现Flash动画播放

1. 前言 PowerBuilder(以下简称PB)是一种面向对象.快速开发数据库的开发平台,常用于数据库的开发,FLASH动画不仅包含动画,还可有声音等形成非常形象的动感画面,在PB开发的程序中加入FLASH动画,使得程序更具活力,为用户创造一个更加友好的交互式界面.下面介绍在PB8.0数据库编程中用Flash 5提供的OLE控件"SwFLASH.ocx"实现动画播放的一种方法. 2. PB中OLE控件的使用 在PB8.0环境下使用"SwFLASH.ocx"控件,

Focusky怎么设置动画播放顺序

  Focusky怎么设置动画播放顺序: 1.打开工程,点击"动画"按钮进入动画编辑界面. 2.进入动画编辑界面后,自定义对象动画按指定顺序依次播放顺序. 进入动画编辑界面后,选中对象添加动画效果.在编辑界面右侧"动画"项,设置动画演示为"点击"."与上一个一起"或"在上一个之后".动画效果添加好后,如果希望调整下播放顺序,则直接在右侧拖动添加的动画重新排序即可. 多个对象动画设置好之后,点击编辑界面右下方

C4D怎么做一段花开的动画效果?

  C4D怎么做一段花开的动画效果?           1.首先,创建花瓣.我这里是用简单的方法做的,建模的话还可以用其他方法做哦!开始了,新建一个圆弧,调整开始和结束角度以及半径点数量等参数. 2.然后,给其旋转,让她作为圆弧的父物体,然后调整角度,使其更个单片的花瓣. 3.接下来,给花瓣添加一定的厚度(添加厚度可以给其添加布料曲面也可以添加爆炸FX等,但是用布料曲面添加完厚度之后,在给物体添加纹理贴图的时候容易出错,所以这里我用的是爆炸FX),具体参数看截图.选中爆炸FX和旋转,然后按Al

ios-在动画播放期间让按钮可以使用

问题描述 在动画播放期间让按钮可以使用 在应用中的CAKeyframeAnimation,代码如下: -(IBAction)start:(id)sender { UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:CGPointMake(600 150)]; [path addLineToPoint:CGPointMake(600 300)]; [path addLineToPoint:CGPointMake(450

android 多次按下返回键,导致退出多个Activity,动画播放不完全

问题描述 android 多次按下返回键,导致退出多个Activity,动画播放不完全 activity之间切换有过场动画,但是如果快速的按下返回键,动画没有播放完全就会activity退出.如何才能正常的播放动画,可以监听Activity的动画吗? 解决方案 你都返回了,还播放个啥呢? 解决方案二: 你可以监听动画结束吗?如果可以就在动画结束后才让按返回键有效 解决方案三: 你可以监听动画结束吗?如果可以就在动画结束后才让按返回键有效 解决方案四: 你可以监听动画结束吗?如果可以就在动画结束后

宝马汽车浑厚的关门声,计算器按钮柔和的敲击声

宝马汽车浑厚的关门声,计算器按钮柔和的敲击声,这些细节令人吸引. 魔鬼藏在细节里这句老话的事实是,魔术藏在细节里.除了原材料以外,产品的品质还包括哪些构成?-对细节的关注. 除了"皮革"的选择以外,山寨版的Gucci手袋跟原版还有哪些区别呢?缝制.内衬.拉链等等.简而言之,品质隐藏在大多数人不太能注意到的细节当中-除非你接触了产品并仔细观察.正是那些技艺令奢侈品牌经久不衰,经受住了潮流趋势的考验. 品牌与其所代表的产品与服务并无二致.疯狂寻找一个"独一无二的市场定位陈述&qu

手动挡汽车如何开省油的经验分享_生活健康

怎样开车最省油 一.新车磨合 新车在最初的3000公里行驶里程之内一定要磨合.新车磨合要注意时速控制在每小时80公里以内:尽量减少急加速.急减速. 二.合理保养汽车--定期保养 要知道车况良好的汽车可省油15%到20%. 1.空气滤清器.汽油滤清器.机油滤清器:每行驶5000公里以上配件都需要更换,因为空滤堵塞会引起气量减少,导致汽油燃烧不充分,降低燃油效率,而汽油滤清器的阻塞也会使发动机工作异常. 2.机油:加机油需要适量,注意机油标尺所标示的刻度.机油太多将曲轴淹没,增大阻力:机油太少则无法