滚轮:放大缩小视图
鼠标右键移动:旋转视野(围绕焦点旋转视野)
鼠标左键:用来选择物体GameObject游戏物体
鼠标中键按下移动:用来平移视野
persp视图(透视视图)下
滚轮:放大缩小视图
鼠标右键移动:旋转视野(围绕当前视野位置旋转视野)
鼠标左键:用来选择物体GameObject游戏物体
鼠标中键按下移动:用来平移视野
Alt+鼠标左键:旋转视野(围绕焦点旋转视野)
Alt + 鼠标中键
Alt + 鼠标右键,进行视图的缩放
移动吸附:shift+Ctrl+鼠标移动
顶点吸附:(在表面顶点移动)按shift+v键激活,按鼠标左键移动,按shift+v键关闭定点吸附;
拖动物体按一个格子移动
按住Ctrl键移动物体就会一个格子移动。
按住Shift+箭头键加速移动
飞行模式(透视模式下):
按住鼠标右键:
W Q S E 移动
在Hiararchy中选中物体
按住 F 键使其成为场景中的中心
键盘中的箭头工具
移动摄像机进行场景预览
渲染对比:
Unity中灯光类型:
Spot 聚光灯 使用2D纹理
设置光锥的角度
Directional 方向灯光 平行方向 使用2D纹理
Point 点灯光 灯光Cookies 使用立方盒贴图
Area(baked only) 区域灯光,创建灯光贴图
灯光的高度和角度
灯光在打开阴影效果Shadow会使用过多电脑资源
Draw Halo 灯光的光晕效果
Flare 灯光耀斑
Render Mode 设置灯光重要性,Auto 自动根据设置变量和周围灯光 值进行调整
Impantant Unity 会以每像素进行渲染
Not impantant 顶点物体进行渲染
Culling Mark 通过层的方式,是灯光不影响此层中的物体
照相机:
创建小地图,分屏
ClearFlags 摄像机渲染过程中的背景渲染
Depth only 为场景中存在多个摄像机,设置渲染顺序产生叠加效果,只渲染颜色,不渲染深度
Den't Clear 是每一帧叠加在上一帧上,既渲染颜色又渲染深度,形成拖尾效果
Culling Mask 选择渲染的层
Projetion设置当前摄像机
Field of view 摄像机视角
Normal View Port Rect 设置摄像头的拍摄视图尺寸大小
Depth 当深度值大 ,其渲染内容叠加在深度值小的摄像头渲染画面中
Rendering path 渲染路径
Target Texture 目标纹理
HDR打开摄像机的HDR效果
每一个物体都有一个纹理坐标
设置透明属性
将materials 的shader 设置成mobile\Particles\Multipy粒子属性
刚体属性:rigidbody
得到刚体组件调用刚体组件 rd = GetComponent<Rigidbody>();
刚体可以控制物体移动;
start()//放置初始化代码
update()//放入命令并持续调用
transform.position+=new Vector3(0,0.01f,0);注释:往上运动根据世界坐标往上运动
transform.Translate(Vector3.up*Time.deltaTime);注释:往上运动,根据自己的坐标往上运动
transform.Translate(Vector3.up*Time.deltaTime,Space.World);注释:加第二个参数Space.Self,默认相对于自己改成相对与世界Space.World;
void FixedUpdate(){}有固定的时间间隔
从Start()中调用函数用StartCoroutine(函数名);
IEnumerator 函数名{yield return new WaitForSeconds(时间);注释:判断运行时间}
Yield语句是一种特殊类型的Return(返回语句),它可以确保函数在下一次执行时,不是从头开始,而是从Yield语句处开始。
Random随机数函数:
var total = 0.0;
for (elem in probs){
total += elem;
}
var randomPoint = Random.value * total
var i:int
for (i=0;i< probs.Length; i++)
{
if(randomPoint < probs[i])
return I;
else
randompoint -= probs[i];
}
Return probs.Lenght - 1;
事件发送脚本
事件接受脚本
rd.AddForce()使加力括号内加向量
创建向量:new Vector3(x,y,z)
控制物体自身旋转:
transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime, Space.Self);
vector.up控制物体绕Y轴旋转;
rotateSpeed是速度控制;
Time.deltaTime
Space.Self自身旋转
控制旋转的另一种方法:
transform.Rotate(new Vector3(x,y,z));
修改UI中image的透明:
选择color属性,选择A的RGB大小;
碰撞器检测
void OnCollisionEnter(Collision collision)
{
collision.collider获取碰撞到的游戏物体的collider组件
collision.collider.name获取碰撞到游戏物体的名字
string name = collision.collider.name;
print(name);//ptint 可以把一个字符差个你输出显示到控制台
if(collision.collider.tag =="takeup"){
Destroy(collision.collider.gameObject);
}
触发器检测
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "takeup")
{
Destroy(collider.gameObject);//Destroy是销毁所碰到的物体
}
http://unity3d.com/unity/download/download-windows
score++;
text2.text = score.ToString();//定义命名为text2的UI中的Text类型的文本显示内容
if(score<26)
text1.text = (25-score).ToString();//强制转换
if (score == 25)
{
winText.SetActive(true); //使物体显示出来
}
脚本的使用,设置变量名可以使得脚本有重用性;
Private var 变量名(oneTexture) :Texture2D;注释:2D纹理类型
Private var 变量名(allTexture) :Object[];注释:物体数组类型
注释:Resources.Load() Resources.AllLoad()需要专门的文件夹名
fuction OnGUI()
{
if(GUI.Button(Rect(0,20,100,60),"loadOneTexture"))
{
if(oneTexture==null){oneTexture=Resources.Load("oneTexture/Grass");}
}
if(oneTexture!=null){GUI.DrawTexture(Rect(110,20,120,120),oneTexture,ScaleMode.StretchToFill, true, 0);}
绘制纹理的位置 纹理的名称 纹理缩放模式 是否打开阿尔法布兰科模式,存在此模式纹理将透明 定义纹理的宽高比例,定义为零是采用默认比例
if(GUI.Button(Rect(0,140,100,60),"loadAllTexture"))
{
if(allTexture==null){oneTexture=Resources.LoadAll("allTexture");}
}
if(allTexture!=null){for(var i=0;i<allTexture.Length;i++){GUI.DrawTexture(Rect(110,20,120,120),oneTexture,ScaleMode.StretchToFill,true,0);}}
}
Movie纹理的格式:
声音文件:
共同作用:
Audio source 音源组建 添加得到声音发出的物体上
Audio Listener 声音监听组建 添加到游戏中的角色物体中
#pragma strict
@script RequireConponent(AudioSource)检测存在AudioSource组建
var bgAudio:AudioClip;注释:定义一个为音频的bgAudio名
fuction Start(){audio.loop=true;}
fuction OnGUI()负责图形的绘制
{
if(GUILayout.Button("Play/Contine")){if(!audio.isPlaying){audio.Play();}}注释:开始播放的按钮
if(GUILayout.Button("Pause")){audio.Pause();}注释:暂停播放的按钮
if(GUILayout.Button("Play/Contine")){audio.Stop();}注释:停止播放按钮
if(GUILayout.Button("PlayoneShort")){ audio.PlayOneShort(bgAudio,0.7)}注释:播放指定的音乐片段bgAudio. 0.7为音高可自己设定
}
预设:
Prefab
运行实例化
没有预设创建墙:
#pragma strict
fuction Start()
{
for(var y=0;y<5;Y++)
{
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);注释:使用CreatePrimitive创建方块
cube.transform.localScale=Vector3(0.8,0.8,0.8);注释:设置缩放为0.8
cube.transform.position=Vector3(x,y,0);
}
}
fuction Update()
{
}
有预设创建墙
#pragma strict
var 变量名(brick):Transform
fuction Start()
{
for(var y=0;y<5;y++){for(var x=0;x<5;x++){Instantiate(brick,Vector3(x,y,0),Quaternion.identity);}}
}
Debug.log("dfsl");//在控制台输出dfsl
三种定位物体的方式:
1,定义一个变量,把物体拖入变量选项中
2,通过 GameObject.Find("路径")//访问物体
3,通过标签访问物体
GameObject.FindGameObjectWithTag("标签名");
对时间的使用:Time的属性
(1)deltaTime
上一帧
例子:改变灯光方位 light.Range=
(2)time
显示当前时间
(3)fixedTime
固定增量时间
(4)fixedDeltaTime
固定增量间隔时间
(5)smoothDeltaTime
平滑DeltaTime
(6)Yield语句
是一种特殊类型的Return(返回)语句,它可以确保函数
在下一次被执行是,不是从头开始,而是从Yield语句处开始
yield.WaitForSeconds(5.0);//使函数的执行延迟5秒
可以并行执行另一段语句;在延迟的时间段内。
随机数的使用:Random
(1)Random.Value
可为一个变量赋值,值是0~1的数包含0和1
只返回浮点型
(2)Random.Range(M,N)
可为变量赋值,自定义赋值范围
类型为整型时只包含最小的范围值
类型为浮点型的最大和最小范围值都包含
变量名 = Random.Range(0,100);
赋值范围,要与变量的类型相对应
物体消息传递:
GameObject.SendMessage:向自身的脚本中发送消息
GameObject.BroadcastMessage:向自身及子物体的脚本中发送消息
GameObject.SendMessageUpwards:向自身及父类物体中发送消息【先向自身发送再向其他发送】
gameObject.SendMessageUpwards("接收消息的函数名",附带消息中的传递类型,消息传递选项【可写可不写】);
接受消息的函数中数据类型要与附带消息中类型一致
C#中的消息传递:可以发送给多个物体,即所有监听此的物体
发送:
public delegate void EventHandler(GameObject e);【C#中的委托】
public event EnentHandler MouseOver;【C#中的事件】
void OnMouseOver(){
if (MouseOver != null)
{
MouseOver(this.gameObject);
}
}
接受:
void start(){
EventDispatcher【发送消息类的类名】 ev = GameObject.Find("物体名").GetComponent<EventDispatcher【发送消息类的类名】>();
ev.MouseOver += ListeningFunction;
}
void ListeningFunction(GameObject e){
this.transform.Rotate(20,0,0);
Debug.Log("mouse is over:"+e);
}
OnGUI 界面设计
必须定义一个OnGUI函数,所有的GUI 界面都在这给函数中编辑
Button:
GUI.Button(Rect(0,0,0,0)【前两个数字定义按钮位置,后两个数字定义按钮的高宽】,"按钮名称");
定义一个按钮是图片显示:
public Texture2D image;【定义GUI中的一个纹理变量】
GUI.Button(Rect(0,0,0,0)【前两个数字定义按钮位置,后两个数字定义按钮的高宽】,image);
再在Unity中为此image变量赋值;
定义一个按钮是图片加文字显示:
public Texture2D image;【定义GUI中的一个纹理变量】
GUI.Button(Rect(0,0,0,0)【前两个数字定义按钮位置,后两个数字定义按钮的高宽】,GUIContent("按钮名称",image));
再在Unity中为此image变量赋值;
定义GUI按钮提示:
GUI.Button(Rect(0,0,0,0)【前两个数字定义按钮位置,后两个数字定义按钮的高宽】,GUIContent("按钮名称","这是一个工具提示"));
GUI.Label (Rect(0,0,0,0)【位置大小】,GUI.tooltip)【GUI标签】
GUI.RepeatButton();
加Repeat可使Button按钮可持续执行,不加只是按一下执行一次
文本输入框控件
可以把输入的文本保存到一个变量中:
public string text;
text = GUI.TextField(Rect(0,0,0,0),text);
if(GUI.RepeatButton(Rect(0,0,0,0),text))
{ Write("jkdla");}【text:使在文本输入框中的文字显示在Button中】
开关按钮:
选中时为开,未选中是为关;
public bool toggleBool = True;
toggleBool = GUI.Toggle(Rect(0,0,0,0),toggleBool,"Toggle");
水平滑块:
public float hSlidderValue;
hSliderValue = GUI.HorizontalSlider(Rect(0,0,0,0), hSliderValue, 0, 10);
滑动条的位置 滑动条上滑块的位置变量 滑动条的起始值 滑动条的终止值
垂直滑动条与水平滑动条类似。
Box:
GUI.Box(Rect(0,0,0,0)【前两个数字定义按钮位置,后两个数字定义按钮的高宽】,"按钮名称");
复合控件的使用:
工具条控件:
定义两个变量记录工具条
public int toolbarint=0;
public string[] toolbarstrings={"工具按钮1","工具按钮2","工具按钮3"};
void OnGUI(){
toolbarint = GUI.Toolbar(Rect(0,0,0,0),toolbarint【打开时默认值】,toolbarStrings【根据数组长度定义工具条的数目】);
}
网格控件:工具条控件的改版
定义两个变量记录网格
public int selectionGridint=0;
public string[] selectionstrings={"Grid1","Grid2","Grid3","Grid4","Grid5"};
void OnGUI(){
selectionGridint = GUI.SelectionGrid(Rect(0,0,0,0),selectionGridint【打开时默认值】,selectionStrings【根据数组长度定义工具条的数目】,2【定义显示的列数量,此时是两列】);
}