unity3d怎样设置游戏时间_unity3d游戏开发之从unity3d到eclipse - CSDN
  • using UnityEngine; using System.Collections; using System.Collections.Generic; using System;public class TimeMgr : MonoBehaviour { private static TimeMgr mInstance;... public static TimeMgr Insta

    本文固定链接:http://blog.csdn.net/u013108312/article/details/54378613

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using System;
    
    public class TimeMgr : MonoBehaviour 
    {
        private static TimeMgr mInstance;
        public static TimeMgr Instance
        {
            get
            {
                return mInstance;
            }
        }
    
        public delegate void Interval();
        private Dictionary<Interval, float> mDicinterval = new Dictionary<Interval, float>();
    
        public void AddInterval(Interval interval,float time)
        {
            if (null != interval)
            mDicinterval[interval] = Time.time + time;
        }
    
        public void RemoveInterval(Interval interval)
        {
             if (null != interval)
             {
                 if (mDicinterval.ContainsKey(interval))
                 {
                     mDicinterval.Remove(interval);
                 }
             }
        }
    
    
        // Awake is called when the script instance is being loaded.
        void Awake() 
        {
            mInstance = this;
        }
    
        void Update()
        {
            if(mDicinterval.Count > 0)
            {
                List<Interval> remove = new List<Interval>();
                foreach(KeyValuePair<Interval,float> KeyValue in mDicinterval)
                {
                    if (KeyValue.Value <= Time.time)
                    {
                        remove.Add(KeyValue.Key);
                    }
                }
                for (int i = 0; i < remove.Count;i++ )
                {
                    remove[i]();
                    mDicinterval.Remove(remove[i]);
                }
            }
    
        }
    }
    

    Test

    void Start()
        {
            TimeMgr.Instance.AddInterval(TestCall1, 3f);
        }
    void TestCall1()
        {
            Debug.LogError("TestCall_1");
            TimeMgr.Instance.AddInterval(TestCall2, 2f);
        }
    
        void TestCall2()
        {
            Debug.LogError("TestCall_2");
            TimeMgr.Instance.AddInterval(TestCall1, 5f);
    
        }

    本文固定链接:http://blog.csdn.net/u013108312/article/details/54378613

    展开全文
  • Unity3d 中可以通过代码设置 来限定游戏帧率。Application.targetFrameRate=-1;设置为 -1 表示不限定帧率。一般在手机游戏中我们限定帧率为30 就OK了。

    在Unity3d 中可以通过代码设置 来限定游戏帧率。

    Application.targetFrameRate=-1;

    设置为 -1 表示不限定帧率。 转自http://blog.csdn.net/huutu

    一般在手机游戏中我们限定帧率为30 就OK了。

    Application.targetFrameRate=30;

    但是把这个代码添加到工程之后,在Unity中运行起来发现并没有什么卵用。。。。

    转自http://blog.csdn.net/huutu

    于是到官网查看资料

    http://docs.unity3d.com/ScriptReference/Application-targetFrameRate.html

    Application.targetFrameRate
    public static int targetFrameRate;
    Description
    
    Instructs game to try to render at a specified frame rate.
    
    Setting targetFrameRate to -1 (the default) makes standalone games render as fast as they can, 
    
    and web player games to render at 50-60 frames/second depending on the platform.
    
    Note that setting targetFrameRate does not guarantee that frame rate. 
    
    There can be fluctuations due to platform specifics, or the game might not achieve the frame rate because the computer is too slow.
    
    If vsync is set in quality setting, the target framerate is ignored, and the vblank interval is used instead. 
    
    The vBlankCount property on qualitysettings can be used to limit the framerate to half of the screens refresh rate 
    
    (60 fps screen can be limited to 30 fps by setting vBlankCount to 2)
    
    targetFrameRate is ignored in the editor.

    大意就是说:

    Application.targetFrameRate 是用来让游戏以指定的帧率运行,如果设置为 -1 就让游戏以最快的速度运行。

    但是 这个 设定会 垂直同步 影响。

    如果设置了垂直同步,那么 就会抛弃这个设定 而根据 屏幕硬件的刷新速度来运行。

    如果设置了垂直同步为1,那么就是 60 帧。

    如果设置了为2 ,那么就是 30 帧。


    点击 菜单  Editor -> ProjectSetting -> QualitySettings 来打开渲染质量设置面板。

    转自http://blog.csdn.net/huutu

    1、首先关掉垂直同步,如上图。

    设置帧率为100


    然后运行后的帧率是 100.



    2、设置垂直同步为1


    可以看到帧率为 60 帧左右跳动,完全无视了代码中的设定。

    转自http://blog.csdn.net/huutu

    3、设定垂直同步为 2


    可以看到帧率在 30帧左右跳动。

    转自http://blog.csdn.net/huutu

    在游戏中显示帧率代码:

    using UnityEngine;
    using System.Collections;
    using DG.Tweening;
    
    public class NewBehaviourScript : MonoBehaviour 
    {
    	private float m_LastUpdateShowTime=0f;	//上一次更新帧率的时间;
    
    	private float m_UpdateShowDeltaTime=0.01f;//更新帧率的时间间隔;
    
    	private int m_FrameUpdate=0;//帧数;
    
    	private float m_FPS=0;
    
    	void Awake()
    	{
    		Application.targetFrameRate=100;
    	}
    
    	// Use this for initialization
    	void Start () 
    	{
    		m_LastUpdateShowTime=Time.realtimeSinceStartup;
    	}
    	
    	// Update is called once per frame
    	void Update () 
    	{
    		m_FrameUpdate++;
    		if(Time.realtimeSinceStartup-m_LastUpdateShowTime>=m_UpdateShowDeltaTime)
    		{
    			m_FPS=m_FrameUpdate/(Time.realtimeSinceStartup-m_LastUpdateShowTime);
    			m_FrameUpdate=0;
    			m_LastUpdateShowTime=Time.realtimeSinceStartup;
    		}
    	}
    
    	void OnGUI()
    	{
    		GUI.Label(new Rect(Screen.width/2,0,100,100),"FPS: "+m_FPS);
    	}
    }
    

    官网文档中的最后一句……经测试在编辑器状态下是有效的。。
    展开全文
  • 今天要和大家分享的是基于Unity3D开发2D游戏,博主一直钟爱于国产武侠RPG,这个我在开始写Unity3D游戏开发系列文章的时候就已经说过了,所以我们今天要做的就是利用Unity3D来实现在2D游戏中人物的走动控制。...

            今天要和大家分享的是基于Unity3D开发2D游戏,博主一直钟爱于国产武侠RPG,这个我在开始写Unity3D游戏开发系列文章的时候就已经说过了,所以我们今天要做的就是利用Unity3D来实现在2D游戏中人物的走动控制。下面就请大家跟随我的一起来见证Unity3D强大的魅力吧。首先我们创建一个项目,创建新场景,我们首先创建一个Plane并将其命名为MainMap,然后我们在项目中添加一个Resources文件夹,将事先准备好的地图文件Map0复制到这个目录下,然后我们将这个图片拖拽到MainMap上,我们将MainMap的旋转参数Rotatiion设置为90,180,0,使其与摄像机垂直,然后将摄像机的Projection投影属性设置为 orthographic正交模式,这时我们就能够在屏幕中看到经典的余杭镇场景了。如果我们需要对场景进行进一步的优化的话,可以通过调整摄像机的投影面积大小和距离来实现。参数设置可以参考这里:



           接下来,我们再次创建一个Plane将其命名为Player,这就是我们今天要出场的角色李逍遥啦,和准备地图类似,我们将李逍遥的贴图直接拖拽到Player上。刚开始角色会比较大,和画面不协调,我们可以通过调整Scale参数来缩放我们的角色,调整到合适的范围。这里我们直接使用了一张完整的地图,在实际的游戏开发中,一个场景地图可能是由很多瓦片构成的,所谓瓦片,就是指被分割成若干个可以拼接起来的图片。我们知道,仙剑奇侠传作为一款经典的单机游戏,除了剧情以外,就是那些经典、动听的音乐啦,在Unity3D中实现音乐播放是很简单的事情,我们选定MainMap,为主场景添加一个AudioSource组件,并将背景音乐拖拽到AudioSource的AudioClip属性框中,选中Loop使其循环,接下来我们点击运行,运行效果如下图:


           接下类,就是今天的重头戏啦,我们今天的主要任务是通过Unity3D的2D帧动画绘制来实现人物的动画和控制,所以接下来我们在项目目录下增加一个Script文件下,新建一个叫做Person的脚本,该脚本封装了我们对人物角色的控制和帧动画的绘制方法。首先我们来准备一组素材:





               从名称的命名上,我们就可以看出这是角色在上下左右四个方向上的连续动画图片。下面,我们在Resources目录下创建下面的目录结构,并将上面的图片分别放在对应的文件夹下,我们在脚本中会引用下面的资源:


             下面开始编写脚本:

     

    using UnityEngine;
    using System.Collections;
    
    public class Person : MonoBehaviour {
    	//定义角色对象
    	private GameObject mHero;
    	//定义人物向上动画数组
    	private Object[] UpAnim;
    	//定义人物向下动画数组
    	private Object[] DownAnim;
    	//定义人物向左动画数组
    	private Object[] LeftAnim;
    	//定义人物向右动画数组
    	private Object[] RightAnim;
    	//当前帧索引
    	private int mFrameIndex;
    	//当前时间
    	private float mTotalTime;
    	//定义每秒帧数为10
    	private float mFPS=10;
    	//定义当前人物动画
    	private Object[] NowAnim;
    	private Object[] LastAnim;
    	//定义角色行动速度
    	private float mSpeed=5;
    	//角色当前状态
    	private PersonState mState=PersonState.Stand;
    	
    	//定义角色状态枚举
    	private enum PersonState
    	{
    	   Stand,
    	   Walk
    	}
    	
    	void OnGUI()
    	{
    	   GUI.Label(new Rect(10,10,180,40),"李逍遥位置:"+mHero.transform.position.ToString());
    	}
    	
    	void Start () 
    	{
    	   //获取人物
    	   mHero=GameObject.Find("Player");
    	   //获取动画数组
    	   UpAnim=Resources.LoadAll("UpAnim");
    	   DownAnim=Resources.LoadAll("DownAnim");
    	   LeftAnim=Resources.LoadAll("LeftAnim");
    	   RightAnim=Resources.LoadAll("RightAnim");
    	   //定义默认动画
    	   NowAnim=UpAnim;
    	   LastAnim=NowAnim;
    	}
    	
    	void FixedUpdate()
    	{
    	   //向左
    	   if(Input.GetKey(KeyCode.A))
    	   {
    	      SetAnimation(LeftAnim);
    	      this.mState=PersonState.Walk;
    	      mHero.transform.Translate(Vector3.right*Time.deltaTime*mSpeed);
    	   }
    	   //向右
    	   if(Input.GetKey(KeyCode.D))
    	   {
    	      SetAnimation(RightAnim);
    	      this.mState=PersonState.Walk;
    	      mHero.transform.Translate(Vector3.right*Time.deltaTime*(-mSpeed));
    	   }
    	   //向上
    	   if(Input.GetKey(KeyCode.W))
    	   {
    	      SetAnimation(UpAnim);
    	      this.mState=PersonState.Walk;
    	      mHero.transform.Translate(Vector3.forward*Time.deltaTime*(-mSpeed));
    	   }
    	   //向下
    	   if(Input.GetKey(KeyCode.S))
    	   {
    	      SetAnimation(DownAnim);
    	      this.mState=PersonState.Walk;
    	      mHero.transform.Translate(Vector3.forward*Time.deltaTime*mSpeed);
    	      Vector3 mHeroPos=mHero.transform.position;
    	   }
    	   DrawTexture(NowAnim);
    	}
    	
    	void Update () 
    	{
    	   //松开键位时
    	   if(Input.GetKeyUp(KeyCode.A) || Input.GetKeyUp(KeyCode.D) 
    	   || Input.GetKeyUp(KeyCode.S) || Input.GetKeyUp(KeyCode.W))
    	   {
    	      this.mState=PersonState.Stand;
    	   }
    	}
    	
    	void DrawTexture(Object[] mAnim)
    	{
    	   //如果角色当前状态为站立,则显示帧动画中的第一帧
    	   if(mState==PersonState.Stand)
    	   {
    	     mHero.renderer.material.mainTexture=(Texture)mAnim[0];
    	   }
    	   //否则绘制帧动画
    	   else
    	   {
    	      mTotalTime+=Time.deltaTime;
    	      if(mTotalTime>=1.0/mFPS)
    	      {
    	         mFrameIndex++;
    	         mTotalTime=0;
    	         if(mFrameIndex>=mAnim.Length)
    	         {
    	           mFrameIndex=0;
    	         }
    	      }
    	        mHero.renderer.material.mainTexture=(Texture)mAnim[mFrameIndex];
    	   }
    	}
    	
    	void SetAnimation(Object[] mAnim)
    	{
    	   NowAnim=mAnim;
    	   if(!LastAnim.Equals(NowAnim))
    	   {
    	      this.mFrameIndex=0;
    	      LastAnim=NowAnim;
    	   }
    	}
    }
    

             在上面的这部分脚本中,我们在Start()方法中加载了我们预先设定好的资源,然后在FixedUpdate()方法判断用户行为,并根据用户按下的键来确定要绘制的帧动画,我们假定每秒的帧数为10,则每帧显示的时间为0.1秒,如果从上一次刷新到现在的时间超过或者等于这个时间,则表示我们需要更新帧画面了。而当帧画面的索引和该帧动画数组内元素个数相等的时候,则意味着开始循环绘制这组帧动画。我们在上面定义了一个人物状态的枚举类型,这里只是简单的定义了两种类型,即Stand和Walk类型,当用户按下控制键时此类型的值为Walk,当用户松开控制键时此类型的值为Stand,和上一篇文章不同,这里调用的是 FixedUpdate()方法,而不是Update()方法,原因是Update()f方法更新的时间我们无法控制,而FixedUpdate()方法的时间则可以通过Edit->Project Setting->time->Fixed Timestep来指定,具体的大家可以自己阅读代码,这里就不多说了,剩下的事情就是把脚本绑定到Player上,我们运行一下:



             就目前这个解决方案而言,存在以下几个问题:

             1、人物范围控制,换句话说就是如何保证人物不会从这些房屋、篱笆上直接穿过去

             2、人物向下移动时,会钻到地底下

             3、摄像机如何跟随人物实现平移

             4、小地图的实现

              5、场景地图范围控制

              针对以上问题,伴随着博主学习Unity3D的深入,我们将在后面的文章中一一为大家解决,请大家关注我的博客,谢谢!


    展开全文
  • 大家晚上好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/...所以,今天的博客的主题就是《Unity3D游戏开发之跑酷游戏项目讲解》。从博主自身来考虑这件事情,当你选择做自己热爱的事情的时

           大家好,我是秦元培。我参加了CSDN2014博客之星的评选,欢迎大家为我投票,同时希望在新的一年里大家能继续支持我的博客!


           大家晚上好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei,终于到了更新博客的时间,从昨天下午开始,博主开始设计一个跑酷的游戏,到晚上睡觉前这个游戏已经基本完成。博主今天早上七点钟就起来了,到早上十点钟终于把整个游戏写完了。所以,今天的博客的主题就是《Unity3D游戏开发之跑酷游戏项目讲解》。

            从博主自身来考虑这件事情,当你选择做自己热爱的事情的时候,你的内心一定是充满激情和勇气的,你愿意看到自己的努力,你愿意看到自己的付出,我们成长是为了促进自我对认知的不断完善,所以我们应该以一种虔诚、谦恭的态度来对待我们的生命,我们或许无法选择出身,但我们可以选择向自己喜欢的生活去努力。或许我和这些人真的不是一个世界的人吧,很多事情在今天都给出了结局,对于这种人我已经没有再尝试与之交流的想法了,或许大学四年平平淡淡,留给我的只有自己才能体会的孤独吧。好了,不说我的事情了,我们正式开始今天的内容吧!


           一、游戏策划

         游戏采用2D界面,角色从左到右奔跑,在路段中随机生成障碍物和金币,玩家需要使用跳跃功能躲开障碍物,在游戏中玩家收集的金币数目越多,奔跑的距离越长,玩家的得分就越高。我们最终实现的界面效果如图所示,首先我们来讲一下游戏的原理,我们这里这里采用的方法是路段固定,移动摄像机的方法。换句话说,当角色开始移动后,摄像机和场景跟随角色缓缓向右移动。当角色跑完每一个路段距离的2/3时,计算下一路段的位置,并在该位置生成一个新的路段,这样在游戏场景中可以产生无限远的路段,当某一路段离开摄像机视野时,立即将其销毁。于此同时,我们在每一个路段上随机产生障碍物和金币,然后对角色做碰撞检测即可。



             二、角色控制

         角色控制这里,我们只关注角色的状态,即角色是处于奔跑状态还是死亡状态。通过这一状态,我们针对角色采取不同的处理方式。如果角色处于奔跑状态,则更新角色位置、摄像机位置、背景位置,否则角色将在被障碍物撞到以后倒地死亡。我们来一起看下面的脚本:

    using UnityEngine;
    using System.Collections;
    
    public class Player : MonoBehaviour {
    
    	//定义角色移动速度
    	public float mMoveSpeed=2.5F;
    
    	//摄像机
    	private Transform mCamera;
    	//背景图片
    	private Transform mBackground;
    
    	//角色是否在奔跑
    	private bool isRuning=true;
    	//场景中路段总数目
    	private int mCount=1;
    
    	//路段预设
    	public GameObject CubeWay;
    
    	//死亡动画播放次数
    	private int DeathCount=0;
    
    	//收集的金币数目
    	private int mCoinCount=0;
    	public int CoinCount {
    		get {
    			return mCoinCount;
    		}
    	}
    
    	//当前奔跑距离
    	private int mLength=0;
    	public int Length {
    		get {
    			return mLength;
    		}
    	}
    
    	//当前得分
    	private int mGrade=0;
    	public int Grade {
    		get {
    			return mGrade;
    		}
    	}
    
    	void Start () 
    	{
    	    //获取相机
    		mCamera=Camera.main.transform;
    		//获取背景
    		mBackground=GameObject.Find("Background").transform;
    	}
    
    	void Update () 
    	{
    		//如果角色处于奔跑状态则移动角色、相机和场景
    		if(isRuning)
    		{
    			Move();
    			CreateCubeWay();
    			Jump();
    			UpdateData();
    		}else
    		{
    			Death();
    		}
    	}
    
    	/// <summary>
    	/// 更新玩家的游戏数据
    	/// </summary>
    	private void UpdateData()
    	{
    		//计算奔跑距离
    		mLength=(int)((transform.position.x+25)*25);
    		//计算玩家得分
    		mGrade=(int)(mLength*0.8+mCoinCount*0.2);
    	}
    
    
    	///角色死亡
    	private void Death()
    	{
    		//为避免死亡动画在每一帧都更新,使用DeathCount限制其执行
    		if(DeathCount<=1)
    		{
    		   //播放死亡动画
    		   transform.animation.Play("Lose");
    		   //次数+1
    		   DeathCount+=1;
    		   //保存当前记录
    		   //PlayerPrefs.SetInt("这里填入一个唯一的值",Grade);
    		}
    	}
    
    	private void Jump()
    	{
    		//这里不能使用刚体结构,所以使用手动方法实现跳跃
    		if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButton(0))
    		{
    			while(transform.position.y<=1)
    			{
    				float y=transform.position.y+0.02F;
    				transform.position=new Vector3(transform.position.x,y,transform.position.z);
    				transform.animation.Play("Jump");
    			}
    			StartCoroutine("Wait");
    		}
    	}
    
    	IEnumerator Wait()
    	{
    		yield return new WaitForSeconds(0.8F);
    		//角色落地继续奔跑
    		while(transform.position.y>0.125F)
    		{
    			float y=transform.position.y-0.02F;
    			transform.position=new Vector3(transform.position.x,y,transform.position.z);
    			transform.animation.Play("Run");
    		}
    	}
    
    	//移动角色、相机和场景
    	private void Move()
    	{
    		//让角色从左到右开始奔跑
    		transform.Translate(Vector3.forward * mMoveSpeed * Time.deltaTime);
    		//移动摄像机
    		mCamera.Translate(Vector3.right * mMoveSpeed * Time.deltaTime);
    		//移动背景
    		mBackground.Translate(Vector3.left * mMoveSpeed * Time.deltaTime);
    	}
    
    	//创建新的路段
    	private void CreateCubeWay()
    	{
    		//当角色跑完一个路段的的2/3时,创建新的路段
    		//用角色跑过的总距离计算前面n-1个路段的距离即为在第n个路段上跑过的距离
    		if(transform.position.x+30-(mCount-1)*50 >=50*2/3)
    		{
    			//克隆路段
    			//这里从第一个路段的位置开始计算新路段的距离
    			GameObject mObject=(GameObject)Instantiate(CubeWay,new Vector3(-5F+mCount * 50F,0F,-2F),Quaternion.identity);
    			mObject.transform.localScale=new Vector3(50F,0.25F,1F);
    			//路段数加1
    			mCount+=1;
    		}
    	}
    
    	void OnTriggerEnter(Collider mCollider)
    	{
    		//如果碰到的是金币,则金币消失,金币数目加1;
    		if(mCollider.gameObject.tag=="Coin")
    		{
    			Destroy(mCollider.gameObject);
    			mCoinCount+=1;
    		}
    		//如果碰到的是障碍物,则游戏结束
    		else if(mCollider.gameObject.tag=="Rock")
    		{
    			isRuning=false;
    		}
    	}
    }
    
          在这里我们需要关注下面的内容:

          1、Update()方法及Move()、Jump()、CreateCubeWay()、Death()方法,因为这是角色在奔跑过程中的核心控制方法。

          2、CreateCubeWay()方法的作用是在玩家跑完每一个路段的2/3时,在指定的位置生成新的路段。假设当前场景中共有n个路段,玩家在每一个路段上奔跑的距离=用玩家从起点到当前位置的长度-前面n-1个路段的距离。通过这种方法我们可以判断玩家在每一个路段上的相对位置。在确定了这个位置后,我们将其与路段长度的2/3比较,如果大于或者等于这个距离,则生成新的路段,且第n+1个路段的位置等于第一个路段的位置+n个路段的总长度。由此,我们就实现了在指定的位置生成新的路段,使场景中源源不断的生成新的路段。

         3、玩家收集金币和障碍物的碰撞检测都是在OnTrigger方法中实现的,我们使用了一个bool类型的标识变量isRuning来表示角色的状态,此状态直接影响Update()方法的执行,大家可以从代码中自己去寻找。

         4、这里角色的跳跃是通过脚本模拟出来的,因为这里使用刚体似乎不能实现博主想实现的那种效果,大家可以参考Jump()方法。


       
     三、场景布设

        这里我们2D平面作为游戏的背景,使用NGUI来显示界面文字内容。在Unity3D场景中使用NGUI需要相机和Anchor设置为同一层级,并设置相机的景深,这样两个相机系统都能工作了。路段CubeWay是一个预设体Cube,负责在CubeWay上生成金币和障碍物,该对象关联在Player脚本上。玩家角色是一个3D的人物模型,最终场景布设效果如图所示:



        四、预设定义

       在这个游戏中需要重用的对象有路段CubeWay、金币Coin、障碍物Rock,我们分别来看他们的脚本:

    using UnityEngine;
    using System.Collections;
    
    public class CubeWay : MonoBehaviour {
    
    	//在道路上显示的金币、障碍物
    	public GameObject[] mObjects;
    
    
    	void Start () 
    	{
    
    	   //在每段路段上随机产生20到50个物品
    	   int mCount=Random.Range(20,50);
    	   for(int i=0;i<mCount;i++)
    	   {
    		  Instantiate(mObjects[0],new Vector3(Random.Range(this.transform.position.x-25,this.transform.position.x+25),1F,-2F),
    			            Quaternion.Euler(new Vector3(90F,180F,0F)));
    	   }
    	   //在每段路段上随机产生5到10个障碍物
    	   mCount=Random.Range(5,10);
    	   for(int i=0;i<mCount;i++)
    	   {
    		  Instantiate(mObjects[1],new Vector3(Random.Range(this.transform.position.x-25,this.transform.position.x+25),0.5F,-2F),
    				        Quaternion.Euler(new Vector3(90F,180F,0F)));
    	   }
    	}
    
    	//当离开摄像机视野时立即销毁
    	void OnBecameInvisible()
    	{
    		Destroy(this.gameObject);
    	}
    
    }
    

    using UnityEngine;
    using System.Collections;
    
    public class Coin : MonoBehaviour {
    
    	//这里是一个控制金币旋转的脚本
    
    	void Update () 
    	{
    		transform.Rotate(Vector3.forward * 50F * Time.deltaTime);
    	}
    
    	//当离开摄像机视野时立即销毁
    	void OnBecameInvisible()
    	{
    		Destroy(this.gameObject);
    	}
    }
    

    using UnityEngine;
    using System.Collections;
    
    public class Rock : MonoBehaviour {
    
    	//当离开摄像机视野时立即销毁
    	void OnBecameInvisible()
    	{
    		Destroy(this.gameObject);
    	}
    }
    

         其中CubeWay就是一个Cube、Coin是一个圆柱体,为了让金币看起来好看点,我们让金币在空中旋转起来、Rock就是一个平面贴图。这里Rock、Coin将绑定到CubeWay的mObjects。

        

        五、游戏管理

       最后是界面的数据更新啦,脚本定义如下:

    using UnityEngine;
    using System.Collections;
    
    public class GameManager : MonoBehaviour {
    
    	//游戏界面根节点
    	private Transform GameUI;
    	//玩家
    	private Transform mPlayer;
    	//界面金币数及距离
    	private Transform mCoins;
    	private Transform mLength;
    
    	void Start () 
    	{
    		GameUI=GameObject.Find("2DUI").transform;
    		mPlayer=GameObject.Find("People").transform;
    		mCoins=GameUI.FindChild("Anchor/Panel/Coins").transform;
    		mLength=GameUI.FindChild("Anchor/Panel/Length").transform;
    	}
    
    	void Update () 
    	{
    		mCoins.GetComponent<UILabel>().text="金币:" + mPlayer.GetComponent<Player>().CoinCount;
    		mLength.GetComponent<UILabel>().text="距离:" + mPlayer.GetComponent<Player>().Length;
    	}
    }
    

         好了,到现在整个游戏已经讲解完了,相信大家已经迫不及待地想看看最终的效果了,好,我们一起来看看吧:




             希望今天的内容大家能够喜欢,希望大家继续支持和关注我的博客,如果我们对今天的例子稍作修改,就可以实现3D版的跑酷,经典的《神庙逃亡》游戏就是基于Unity3D游戏引擎开发的。


             每日箴言:要有美好的希望,并全力以赴去追求;要有远大的梦想,并全力以赴去实现。




       喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei
       转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/25510579

      源码下载

       

      


    
    展开全文
  • 在上一篇文章[Unity3D]Unity3D游戏开发之角色控制漫谈>一文中,博主与大家分享自己在角色控制方面的一些感悟。今天呢,我们继续来探讨Unity3D角色控制的内容,今天博主将解决在上一篇文章中没有解决的问题,即自由...
  • 今天想和大家分享的内容是RPG游戏游戏存档的实现,因为最近在做一个RPG游戏的项目,所以遇到这个问题就随时记录下来,在对知识进行总结的同时可以将这种思路或者想法分享给大家,这是一件快乐而幸运的事情。...
  • 这是一个比较综合的项目,希望对大家学习Unity3D有所帮助,我会在文章最后给出项目代码。作为一个游戏而言,游戏策划十分重要,所以在开始今天的文章之前,我们先来了解下这个项目的策划。我们的玩家是一个飞机,
  •  在前面的文章中,我们分别实现了一个自定义的角色控制器《[Unity3D]Unity3D游戏开发之仿仙剑奇侠传角色控制效果》和角色死亡的效果《[Unity3D]Unity3D游戏开发之仿仙剑奇侠传角色死亡效果实现》。今天我们继续来做...
  • Unity3D获取游戏时间,并且显示成秒表的形式,用Debug.Log显示。
  • Unity3D游戏优化方案

    2017-04-06 06:23:31
    作为一个入行不足三年的攻城狮来讲,讲引擎中的优化,经验确实不足,unity3D引擎作为一款侧重移动端游戏开发引擎来讲,优化游戏是确实有必要的,毕竟他要适配所有机型的前提下又要保证游戏画面的清晰度,特效的绚丽...
  • 在本系列中,我们将在Unity3D中使用丰富的控件创建一个简单的3D游戏。 第一部分将介绍如何设置Unity3D。 第二部分将教您如何使用C#控制Unity3D。 本系列的第三篇也是最后一篇文章将深入研究使用Unity3D实际制作一...
  • 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的...今天博主想和大家分享的是ACT游戏中的三连击效果的实现,由于Unity3D目前存在Animation和Animator两种类型的动画组件,因此本文将分别讲这两种类型的动
  • 游戏开发者眼中的Unity 3D网页游戏测评报告
  • Unity3d之AR小游戏

    2018-06-20 12:52:58
    Unity3d之AR小游戏 游戏简介 一个控制小飞龙躲避障碍物的小型AR跑酷游戏,有两个虚拟按钮可以控制飞龙向上或向下移动。 效果 静态图 动态图(太大传不上,见视频) AR模型识别 配置步骤 ...
  • 在两个月前曾写了一篇《【Unity3D实战】零基础一步一步教你制作跑酷类游戏(1)》,里面一步一步演示了制作跑酷类游戏,然而由于时间原因,只写到了让角色往前移动为止。这个坑一直没有时间去填,(虽然也没多少人看...
  • 怎样使用Unity3D开发Flappy Bird游戏 这是一个教你怎样使用Unity3D制作Tappy Plane(Flappy Bird克隆版)的教程。如果你是有一些C#编程经验的Unity 2D游戏开发者,这个教程正适合你。现在让我们开始吧。
  • 本课程是 Unity 3D 系列教程,目标是带领读者搭建一个商业游戏的网络架构设计,该架构设计是游戏的核心技术,将采用 Unity 2017.2 最新版本作为开发工具。内容分为 UI 架构、技能架构、服务器和网络同步四大部分,共...
  • unity 游戏时间显示

    2020-07-30 23:30:14
    unity 游戏时间显示,直接拖到UI的text上就能运行,非常方便
  • 本篇内容是如何获取到运行时间,然后实时显示出来 二、原文 原文链接:https://jingyan.baidu.com/article/fdbd4277aba1eab89f3f4850.html 原文作者:qxkzuiai512 原文出处:百度经验 三、正文 效果如下 新建脚本...
  • 众所周知,Unity3D是一个强大的跨平台游戏引擎,和大多数喜欢Unity的朋友一样,博主在体验了Unity强大的跨平台能力后,被深深地震撼了,试想以前我们如果要开发一款游戏的话,我们需要对DX、OpenGL等图形库
1 2 3 4 5 ... 20
收藏数 17,939
精华内容 7,175
关键字:

unity3d怎样设置游戏时间