摘要: 51.栈和堆是存放变量与常量的地方,它们有截然不同的生命期语义。52.栈是用来存放局部变量和参数的内存块,当一个函数被调用和退出时,栈就会逻辑增长和减小,考虑下面的函数: static int Factorial( int n ) { if ( 0 == n ) { return 1; }7 return ( n * Factorial(n-1) ); }这是一个递归函数,也就说它会自己调用自己。每次函数被调用时,就会有一个新的int参数被分配在栈上,而当函数退出时,int参数被释放。53.堆是用来存放对象(也就是引用类型的实例)的地方。无论何... 阅读全文
posted @ 2012-04-17 17:33 渡蓝 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 最近开始学习Unity开发,由于以前一直都是从事C/C++开发,所以对于Unity的脚本语言方面,选择了最相近的C#。由于从头开始学习C#是没有必要的,所以就恶补了一下必须的C#知识^-^1.C#中使用//(双斜杠)来表明本行的剩余部分代表注释。2.C#中语句是按顺序执行的,每条语句以分号结尾。3.C#中的函数执行一系列语句的行为,称为语句块---一对大括号中包含0条或多条语句。4.一个函数可以通过定义参数来从调用者处接受输入数据,也可以通过定义返回类型来输出数据给调用者。5.Main函数定义为执行程序的默认入口点。Main函数可以不返回任何值,也可以返回一个整数给执行程序环境。Main函数也 阅读全文
posted @ 2012-04-17 17:32 渡蓝 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 同时使用Unity 3D和iOS的UIScrollView会发现UIScrollView经常莫名其妙的不能滚动了在Unity 3D的论坛里找到解决方法:http://forum.unity3d.com/threads/100066-UIScrollView-bugs-out-when-drawn-over-Unity.The solution is actually simple, as described here: http://unity3d.com/support/documenta...-MainLoop.html in appcontroller.mm disable CADDi. 阅读全文
posted @ 2012-04-17 17:23 渡蓝 阅读(1532) 评论(0) 推荐(0) 编辑
摘要: 概要Unity的默认项目设定是”只在窗口被聚焦时进行游戏处理“。失去焦点时处理停止。 这个设置对于单机游戏没什么影响,但在调试多窗口的在线游戏时相当不方便。可以通过如下设定让所有的窗口失去焦点后继续游戏处理。 方法 阅读全文
posted @ 2012-04-17 17:22 渡蓝 阅读(919) 评论(0) 推荐(0) 编辑
摘要: 1 状态接口 每个状态的基类 这里要注意C#的abstract和C++中的virtual的区别 网上讲解的很多public abstract class Status : MonoBehaviour { public abstract void OnCreate(); public abstract void OnExecute(); public abstract void OnExit();}2 各个状态类 由于继承了Status 因此需要实现Status中的方法 形如 public class MenuStatus : Status { ///////////... 阅读全文
posted @ 2012-04-17 17:14 渡蓝 阅读(777) 评论(0) 推荐(0) 编辑
摘要: 用Unity开发移动平台的游戏 不可避免的会遇到屏幕分辨率的问题 不同的分辨率上会使得原本正常的UI变得乱七八糟 我们知道 在Unity中可以拿一个plane作为背景 UI则是绘制在离摄像机最近的位置 可以认为是绘制在摄像机上的因此分辨率的不同会导致UI的位置和大小出现错误我们完全可以用一个plane去模拟button 并将它放在世界空间中 这样虽然可以解决位置和大小的问题 但是所带来的问题也一大堆并难于维护因此我们需要根据屏幕的大小去按比例缩放UI假如原本有个按钮是这样,并且当前的480x854分辨率下没问题,如果改成600x1024或者其他的分辨率,便会发现位置和大小都不正确了functi 阅读全文
posted @ 2012-04-17 17:11 渡蓝 阅读(1168) 评论(0) 推荐(0) 编辑
摘要: 1、角色模型制作 unity3d支持Skin动画 但是不支持Physique动画 会发现Physique动画在unity里严重变形 因此在模型的骨骼动画的制作上面 要用Skin 当然也可以做成Physique 然后用插件转换一下 3dsmax的插件PhyToSkin 3dsmax中转换之前 为了避免出错 先隐藏骨骼 然后对绑定了骨骼的模型进行单独转换 因为批量也会出错 转换以后在修改面板中加入可编辑网格 同时为了避免出错 检查一下uv是否贴反了2、角色模型导出 确保导出的模型是已经绑定了骨骼的 在导出设置中根据需要选择是否导出Animation 以及3dsmax和unit... 阅读全文
posted @ 2012-04-17 17:06 渡蓝 阅读(5831) 评论(1) 推荐(1) 编辑
摘要: 3d游戏中 一个场景往往比较大 如果游戏的进行需要下载一个10M甚至更大的场景时 加载所用的时间会导致很大部分玩家的流失我们知道unity3d中的内置地形是使用一张高度图 加载场景时 首先加载地形并显示 再去加载场景中的部件(比如树、房子等) 将会很有必要在加载场景中的部件时 可以根据玩家当前所在的位置 由近到远的去加载 场景中的每个部件实际上并不都是独一无二的 比如一棵一模一样的树 可能同一个场景中出现在很多地方 不同的只是树的位置信息 那么在加载场景的时候则只需要加载一个树的模型 并记录下N个树的transform信息 将会大大的减少场景所占的空间 如果模型的重用率较高 那么这个问题的解决 阅读全文
posted @ 2012-04-17 17:04 渡蓝 阅读(2484) 评论(1) 推荐(0) 编辑
摘要: Unity3D的脚本属性用法:// JavaScript@script AddComponentMenu ("Transform/Follow Transform")// CSharp[AddComponentMenu("Transform/Follow Transform")]以下是具体说明(部分无关紧要的不翻译):AddComponentMenu(函数)允许你从其他的"Components"菜单途径添加脚本(如果不使用AddComponentMenu那么你只能从Components->Scripts下添加)。注意需resta 阅读全文
posted @ 2012-04-17 16:59 渡蓝 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 游戏命中判定:圆桌算法和程序实现游戏中常常要做一个动作的命中判定,比如攻击的命中判定,结果一般为未命中、普通命中,致命命中,命中格挡等(当然复杂起来远不只这些)。一般的,程序上(或策划上)采用的是优先级概率算法或者圆桌算法。优先级概率的算法是:先判定是否未命中,如果命中是否闪躲,如果未闪躲是否招架,最后才是普通攻击(有省略)。也就是说按优先级(顺序)进行概率计算和判断。圆桌算法是将这些属性(命中普通攻击、未命中、招架、命中致命攻击)放在一起,构成一个圆桌。如20%未命中,5%致命攻击,30%招架,剩余45%为普通攻击。从上面的描述来看,圆桌算法输入的参数是一个代表概率的数组,或者,更广泛地说是 阅读全文
posted @ 2012-04-17 16:46 渡蓝 阅读(3571) 评论(0) 推荐(0) 编辑
摘要: 在Windows环境下开发Unity3d游戏或应用,可以利用dll文件将一个大工程分为几个小的工程。这里较为推荐 3dsMax+Unity3d+Windows7+Virsual Studio 2010+ReSharper这样的组合进行整个WinPC/Web项目的开发和维护。 在VS2010中可以导入一个ClassLib Project,编译生成dll文件。然后在Unity3d项目中添加对该dll文件的引用,并且将该dll文件复制到Unity3d项目的Assets 目录下的任意位置。Unity3d将自动解析该dll文件。注意,尽量不要有命名空间,否则Unity3d可能报错。 VS布置如下: Un 阅读全文
posted @ 2012-04-17 16:45 渡蓝 阅读(1265) 评论(2) 推荐(0) 编辑
摘要: private var first = Vector2.zero; private var second = Vector2.zero; function Update (){} function OnGUI (){ if(Event.current.type == EventType.MouseDown) { //记录鼠标按下的位置 first = Event.current.mousePosition ; } if(Event.current.type == EventType.MouseDrag) { //记录鼠标拖动的位置 ... 阅读全文
posted @ 2012-04-17 16:38 渡蓝 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 代码很简单 :var mouse_pic:Texture;function Start(){Screen.showCursor=false;}function OnGUI(){var mouse_pos=Input.mousePosition;GUI.DrawTexture(Rect(mouse_pos.x,Screen.height-mouse_pos.y,16,20),mouse_pic);}原理其实很简单,首先是隐藏原有的鼠标,然后将一张 小图,放在鼠标的位置上。 阅读全文
posted @ 2012-04-17 16:37 渡蓝 阅读(336) 评论(0) 推荐(0) 编辑
摘要: using System;using System.Collections.Generic;using System.Linq;using System.Text;/** 用到了unity3d非常好的协同机制实现这一点,OnMouseDown事件表示鼠标已作了射线判断得到了对象。* 拖拽时保持z轴不变,因为屏幕是xy二维的,空间是三维的。* */IEnumerator OnMouseDown (){ var camera = Camera.mainCamera; if (camera) { //转换对象到当前屏幕位置 Vector3 screenPosition = camera.Wor... 阅读全文
posted @ 2012-04-17 16:36 渡蓝 阅读(322) 评论(0) 推荐(0) 编辑
摘要: var hit : RaycastHit;private var ButtonClicked = false;private var lastTime :float= 0;private var nowTime :float = 0;function Update (){if(Input.GetMouseButtonDown(0)){ nowTime = Time.time; if (lastTime +0.3 > nowTime) { ButtonClicked = true; } else { ButtonClicked = false; } lastTime = nowTime; 阅读全文
posted @ 2012-04-17 16:27 渡蓝 阅读(237) 评论(0) 推荐(0) 编辑
摘要: GUI.SetNextControlName("InputFieldLC"); inputLC = GUI.TextField(new Rect(Screen.width / 2 + 240,Screen.height - 30,100,20),inputLC); if(GUI.Button(new Rect(Screen.width / 2 + 340, Screen.height - 30,40,20),"定位")) { if(wwwIng == false) { wwwIng = true; Application.ExternalCall(&qu 阅读全文
posted @ 2012-04-17 16:26 渡蓝 阅读(182) 评论(0) 推荐(0) 编辑
摘要: private string timerValue = "0:00:00"; // Use this for initialization void Start() { InvokeRepeating("TimerUpdate", 1.0f, 0.13f); timerSkin = (GUISkin)Resources.Load("TimerGUISkin"); } private void TimerUpdate() { float minutes = Mathf.FloorToInt(Time.time / 60); float 阅读全文
posted @ 2012-04-17 16:23 渡蓝 阅读(209) 评论(0) 推荐(0) 编辑
摘要: Transform GetTransform(Transform check,string name) { foreach (Transform t in check.GetComponentsInChildren<Transform>()) { if(t.name==name){return t;} GetTransform(t,name); } return null; } 阅读全文
posted @ 2012-04-17 16:21 渡蓝 阅读(212) 评论(0) 推荐(0) 编辑
摘要: private void MakeStroke(Rect position,string txtString,Color txtColor,Color outlineColor,int outlineWidth ){ position.y-= outlineWidth; GUI.color=outlineColor; GUI.Label(position, txtString); position.y+=outlineWidth*2; GUI.Label(position, txtString); position.y-=outlineWidth; position.x-=outlineWid 阅读全文
posted @ 2012-04-17 16:20 渡蓝 阅读(1348) 评论(0) 推荐(0) 编辑
摘要: public var isRendering:boolean=false;private var lastTime:float=0;private var curtTime:float=0;function Update(){isRendering=curtTime!=lastTime?true:false;lastTime=curtTime;}//如果物体可见,每个相机都会调用OnWillRenderObject。//http://game.ceeger.com/Script/Camera/Camera.OnWillRenderObject.htmlfunction OnWillRender 阅读全文
posted @ 2012-04-17 16:19 渡蓝 阅读(523) 评论(0) 推荐(0) 编辑