2014-05-11 00:24:02 qinyuanpei 阅读数 19035
  • unity3D游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12775 人正在学习 去看看 宋晓波

       大家好,我是秦元培。我参加了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

  源码下载

   

  



2015-01-23 15:29:36 book_longssl 阅读数 985
  • unity3D游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12775 人正在学习 去看看 宋晓波

在我们开发游戏或者虚拟现实中,一般都会用到小地图,如果要我们去写小地图,应该会花费一点时间的吧,如何加快我们的开发速度呢,其实在unity 3d中就有一个“小”插件,是专门用开开发小地图用的,这个插件就是KGFMapSystem。这个是它的官网。


(KGF里面不只是有一个这样的插件,它里面有很多插件,有兴趣的朋友可以研究一番)。

 

首先我们倒入这个插件包,打开kolmich/KGFMapSystem/demo/scenes/quickstart_demo .

我们就能看见这个了



你看,我们现在能看见一个红色的标志的警号提示了,意思就是叫我们新建一个层(layer),取名为mapsystem(必须得是这个名字才能有用).

选中我们摄像头,去掉我们刚才建的mapsystem这个layer.如图:

 

现在我们来运行一下,你看在右上角就能看见我们梦寐以求的小地图了 是不是??


从以上步骤来看,用这个插件是不是很容易的就开发了自己的小地图呢?.有的人就会说,这个是它这个场景自带好吧,如果我们在实际的项目中来发呢。现在我来教大家如何在自己的项目中开发自己的小地图。

我们打开quickstart_try_yourself这个场景,运行后发现是不是什么都没有呢,这个就像我们自己原始的项目。

我们找到kolmich/KGFMapSystem/prefabs里面中的KGFMapSystem这个预设,直接拖进我们的工程,如图:


 

我们看看右下角的那个提示(我用蓝色线圈圈住的的)。我相信大家都能读懂他是什么意思吧。我们找到我们的人物,再直接附上给Its Target.如图:

 

我们再在kolmich/KGFMapSystem/prefabs/mapicons_samples中找到KGFMapIcon_player这个预设,拖进我们人物中。(让它成为我们的子物体,其实这个就相当于在地图中表示自己的那个标记) 可别忘记了我们在刚开始建一个layer的那些步骤哦,运行如图:



我们看见自己的小地图了吧,中间的那个黄色箭头就是我们自己。

细心的人就会发现小地图旁边有4个按钮一样的东西,没错 他就是按钮,有放大地图……这些功能。


2013-01-12 14:52:45 borsyu 阅读数 7083
  • unity3D游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12775 人正在学习 去看看 宋晓波

    不得不说,unity3d是一个解放生产力的游戏引擎,自带了各种编辑器,可以进行一系列的可视化操作。

需要注意的是,unity3d适合FPS游戏,物理游戏等中小型的游戏,并不太适合MMO开发。

    从最开始接触unity3d,到了解大致内容,能上手开发,自己断断续续用了半个月时间。期间走了不少弯路,

总结了一下一个自己倒过头来觉得适合一些没有接触过unity3d的朋友的学习路线:


此过程假设学习者:

        1. 有一定图形学基础,比如清楚3D平移旋转等操作,四元数基本原理,对纹理,材质,灯光等有基本了解。

        2. 开发语言不是障碍,即采用何种语言进行开发不是问题。

        3. 阅读英文艺术文档没有障碍

对于1,如果是计算机专业毕业,一般找一本图形学的书籍看半天足够了。

对于2,unity3d支持C#,Javascript,Boo三种脚本语言开发,可以任选一种。

学习路线也可以根据实际情况任选。

学习路线1:

       1.  手册manual第一部分通读,并熟悉unity3d环境(半天)

       2.  通读手册脚本指南中的overview部分(半天)

       3.  官网的例子学习,3DPlatformTutorial(一周)


学习路线2:

       1. 手册manual第一部分通读,并熟悉unity3d环境(半天)

        2. 照书学,理论结合实例,如果基础稍弱,且想学想做的游戏有不少2D元素,可以采用《Unity 3.x Game Development beginner》一书,                  

        若基础稍好一点点,可以采用《Unity.3.x.Game.Development.Essentials》一书。PS:这2本书都有英文电子版可以下载。(一周)


OK,就这么简单,其实只要几天,就足够上手开发了。认真做完这几步,基本上已经能够应付大部分游戏开发内容了,剩下的就可以边做边熟悉了。


2012-12-04 17:21:56 AnYuanLzh 阅读数 740
  • unity3D游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12775 人正在学习 去看看 宋晓波
Unity3D 游戏引擎之游戏对象的访问绘制线与绘制面详解



雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archives/561



一眨眼学习Unity3D 也有一段时间了,基本已经拿下了这套游戏引擎,回过头来想想以前写的RPG 游戏引擎,越来越发现以前写的就是垃圾。人果然是要不断学习与不断进步,好好学习,天天向上。哇咔咔~ 加油!!



最近做一个项目须要去绘制线与绘制面,那么把这两天的学习笔记整理一下,一是给自己留作备忘,二是方便初学者学习。
任何一个无规则曲线它都是有若干个线段组成,及时是圆形它也是又若干个线段组成的,也就是说将若干个线段拼接起来就是我们须要的无规则曲线~那么在3D 的世界中我们须要知道 X Y Z 三个点来确定一条3D线段。



首先先使用Unity编辑器的方式来添加一条线~
Unity -> GameObject -> Create Empty 创建一个空的对象,我命名为line。然后点击 Component -> Miscellaneous -> Line Renderer 给line添加一个线渲染器的属性,Line Renderer是非常中的属性,下面我会详细的说明。



    





Create -> Material 创建一个材质,做来这个线段的贴图,下面我们看看Line Renderer的一些重要参数。
Cast Shadows: 是否投射阴影。
Receive Shadows: 是否接收阴影。
Materials :设置材质,这里可以设置多个材质, line就是上面我们创建的材质,这里我给line这个材质涂上了红颜色。
Positions:这个属性就比较重要了,它是专门设置线段在3D 世界中的点的坐标,size 设置点的数量 为3 那么将会有3个点,Element 0   Element 1 Element 2    这三个点将确定这条曲线分为两段,第一段是(0,0,1) 到  (0,0,2) ,第二段是 (0,0,2) 到(0,0,4)。





Paramerters 
StartWidth :设置起点的宽度  
EndWidth:  设置终点的宽度 ,这两项数值默认为1,但是现实起来很宽,所以一般都设置为0.几~ 
Start Color: 设置起点颜色
Start Color: 设置终点颜色
Use World Space 使用世界坐标系

大家看看效果,清楚的可以看到曲线分为两部分,第一部分较短 第二部分较长。





怎么样? 绘制线的方法不难学吧?在已知线段位置的情况下我们可以使用上面的方法去设置这条线,但是如果线段的位置是在游戏过程中动态的产生就得在代码中去动态的去设置。


创建脚本Main.cs 绑定到摄像头上,运行游戏绘制线的话须要在Main中去拿到line这个对象的实例。这就是一个比较重要的知识点了。

一些重要的方法,在编辑器中编辑的一些东西,在代码中也可以做到。

LineRenderer.SetWidth(0.1,0.1) ; 设置线段起始点与结束点的宽度 (参数1 为起始点 参数2为结束点)
LineRenderer.SetColor(Color.black,Color.white); 设置线段起始点与结束点的颜色 (参数1 为起始点颜色 参数2为结束点颜色)
LineRenderer.SetVertexCount(5); 设置线段数量。
LineRenderer.useWorldSpace = true; 是否使用世界坐标系,和上面编辑器对应。

[csharp] view plaincopy
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Threading;  
  4.   
  5. public class Main : MonoBehaviour {  
  6.       
  7.     //游戏对象,这里是线段对象  
  8.     private GameObject LineRenderGameObject;  
  9.       
  10.     //线段渲染器  
  11.     private LineRenderer lineRenderer;  
  12.       
  13.     //设置线段的个数,标示一个曲线由几条线段组成  
  14.     private int lineLength = 4;  
  15.       
  16.     //分别记录4个点,通过这4个三维世界中的点去连接一条线段  
  17.     private Vector3 v0 = new Vector3(1.0f,0.0f,0.0f);  
  18.     private Vector3 v1 = new Vector3(0.0f,1.0f,0.0f);  
  19.     private Vector3 v2 = new Vector3(0.0f,0.0f,1.0f);  
  20.     private Vector3 v3 = new Vector3(1.0f,0.0f,0.0f);  
  21.       
  22.     void Start(){  
  23.           
  24.         //通过之前创建的对象的名称,就可以在其它类中得到这个对象,  
  25.         //这里在main.cs中拿到line的对象  
  26.         LineRenderGameObject = GameObject.Find ("line");  
  27.           
  28.         //通过游戏对象,GetComponent方法 传入LineRenderer  
  29.         //就是之前给line游戏对象添加的渲染器属性  
  30.         //有了这个对象才可以为游戏世界渲染线段  
  31.         lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer");  
  32.           
  33.         //设置线段长度,这个数值须要和绘制线3D点的数量想等  
  34.         //否则会抛异常~~  
  35.         lineRenderer.SetVertexCount(lineLength);  
  36.           
  37.           
  38.     }     
  39.                    
  40.       
  41.     void Update() {  
  42.           
  43.         //在游戏更新中去设置点  
  44.         //根据点将这个曲线链接起来  
  45.         //第一个参数为 点的ID   
  46.         //第二个 参数为点的3D坐标  
  47.         //ID 一样的话就标明是一条线段  
  48.         //所以盆友们须要注意一下!  
  49.           
  50.         lineRenderer.SetPosition (0, v0);  
  51.         lineRenderer.SetPosition (1, v1);  
  52.         lineRenderer.SetPosition (2, v2);  
  53.         lineRenderer.SetPosition (3, v3);  
  54.   
  55.   
  56.     }  
  57.       
  58. }  


通过上面代码的设置,运行游戏,发现全新的一个三角形曲线赫然的映入我们的眼帘,有了上面的方法我们就可以组合的绘制出各种各样的3D 游戏曲线了,这里MOMO使用的是颜色,大家也可以添加一个贴图~








绘制面的话~,因为3D世界中游戏面全都是用三角形来拼起来的(出于效率的考虑),所以大家所看到的面其实都是用三角面拼接起来的。那么下面我们看看在Unity3D 中如何绘制三角形平面。先创建一个GameObject对象,我命名为face,然后给这个对象添加两个Mesh属性, 添加MeshFilter(网格过滤器)与mesh Renderer(网格渲染器)属性,这样子就可以绘制网格面了。  






为了给网格面贴图,我给mesh Renderer 渲染器添加一个材质,贴上一张图片~ 在3D 的世界中两点可以确定一条线,那么三点就肯定能确定一个面,3D世界中的面一定是三角形拼凑组成,任何3D的面的所需要的坐标点的数量 一定是3的倍数。和绘制线一样,MOMO还是创建一个脚本绑定在摄像头中,然后去访问上面创建的face游戏对象 去渲染三角面~

[csharp] view plaincopy
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class Main : MonoBehaviour {  
  5.   
  6.       
  7.     // Update is called once per frame  
  8.     void Update () {  
  9.           
  10.         //通过object对象名 face 得到网格渲染器对象  
  11.         MeshFilter meshFilter = (MeshFilter)GameObject.Find("face").GetComponent(typeof(MeshFilter));  
  12.           
  13.         //通过渲染器对象得到网格对象  
  14.         Mesh mesh = meshFilter.mesh;  
  15.       
  16.         //API中写的不是提清楚,我详细的在说一遍  
  17.           
  18.         //设置顶点,这个属性非常重要  
  19.         //三个点确定一个面,所以Vector3数组的数量一定是3个倍数  
  20.         //遵循顺时针三点确定一面  
  21.         //这里的数量为6 也就是我创建了2个三角面  
  22.         //依次填写3D坐标点  
  23.         mesh.vertices = new Vector3[] {new Vector3(5, 0, 0), new Vector3(0, 5, 0), new Vector3(0, 0, 5),new Vector3(-5, 0, 0), new Vector3(0, -5, 0), new Vector3(0, 0, -5)};  
  24.       
  25.         //设置贴图点,因为面确定出来以后就是就是2D   
  26.         //所以贴纸贴图数量为Vector2   
  27.         //第一个三角形设置5个贴图  
  28.         //第二个三角形设置一个贴图  
  29.         //数值数量依然要和顶点的数量一样  
  30.         mesh.uv = new Vector2[] {new Vector2(0, 0), new Vector2(0, 5), new Vector2(5, 5),new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)};  
  31.           
  32.           
  33.         //设置三角形索引,这个索引是根据上面顶点坐标数组的索引  
  34.         //对应着定点数组Vector3中的每一项  
  35.         //最后将两个三角形绘制在平面中  
  36.         //数值数量依然要和顶点的数量一样  
  37.         mesh.triangles= new int []{0,1,2,3,4,5};  
  38.           
  39.     }  
  40. }  


Build and Run  运行效果后清楚的可以看到两个三角形。MOMO提醒大家 善用三角平面可以绘制出各种各样的游戏面出来噢~哇咔咔~





最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,总的来说这一章还是比较简单的,不过也是非常重要的一章。代码我就不上传了。哇咔咔~ MOMO愿和 大家好好学习,大家一起进步哈~!!!
2014-10-27 10:08:59 book_longssl 阅读数 1744
  • unity3D游戏/AR/VR在线就业班

    本套课程是一套完整的 Unity3D-游戏/AR/VR 学习课程,具体的课程内容包括《C#语言》、《Unity引擎》、《编程思想》,《商业级项目实践》等开发课程,引导您一步步循序渐进、由易到难,终获得Unity 3D/游戏/AR/VR工程师的岗位技能。

    12775 人正在学习 去看看 宋晓波


首先我们讲一下,为什么要介绍这个插件? 

是因为这个插件极大的简化了我对接渠道SDK的工作量,精力和时间,也避免了我不断的重复的做接入SDK工作这样没有成就感的无聊工作! 

所以我就介绍一下这款插件!!!!!! 
开发环境:windows系统 , eclipse , unity3d 4.0 

这款插件的工作方式是中间件加插件 这样的组合模式工作的。 
所以需要先接入中间件。 
对接过程: 
1. 准备中间件工程对接链接是去下载中间件的地址

2.  对接包括登录,支持,用户中心,切换账号,退出接口 
 

 


3.       Android工程已包含在中间件中,其中class.jar封装了U3d游戏到android的中间接口。 
 

 


4.       CS类中
AndroidAgent是接口调用类. AndroidCallbackMessage是消息回调类
Joy7SDKListener是场景监听类,需要加载到场景中 
 


U3D插件使用过程
1.       准备U3D插件
2.       双击插件,进入unity,然后import插件到unity开发工具,双击ABCtools开始使用插件打包,如下图 
 

 


3.       登录注册之后,在个人账号下建立个人的游戏,填写申请的渠道参数。进入如下图,个人的游戏,渠道参数都可以轻松获取,可以开始方便打包 

图片:QQ图片6.jpg

 
项目DEMO,插件都在下面链接中,有兴趣的可以自己玩玩!

没有更多推荐了,返回首页