【精品】uinty3d的一些简单脚本整理《二》
简单的unity脚本
简单的unity脚本粒⼦光环空⽗物体的⼦物体挂⼀个粒⼦,然后挂这个脚本using System.Collections;using System.Collections.Generic;using UnityEngine;public class ParticleHalo : MonoBehaviour{private ParticleSystem particleSys; // 粒⼦系统private ParticleSystem.Particle[] particleArr; // 粒⼦数组private CirclePosition[] circle; // 极坐标数组public int count = 10000; // 粒⼦数量public float size = 0.03f; // 粒⼦⼤⼩public float minRadius = 1.0f; // 最⼩半径private float oldMinRadius;public float maxRadius = 2.0f; // 最⼤半径private float oldMaxRadius;public bool clockwise = true; // 顺时针|逆时针public float speed = 2f; // 速度public float pingPong = 0.00001f; // 游离范围// Start is called before the first frame updateprivate Mesh mesh;int meshVerCount = 0;void Start(){particleArr = new ParticleSystem.Particle[count];circle = new CirclePosition[count];// 初始化粒⼦系统//particleSys = this.GetComponent<ParticleSystem>();particleSys = this.GetComponentsInChildren<ParticleSystem>()[0];var main = particleSys.main;main.startSpeed = 0; // 粒⼦位置由程序控制main.startSize = size; // 设置粒⼦⼤⼩main.loop = false;main.maxParticles = count; // 设置最⼤粒⼦量particleSys.Emit(count); // 发射粒⼦particleSys.GetParticles(particleArr);// particleSys.trails.enabled.Equals(true);// particleSys.trails.oldMinRadius = minRadius;oldMaxRadius = maxRadius;//mesh = this.GetComponent<MeshFilter>().mesh;//mesh = this.GetComponentInChildren<MeshFilter>().mesh;RandomlySpread(); // 初始化各粒⼦位置}// Update is called once per frameprivate int tier = 10; // 速度差分层数void Update(){//RandomlySpread();if(isChanged()){RandomlySpread();oldMinRadius = minRadius;oldMaxRadius = maxRadius;}// mesh = this.GetComponentInChildren<MeshFilter>().mesh;// meshVerCount = mesh.vertexCount;for (int i = 0; i < count; i++){if(i < meshVerCount){//下标靠前的粒⼦吸附到mesh的顶点上particleArr[i].position = mesh.vertices[i];}else{//光环if (clockwise) // 顺时针旋转//circle[i].angle -= 0.1f;circle[i].angle -= (i % tier + 1) * (speed / circle[i].radius / tier);else // 逆时针旋转//circle[i].angle += 0.1f;circle[i].angle += (i % tier + 1) * (speed / circle[i].radius / tier);// 粒⼦在半径⽅向上游离circle[i].time += Time.deltaTime;circle[i].radius += Mathf.PingPong(circle[i].time / minRadius / maxRadius, pingPong) - pingPong / 2.0f;// 保证angle在0~360度circle[i].angle = (360.0f + circle[i].angle) % 360.0f;float theta = circle[i].angle / 180 * Mathf.PI;particleArr[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), 0f, circle[i].radius * Mathf.Sin(theta)); }}particleSys.SetParticles(particleArr, particleArr.Length);}void RandomlySpread(){for (int i = 0; i < count; ++i){ // 随机每个粒⼦距离中⼼的半径,同时希望粒⼦集中在平均半径附近float midRadius = (maxRadius + minRadius) / 2;float minRate = Random.Range(1.0f, midRadius / minRadius);float maxRate = Random.Range(midRadius / maxRadius, 1.0f);float radius = Random.Range(minRadius * minRate, maxRadius * maxRate);// 随机每个粒⼦的⾓度float angle = Random.Range(0.0f, 360.0f);float theta = angle / 180 * Mathf.PI;// 随机每个粒⼦的游离起始时间float time = Random.Range(0.0f, 360.0f);circle[i] = new CirclePosition(radius, angle, time);particleArr[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), 0f, circle[i].radius * Mathf.Sin(theta));}particleSys.SetParticles(particleArr, particleArr.Length);}public bool isChanged(){if(oldMinRadius == minRadius && oldMaxRadius == maxRadius)return false;return true;}}public class CirclePosition{public float radius = 0f, angle = 0f, time = 0f;public CirclePosition(float radius, float angle, float time){this.radius = radius; // 半径this.angle = angle; // ⾓度this.time = time; // 时间}}球体按⽗节点中⼼向外破碎,⽗物体有⼦物体,⼦物体按⽗物体中⼼向外扩散using System.Collections;using System.Collections.Generic;using UnityEngine;public class BallBroken : MonoBehaviour{///[Header("nihhhhh")]public List<Transform> trans;public float speed = 0.1f;public float fillTime = 1.0f;public float myTick =0.0f;public bool isv;//Vector3[] tagetPos;//Vector3[] startPos;public List<Vector3> basePos;public List<Vector3> startPos;public List<Vector3> tagetPos;//Time time;// Start is called before the first frame updatevoid Start(){//mesh = this.GetComponent<MeshFilter>().mesh;trans =new List<Transform>();for(int i=1;i<this.GetComponentsInChildren<Transform>().Length;i++){trans.Add(this.GetComponentsInChildren<Transform>()[i]);}basePos = new List<Vector3>();startPos = new List<Vector3>();tagetPos = new List<Vector3>();for(int i = 0; i < trans.Count; i++){basePos.Add(trans[i].localPosition);startPos.Add(trans[i].localPosition);tagetPos.Add(trans[i].localPosition + trans[i].localPosition);}}// Update is called once per framevoid Update(){for(int i = 0; i < trans.Count; i++){trans[i].localPosition = Vector3.Lerp(startPos[i],tagetPos[i],Mathf.Sin(Time.time)); }}}。
Unity3D一些比较基本的脚本及组件(C#)
Unity3D⼀些⽐较基本的脚本及组件(C#)通过代码创造图形//创建顶点,创建序列,创建⽹格,然后把⽹格赋给⽹格序列器//draw a trianglevoid Start () {Vector3[] vs = new Vector3[3];vs[0] = new Vector3(0,0,0);vs[1] = new Vector3(1,0,0);vs[2] = new Vector3(0,1,0);int[ts] = new int[3];ts[0] = 0;ts[1] = 1;ts[2] = 2; //要注意顺序,要⽤左⼿系,法线向外,拇指向外Mesh mesh = new Mesh();GetComponet<MeshFilter>().mesh = mesh;mesh.vertices = vs; // vertices⾄⾼点mesh.triangles = ts;}///* */////draw a triangle程序封装代码public GameObject Create Triangle(){GameObject obj = new GameObject(“Triangle”);MeshFilter mf = obj.AddComponet<MeshFilter>();obj.AddComponent<MeshRender>();Mesh mesh = new Mesh();mesh.vertices = nes[]{new Vector3(0,0,0);new Vector3(3,0,0);new Vector3(0,3,0);};mesh.triangles = new[]{0,2,1//不⽤分号,初始化系,直接把初始值放进去};mf.mesh = mesh;return obj;}Camera 的性质与使⽤public CameraClearFlags clearFlags; //clearFlags是相机清除表识public ColorbackgroundColor; //给定他的颜⾊,背景⾊,只有单⾊才起作⽤public int cullingMask; //提出掩码public class chapter6 : MonoBehaviour{public GameObject cube;void Start(){ber = 9; //把cube设置在第9层Camera cam = this.GetComponet<Camera>()’cam.clearFlags = CameraClearFlags.SolidColor;cam.backgroundColor = new Vector3(1,0,0,0); //表⽰设置颜⾊cam.cullingMask = 9; //表⽰第9层的都不会被渲染出来,也就是说cube不会显⽰出来}}//CameraClearFlags是⼀个枚举类型,有以下四个成员:solidColor 表⽰⽤backgroundColor所制定的填充背景skybox 表⽰天空盒,模拟天空效果填充Depth 只是清除深度缓存,保留上⼀帧所使⽤的颜⾊Nothing 不进⾏背景清除,这种情况在游戏和模拟应⽤中⽐较少⽤public bool orthographic;//⽤于读取和设定相机的投影⽅式,如果为true则表⽰是正交投影,否则为透视投影;正交投影可⽤于UI和2D开发public float orthographicSize; //⽤以指定正交投影的视景体的垂直⽅向尺⼨的⼀半public Rect rect; //相机对应的视⾓⼝的位置和⼤⼩,rect以单位化形式制定相机视⼝在屏幕中的位置和⼤⼩,位置⼤⼩取值范围为0~1,满屏为1Camera main = this.gameObject.GetComponet<Camera>();this.gameObject.SetActive(false);Camera cam0 = camGO0.AddComponet<Camera>();cam0.orthographic = true;cam0.transform.position = main.transform.position;cam0.transform.rotation = main.transform. rotation;cam0.orthographicSize = 2.0f; //指物体渲染后显⽰的⼤⼩远近,数值越⼤,相机视⼝越靠近该物体,从⽽该物体显⽰出来的更加⼤cam0.rect = new Rect(0f,0f, 0.5f, 0.5f); //前两个参数是camera的位置,后⾯两个参数设置相机⼤⼩(0.5f,0.5f)表⽰占x轴的⼆分之⼀,y轴的⼆分之⼀,所以总共占渲染窗⼝的四分之⼀Camera cam1 = camGO1.AddComponet<Camera>();cam1.orthographic = true;cam1.transform.position = main.transform.position;cam1.transform.rotation = main.transform. rotation;cam1.orthographicSize = 7.0f;cam1.rect = new Rect(0.5f, 0.5f, 0.5f, 0.5f);}Material,Shader,Texture(材质,着⾊器,纹理)光照、纹理等让物体更加的真实。
(2020年整理)Unity3D常用脚本.pptx
if(screenbutton==true) if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-190,60,50),"Scene1")){
print("You click Scene1"); Application.LoadLevel (1); screenbutton = false; }else if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-130,60,50),"Scene2")){ print("You click Scene2"); Application.LoadLevel (2); screenbutton = false; }else if( GUI.Button(Rect(Screen.width/2-375,Screen.height/2-0,50,50),"Quit")){ print("You click Quit"); Application.Quit(); } } 心得: 场景转换时,这个程序贴在按钮界面场景中。在 Build Setting(导出)(在 File 下)菜单中加 入所需场景。
var particle : GameObject;
function Start(){ DontDestroyOnLoad(this); screnbutton=true;
word = Text; Text = ""; yield WaitForSeconds (2); TypeText ();
Unity脚本基础2
Page 4
对象的创建、克隆与销毁
程序动态创建游戏对象 GameObject cube=GameObject.CreatePrimitive(PrimitiveType.Cube);//用 于创建基本体 cube.nae=“cube1”;//设定名字 Cube.renderer.material.color=Color.red; 程序动态克隆对象、销毁对象 GameObject obj=(GameObject)Instantiate(cube); Destroy(obj,1F); 动态创建出来的对象运行时在Hierarchy中可以看到 克隆游戏对象产生复制对象的效率高,比如游戏中产生大量的子 弹调用Instantiate来生成对象,Destroy(obj)是立即放到构造函数中,而是放到Start()方法中。 放到游戏对象中的脚本(实例化)可以在Inspector中修改属 性,get/set写法属性不被识别,直接public字段就能当属性用, 不写修饰符就是私有private。
Page 3
脚本入门2-MonoDevelop脚本编辑器介绍
Page 2
脚本入门2-MonoDevelop脚本编辑器介绍
项目工程注意分层设计。 _Scenes: 存放场景 _Scripts:存放脚本 Resources:资源包 Textures: 贴图 Materials: 材质(主要为.mat文件) Audios:声音 Models: 模型(存放FBX文件)
Unity3D动画脚本
Unity3D动画脚本 Animation Scripting有时你需要程序化的驱动你的角色骨骼. 例如你可能需要你的角色的头注视3d 空间的某个点. 这个活最好让脚本来干. 幸运的是, Unity做这个很容易. 在Unity 中所有骨骼来驱动蒙皮网格(skinned mesh)的变换(Transforms). 因而你可以给角色的骨骼写脚本,就和其他GameObject一样.很重要的一点是动画系统updates the Transforms 是在Update() function调用之后,LateUpdate() function 调用之前. 因而如果你要调用 LookAt() function 你应该在 LateUpdate() 中调用,覆盖动画播放.布娃娃系统Ragdolls 也是用同样的方法制作出来的. 你可以简单的把刚性物体(Rigidbodies), 角色关节(Character Joints) 和胶囊碰撞体(Capsule Colliders)连接给不同的骨骼. 这样物理系统就可以作用于蒙皮角色(skinned character).动画播放时为了让角色受动画系统的控制,可以设置物体为动力学物体(isKinematic),当需要让他受物理控制时把该属性取消。
角色死亡时,可以销毁原始模型,创建一个布娃娃代替。
同样,飞机车辆等的爆炸效果,最好也是替换成另外一个由一批带有刚体的部件组成的预制件,部件上可以增加一些粒子特效来实现烟雾火焰等效果。
动画融合(Animation Blending )可以实现动作转化时的平滑过渡。
动画混合(Animation Mixing )和附加动画(Additive Animations )可以削减游戏创建的动画片段的数量。
动画可以和其他动画以各种组合一起使用。
让一些动画只应用给身体的一部分。
例如,有个一个挥手动画,想要在空闲角色或正行走的角色播放挥手动画。
没有动画混合,您必须创建两个手挥舞着动画:一个用于空闲,一个用于行走。
Unity3D常用代码集合
}
}
2、检测输入
function Update(){
if(Input.GetButtonUp("Jump")){
Debug.Log("We Have Hit the Space Bar!");
}
}
3、销毁对象
function Start(){
Destroy(gameObject.Find("Box"),3);
}
建立JAVA,把代码拖入到空GameJect上,然后把Prefab拖入到公共变量上。
5、简易定时器
varmyTimer:float=5.0;
function Update(){
if(myTimer>0){
myTimer-=Time.deltaTime;
}
if(myTimer<=0){
Debug.Log("GAME OVER");
Unity3D常用代码集合
1、基本碰撞检测代码
function OnCollisionEnter(theCollision:Collision){
if(=="Floor"){
Debug.Log("Hit the floor");
}elseif(=="Wall"){
}
}
6、物体在屏幕上移动
varspeed:float=5.0;
function Update(){
transform.Translate(Vector3(0,0,speed)*Time.deltaTime);
unity3d功能脚本大全
1.右键菜单function OnGUI(){if(Input.GetMouseButton(1)){GUILayout.BeginArea (new Rect (Input.mousePosition.x,Screen.height-Input.mousePosition.y,200,200));GUILayout.Box("This is a Context Menu");GUILayout.EndArea ();}}/*if(Input.GetMouseButton(0))Debug.Log("Pressed left click.");if(Input.GetMouseButton(1))Debug.Log("Pressed right click.");if(Input.GetMouseButton(2))Debug.Log("Pressed middle click.");*/2.用辅助键/双键控制视角using UnityEngine;using System.Collections;public class ControlCamerMove : MonoBehaviour {void Update () {if(Input.GetKeyDown(KeyCode.LeftControl)){this.GetComponent<MouseLook>().enabled = false;}if(Input.GetKeyUp(KeyCode.LeftControl)){this.GetComponent<MouseLook>().enabled = true;}}}3.与网页交互-打开网页function OnGUI()bel("当前场景:"+ Application.loadedLevelName);if(GUILayout.Button("打开网页"))Application.OpenURL("");}4.在unity中播放视频--绘制#pragma strictvar movTexture:MovieTexture;function Start (){movTexture.loop = true;}function OnGUI(){GUI.DrawTexture(new Rect (0,0,Screen.width,Screen.height),movTexture,ScaleMode.StretchToFill);if(GUILayout.Button("播放/继续")){if (!movTexture.isPlaying){movTexture.Play();}}if(GUILayout.Button("暂停播放")){movTexture.Pause();}if(GUILayout.Button("停止播放")){ 贴图movTexture.Stop();}}5.在unity中播放视频--作为plane的材#pragma strictvar movTexture:MovieTexture;function Start (){this.renderer.material.mainTexture = movTexture;movTexture.loop = true;}function OnGUI(){if(GUILayout.Button("播放/继续")){if (!movTexture.isPlaying){movTexture.Play();}}if(GUILayout.Button("暂停播放")){movTexture.Pause();}if(GUILayout.Button("停止播放")){movTexture.Stop();}}6.用材质偏移模拟水流效果using UnityEngine;using System.Collections;public class Whatflow : MonoBehaviour {public float scrollSpeed=3;void Update () {float offset = Time.time*scrollSpeed;renderer.material.SetTextureOffset("_MainTex",new Vector2(0,offset));}}7.从网页上获取一张图片并动态使用var url = "/attachments/images/201011/20101110/20101109_da85542f8635f3c5 b963vil1B8qeeS9O.jpg";function Start () {var www : WWW = new WWW (url);//定义www为WWW类型并且等于被下载的内容。
Unity3D命令手册(下)
Unity3D命令手册(下)第三章 Assets(资源)Reimport 重新导入重新导入资源Create 创建创建物件--Folder 创建文件夹--JavaScript 创建JAVA脚本--C Sharp Script 创建C Sharp脚本--Boo Script 创建Boo脚本--Shader 创建着色脚本--Prefab 创建预置--Animation 创建动画==Compressed 压缩==Sample Rate 采样频率==Wrap Mode 换行模式==Default 默认==Once 一次==Loop 循环==PingPong 反复==ClampForever 永远--Material 材质球--Cubemap 立方体贴图--Lens Flare 光晕--Custom Font 自定义字体--Physic Material 自然材质球--GUI Skin GUI皮肤Show in Explorer 在资源管理器中显示在资源管理器中显示文件的位置Open 打开(打开脚本)打开一个脚本文件Import New Asset... 导入新的资源导入新的资源文件Refresh 刷新刷新Import Package... 导入资源包导入资源包Export Package... 导出资源包导出资源包Select Dependencies 选择相关选择与物件相关的链接文件Export ogg file 导出OGG文件导出OGG文件Reimport All 重新导入所有重新导入所有资源Sync VisualStudio Project 同步视觉工作室项目同步视觉工作室项目第四章 GameObject(游戏对象)Create Empty 创建一个空的游戏对象创建一个空的游戏对象Create Other 创建其他组件创建其他组件-Particle System 粒子系统-Camera 摄像机-GUI Text 图形文本-GUI Texture 图形纹理-3D Text 3D文字-Point Light 点光源-Spotlight 聚光灯-Directional Light 平行光-Cube 立方体-Sphere 球体-Capsule 药丸体-Cylinder 圆柱体-Plane 平面-Ragdoll 布娃娃(不准)--Root 根--Left Hips 左臀部--Left Knee 左膝--Left Foot 左脚--Right Hips 右臀部--Right Knee 右膝--Right Foot 右脚--Left Arm 左臂--Left Elbow 左肘--Right Arm 右臂--Right Elbow 右肘--Middle Spine 中央脊柱--Head 头--Total Mass 总质量--Strength 气力--Flip Forward 倒装转发(不准)Center On Children 子物体归位到父物体中心点将子物体归位到父物体中心点Make Parent 创建子父集创建子父集关系Clear Parent 取消子父集取消子父集关系Apply Changes T o Prefab 应用变更为预置应用当前变更为预置Move To View 移动物体到视窗的中心点移动物体到视窗的中心点Align With View 移动物体与视窗对齐移动物体与视窗对齐Align View to Selected 移动视窗与物体对齐移动视窗与物体对齐第五章 Component(组件)Mesh 网格--Mesh Filter 网格过滤器--Text Mesh 文字网格--Mesh Renderer 网格渲染(网格生成器)--Combine Children 结合子物体Particles 粒子--Ellipsoid Particle Emitter 椭球粒子发射器--Mesh Particle Emitter 网格粒子发射器--Particle Animator 粒子动画--World Particle Collider 世界粒子碰撞机--Particle Renderer 粒子渲染--Trail Renderer 径渲染Physics 物理--Rigidbody 刚体--Character Controller 字符控制器--Box Collider 盒子碰撞机--Sphere Collider 球体碰撞机--Capsule Collider 胶囊碰撞机--Mesh Collider 网格碰撞机--Wheel Collider 轮体碰撞机--Raycast Collider 光线投射碰撞机--Hinge Joint 关键骨节--Fixed Joint 固定骨节--Spring Joint 弹性骨节--Character Joint 字符骨节--Configurable Joint 联合骨节--Constant Force 恒力Audio 音频--Audio Listener 音频监听--Audio Source 音频源Rendering 渲染--Camera 摄像机--Light 灯光--Projector 投影机--Halo 晕染--Lens Flare 光晕--GUI Texture 图形纹理--GUI Text 图形文本--Skybox 天空盒--GUI Layer 图形层--Flare Layer 闪光层--Halo Layer 晕染层Miscellaneous 杂项--Animation 动画--Line Renderer 线渲染--Network View 网络浏览--Terrain Collider 地形碰撞机Scripts 脚本--Activate Trigger 激活触发--Drag Rigidbody 刚体拖动--FPSWalker 新鲜粮食店(不准)--Terrain 地形--Timed Object Destructor 定时对象的析构--Water Simple 水简诉Camera-Control 摄像机控制--Mouse Look 鼠标查看--Mouse Orbit 鼠标轨道--Smooth Follow 光滑后续--Smooth Look At 光滑预览第六章 Terrain(地形)Create Terrain 创建地形创建一个新的地形Import Heightmap - Raw...导入高度图导入已存地形的高度图Export Heightmap - Raw...导出高度图导出当前地形的高度图Set Resolution...设置分辨率设置分辨率(设置地形的大小比例等)Create Lightmap...创建光影图创建光影图Mass Place Trees...批量种植树批量的在地形上种植树Flatten Heightmap...展平高度图在一个高度上展平地形Refresh Tree and Detail Prototypes 刷新树及预置细节刷新树和预置的细节第七章 Window(窗口)Next Window 下个窗口显示下一个窗口Previous Window 前窗显示最前的窗口Layouts 布局布局模式--2 by 3 2和3--4 Split 4视窗--Tall 单视窗--Wide 宽屏--Save Layout 保存布局--Delete Layout 删除布局--Revert Factory Settings 恢复出厂设置Scene 场景窗口显示场景窗口Game 游戏窗口显示游戏窗口Inspector 检视窗口显示检视窗口Hierarchy 层次窗口显示层次窗口Project 工程窗口显示工程窗口Animation 动画窗口显示动画窗口Profiler 探查窗口显示探查窗口Asset Server 资源服务器显示资源服务器Console 控制台显示控制台第八章 Help(窗口)About Unity 关于Unity显示关于Unity的信息Enter serial number 输入序列号输入软件序列号Unity Manual Unity手册显示Unity使用手册Reference Manual 参考手册显示Unity参考手册Scripting Manual 脚本手册显示Unity 脚本手册Unity Forum Unity论坛显示Unity论坛Welcome Screen 欢迎窗口显示欢迎窗口Release Notes 发行说明显示发行说明Report a Problem 问题反馈提交问题反馈。
Unity3D的脚本-script入门
Unity3D的脚本-script入门Unity3D的基本操作很容易就能掌握了,接下来就是游戏系统的核心部分:脚本。
什么是Script(脚本)?简而言之,就是使用代码来执行一系列动作命令的特殊文本,它需要编译器来从新解读。
U3D内部如何解读脚本,这不是我们所要关心的—这是引擎开发人员的活,我们所要知道的就是脚本的使用规则。
【三种语言的特点】U3D支持C#,JavaScript,BOO三种语言格式的代码编写。
首先来简单介绍下这三种语言的特点:对U3D来说,这是入门级的脚本语言,U3D内置的函数都能通过JS方便的调用。
语法上,JS和传统的C语言差不多,需要分号结束符,变量类型定义,大括号……不过它的变量类型定义,是通过冒号接在变量右边,如:Name:string=”Li”。
相对其他两种语言,使用JS 语法,很多函数不需要实例化就能直接使用,如:vector3 direction=vector3(1,2,3)。
如果使用C#,则需要使用new关键字:vector3 direction=new vector3(1,2,3)。
JavaScript直接继承自U3D的MonoBehaviour类,因此不像C#和BOO那样需要使用Using或Import来加载类库。
这看似省心,不过因为缺少了加载特殊类库,JavaScript能调用的第三方函数不多(当然,我们可以载入net类库给JavaScript调用,虽然看着有点奇怪……)。
*注意:JavaScript不是Java,同时,U3D中的JavaScript也有别于独立的JavaScript语言。
C#(发音C Sharp),微软开发的面向对象编程语言。
由于有强大的net类库支持,以及由此衍生出的很多跨平台语言,C#逐渐成为U3D开发者推崇的程序语言。
U3D内置的脚本范例中,C#脚本也占了很大一部分(其他脚本是JavaScript脚本)。
另外,在装有VisualStudio 的电脑上,我们也可以使用微软的脚本编辑工具来编写U3D脚本。
Unity3d 脚本参考大全
一、脚本概览这是一个关于Unity内部脚本如何工作的简单概览。
Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的。
在脚本对象内部不同的函数被特定的事件调用,最常用的列在下面:Update:这个函数在渲染一帧之前被调用。
这里是大部分游戏行为代码被执行的地方,除了物理代码。
FixUpdate:这个函数在每个物理时间步被调用一次。
这是处理基于物理游戏行为的地方。
在任何函数之外的代码:在任何函数之外的代码在物体被加载的时候运行。
这个可以用来初始化脚本状态。
注意:文档的这个部分假设你是用Javascript,参考用C#编写脚本获取如何使用C#和Boo编写脚本的信息。
你也能定义时间句柄。
他们的名称都以On开始,(例如OnCollisionEnter).为了查看完整的预定义时间的列表,请参考MonoBehaviour文档。
概览:常用操作大多数游戏物体的操作是通过游戏物体的Transform和/或Rigidbody来做的。
在行为脚本内部他们可以分别通过transform和rigidbody访问,因此如果你想绕着Y轴每帧旋转5度,你可以如下写:function Update(){transform.Rotate(0,5,0);}如果你想向前移动一个物体,你应该如下写:function Update(){transform.Transtate(0,0,2);}概览:跟踪时间Time类包含一个非常重要的类变量,成为deltaTime.这个变量包含从上一次调用Update或FixedUpdate(根据你是在Update函数还是在FixedUpdate函数中)到现在的时间量。
所以对于上面的例子,修改它使这个物体以一个恒定的速度旋转而不依赖于帧率:function Update(){transform.Rotate(0,5*Time.deltaTime,0);移动物体:function Update(){transform.Transtate(0,0,2*Time.deltaTime);}如果你加或减一个每帧改变的值,你应该将它与Time.deltaTime 相乘,当你乘以Time.deltaTime时,你实际表达的是:我想以10米/秒移动这个物体而不是10米/帧。
Unity3D脚本手册
Unity3D脚本⼿册1、private Ray ray; --定义射线ray = Camera.main.ScreenPointToRay(Input.mousePosition); --摄像机发出的射线投射⿏标到屏幕中所碰到的第⼀个点2、private RaycastHit hit; --光线投射反馈,⽤来获取从raycast函数中得到的信息反馈的结构--使⽤物理类检查射线的碰撞 物理射线使⽤步骤 第⼀步:创建⼀根射线。
第⼆步:检查这根射线与其他物体的碰撞,得到碰撞信息。
第三步:通过碰撞信息对碰撞到的物体进⾏处理。
if (Physics.Raycast(ray, out hit, Mathf.Infinity) && Input.GetMouseButtonDown(0)){ //射线,投射,长度(正⽆穷) GameObject.Destroy(hit.collider.gameobject);}3、var mousePosition = new Vector2(Input.mousePosition.x, Screen.height - Input.mousePosition.y); --⼆维向量,即dfgui界⾯4、DragStart、DragEnd是在⾃⾝触发该事件,DragDrop是在碰到另⼀控件触发该事件。
5、动态给slicedSprite赋值,使⽤SpriteName属性就⾏。
6、单例模式:public static类 instance = null;void Awake(){ //将该类的实例代⼊instance变量 _instance = this;}7、位置更新:void FixUpdate(){Vector2 pos = this.GetComponent<dfcontrol>().GUIManager.ScreenToGui(Input.mousePoint);//得到⿏标的位置 Self.RelativePosition = new Vector3(pos.x-offsetpos.x,pos.y-offsetpos.y,0);//随着⿏标移动⽽移动}8、设置控件的z-order:BringToFont()--移到最上层SendToback()--移到最下层9、获取⿏标在控件中的位置Ray Ray = control.GetCamera().ScreenPointTORay(Input.mousePoint);Vector2 offset = (control as dfSlicedSprite).GetHitPosition(ray);类名.show(offset);private static Vector2 offsetPos = new Vector2(0,0);public static void show(spriteName,Vector2 hitPos){Instance.GetComponent<dfSlicedSprite>().SpriteName = spriteName;offsetPos = hitPos;}10、实例化游戏物体:GameObject.Instantiate(object,Vector3,Quaternion);(1)参数说明:Object:⽤于实例化的预制体;Vector3:实例化后⽣成的物体所在的位置;Quaternion[四元数]:实例化后⽣成的物体的旋转状态;Quaternion.identity:⽆旋转;(2)构造随机位置位置是⽤ Vector3 类型进⾏表⽰的。
我学院:Unity3D脚本概述
学IT技能上我学院网Unity3D脚本概述和其他的3D软件一样,Unity3D作为一个类播放器的3D集成软件,具有良好的时间层级关系。
比如Start()里面的语言,总是在播放器初始化时执行一次,而后就不再执行。
例如下面用JS写的一个例子。
在菜单栏上选中——> ——> ,将下面这段代码拖拽给Hierarchy【层次清单栏】中任意一个对象。
您就会在播放器刚开始播放的时候,在左下角的控制台面板中看到这句话,证明您的Game播放器已经开始工作了。
如图5.1所示:当然有了初始化函数,就一定会有刷帧函数Update(),该函数内所有的代码会在播放器每播放一帧时执行。
例如下面用JS写的一个例子,在菜单栏上选中——>学IT技能上我学院网——> ,输入如下代码:该代码会在播放器每播放一帧的时候,显示游戏开始到现在所消耗的时间值。
Unity3D中有着非常强大的接口处理功能,您可以在代码中为对象制定任意一个空接口用于和对应类型的对象进行交互,例如下面用JS写的一个例子,在菜单栏上选中——> ——> ,输入如下代码:除了数字作为接口外,接口还可以是对象,例如下面用JS写的一个例子,在菜单栏上选中——> ——> ,输入如下代码:学IT技能上我学院网,cubeGO的后面有个很明显未定义对象填写栏,然后我们把想要使之运动的物体拖拽到这个上面来,当我们运行游戏时,只要按下“G”键就可以看到被拖拽的物体作为“cubeGO”的指代对象,朝着Z轴方向运动了。
Unity3D中的C#Script编程的注意事项也许您在学习Unity3D之前,已经是一位C#的编程高手了。
但在Unity3D中的C#并不像真正的C#那般强大,在Unity3D的C#中必须全部继承自MonoBehaviour。
下面为一段C#Script的完整代码:除此之外它不支持空间命名,但官方说他们很有可能会在以后的版本中支持这一功能。
unity3d脚本编程
unity3d脚本编程⼀创建和使⽤脚本1 概述GameObject的⾏为都是被附加到其上⾯的组件控制,脚本本质上也是⼀个组件。
在unity中创建⼀个脚本,默认内容例如以下:using UnityEngine;using System.Collections;public class MainPlayer : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}⼀个脚本通过实现⼀个派⽣⾃”MonoBehaviour”的类来与unity的内部⼯作机制建⽴联系。
能够将新创建的组件类型的类作为⼀个蓝图,该类作为⼀个新类型的组件被附加到游戏对象。
每次将⼀个脚本组件附加到游戏对象,都会创建⼀个该蓝图定义的对象的实例。
创建的脚本⽂件的⽂件名称必须与⾥⾯的类名同样,这样才⼲将其附加到游戏对象上。
须要注意到的主要事情是,该类中定义的两个函数。
Update函数处理游戏对象的帧更新相关的操作。
这个可能包含移动,触发动作以及对⽤户输⼊的反馈,基本上在游戏过程期间须要处理的不论什么事情都能够在这⾥⾯处理。
Start函数在游戏開始前被unity调⽤(⽐如,在Update被第⼀次调⽤之前),因⽽是⼀个进⾏初始化操作的理想位置。
可能会疑惑为什么不把初始化操作放在类的构造函数中,这是由于对象的构造是由编辑器处理的,在游戏開始的时候并不如想象中那样会发⽣。
假设为⼀个脚本组件定义构造器,它会和unity的正常操作发⽣⼲扰从⽽导致⼀些问题。
脚本被创建之后是处于不激活状态的,仅仅有将它的⼀个实例附加到⼀个游戏对象之后代码才会被激活。
同⼀时候,⼀个游戏对象的⼀个类型的组件仅仅能有⼀个,也就是能够附加到游戏对象的脚本组件不能超过⼀个。
2 变量就是指的类的成员变量,仅仅只是在unity这⾥将成员变量设为公有的时候,将其附加到游戏对象后,能够在游戏对象的监视⾯板中的脚本组件那栏⾥⾯看到该公有变量,也就是说能够在编辑器⾥⾯直接对该公有变量进⾏赋值,同⼀时候在debug状态下也能够在⾯板中看到它的值。
unity3d基础文档(gui入门,脚本概览,命令手册)
Unity3d-GUI入门这一段将解释UnityGUI控制所需的脚本。
UnityGUI控制UnityGUI控制是利用一类被称为OnGUI()的函数,只要在控制脚本激活的状态下,OnGUI()函数可以在每帧调用,就像Update( )函数一样。
GUI控制在结构上相当简单,这种结构在下面这个例子中十分明显:/* Example level loader */function OnGUI (){// Make a background boxGUI.Box (Rect (10,10,100,90), "Loader Menu");// Make the first button. If it is pressed, Application.Loadlevel (1) will be executedif (GUI.Button (Rect (20,40,80,20), "Level 1")) {Application.LoadLevel (1);}// Make the second button.if (GUI.Button (Rect (20,70,80,20), "Level 2")) {Application.LoadLevel (2);}}这个例子是一个完整的,功能层的装载,如果你把这段脚本复制粘贴到GameObject上,在Play模式下你将会看到如下的菜单出现。
这个装载菜单是由例子中的代码创建的。
下面让我们看一下这个例子中代码的细节:在GUI的第一行中,GUI.BOX (Rect(10,10,100,90),”Loader Menu”);通过头文本“Loader Menu”显示一个Box控制,它通过一个典型的GUI控制定义,这样我们可以在第一时间解释。
在GUI的下一行中是一个Button控制定义,要注意它与BOX控制之间细微的差别。
Unity3D常用脚本PDF.pdf
场景转换:var screenbutton: boolean;function Start(){DontDestroyOnLoad(this);screenbutton = true;}function Update () {if(Input.GetKeyDown(KeyCode.Escape)){screenbutton = true;}}function OnGUI(){if(screenbutton==true)if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-190,60,50),"Scene1")){ print("You click Scene1");Application.LoadLevel (1);screenbutton = false;}else if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-130,60,50),"Scene2")){ print("You click Scene2");Application.LoadLevel (2);screenbutton = false;}else if( GUI.Button(Rect(Screen.width/2-375,Screen.height/2-0,50,50),"Quit")){ print("You click Quit");Application.Quit();}}心得:场景转换时,这个程序贴在按钮界面场景中。
在Build Setting(导出)(在File下)菜单中加入所需场景。
0为按钮界面。
可以无限增加场景。
}else if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-130,60,50),"Scene2")){ print("You click Scene2");Application.LoadLevel (2);screenbutton = false;复制此段程序并做修改。
Unity3D脚本中文教程
Unity3D脚本中文教程Part1 一、脚本概览这是一个关于Unity内部脚本如何工作的简单概览。
Unity内部的脚本是通过附加自定义脚本对象到游戏物体组成的。
在脚本对象内部不同志的函数被特定的事件调用。
最常用的列在下面Update 这个函数在渲染一帧之前被调用这里是大部分游戏行为代码被执行的地方除了物理代码。
FixedUpdate 这个函数在每个物理时间步被调用一次这是处理基于物理游戏的地方。
在任何函数之外的代码在任何函数之外的代码在物体被加载的时候运行这个可以用来初始化脚本状态。
注意文档的这个部份假设你是用Javascript参考用C编写获取如何使用C和Boo编写脚本的信息。
你也能定义事件句柄它们的名称都以On开始例如OnCollisionEnter为了查看完整的预定义事件的列表参考MonoBehaviour 文档。
概览常用操作大多数游戏物体的操作是通过游戏物体的Transform或Rigidbody来做的在行为脚本内部它们可以分别通过transform和rigidbody访问因此如果你想绕着Y轴每帧旋转5度你可以如下写 function Update 如果你想向前移动一个物体你应该如下写 function Update 概览跟踪时间 Time类包含了一个非常重要的类变量称为deltaTime 这个变量包含从上一次调用Update或FixedUpdate根据你是在Update函数还是在FixedUpdate函数中到现在的时间量。
所以对于上面的例子修改它使这个物体以一个恒定的速度旋转而不依赖于帧率 function Update 移动物体function Update transform. Translate 0 如果你加或是减一个每帧改变的值你应该将它与相乘。
当你乘以时你实际的表达我想以10米/秒移动这个物体不是10米/帧。
这不仅仅是因为你的游戏将独立于帧而运行同时也是因为运动的单位容易理解。
Unity3D常用脚本
场景转换:var screenbutton: boolean;function Start(){DontDestroyOnLoad(this);screenbutton = true;}function Update () {if(Input.GetKeyDown(KeyCode.Escape)){screenbutton = true;}}function OnGUI(){if(screenbutton==true)if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-190,60,50),"Scene1")){ print("You click Scene1");Application.LoadLevel (1);screenbutton = false;}else if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-130,60,50),"Scene2")){ print("You click Scene2");Application.LoadLevel (2);screenbutton = false;}else if( GUI.Button(Rect(Screen.width/2-375,Screen.height/2-0,50,50),"Quit")){ print("You click Quit");Application.Quit();}}心得:场景转换时,这个程序贴在按钮界面场景中。
在Build Setting(导出)(在File下)菜单中加入所需场景。
0为按钮界面。
可以无限增加场景。
}else if(GUI.Button(Rect(Screen.width/2-380,Screen.height/2-130,60,50),"Scene2")){ print("You click Scene2");Application.LoadLevel (2);screenbutton = false;复制此段程序并做修改。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
整理了一些Unity3D的简单脚本<二>
一些简单的GUI整理
#pragma strict
function Start () {
}
function Awake()
{
guiText.text="100%";
}
function Update () {
}
#pragma strict
function Start () {
}
//创建各种状态的图形接口
var T00:Texture2D;
var T25:Texture2D;
var T50:Texture2D;
var T75:Texture2D;
var T100:Texture2D;
//初始化填单时间
static var shotTime = 100;
function Update () {
//初始化动态加载图形GUI的对象
var shotTime_G = gameObject.Find("ShotTime_G");
//根据填单时间大小来加载不同的状态图形
if(shotTime<=0)
{
shotTime_G.guiTexture.texture = T00;
return ;
}
else if(shotTime<50)
{
shotTime_G.guiTexture.texture = T25;
return ;
}
else if(shotTime<75)
{
shotTime_G.guiTexture.texture = T50;
return ;
}
else if(shotTime<99)
{
shotTime_G.guiTexture.texture = T75;
return ;
}
if(shotTime>=99)
{
shotTime_G.guiTexture.texture = T100;
return ;
}
}
我发射的子弹:#pragma strict
function Start () {
}
var FirePoint:Transform;
var Bullet:Rigidbody;
//炮口火舌
var explosionPrefab:Transform;
//是否开火的开关
var openFireSwith=false;
//填弹时间
var waitFire=4;
/*void GetTime()
{
waitFire = Time.time;
}*/
function Update () {
//GetTime();
//var waitFire = Time.time;
if(Input.GetKeyDown(KeyCode.Space))
{
if(openFireSwith)
{
waitFire=Time.time;
var clone:Rigidbody;
clone=Instantiate(Bullet,FirePoint.position,FirePoint.rotation);
clone.velocity = transform.TransformDirection(Vector3.forward*100);
Instantiate(explosionPrefab,FirePoint.position,FirePoint.rotation);
openFireSwith=false;
}
}
if(Time.time <= (waitFire+4))
{
shotTimeG.shotTime = Mathf.Round((Time.time-waitFire)*25);
GameObject.Find("zou_GUI").guiText.text=Mathf.Round((Time.time-waitFire)*25)+"%";
}
if(Time.time>(waitFire+4))
{
openFireSwith=true;
}
}
对于鼠标点击发射来说,整理了如下脚本:
---炮弹碰撞:
var boomFire:Transform;
这里是声明了一个Transform类型的变量;
function OnCollisionStay(collision:Collision)
简单的碰撞检测函数
{
Instantiate(boomFire,this.transform.position,this.transform.rotation);
Destroy(gameObject);//销毁子弹;
}
---发射子弹:
#pragma strict
function Start () {
}
var FirePoint:Transform;
var Bullet :Rigidbody;
function Update () {
if(Input.GetKeyDown(KeyCode.Space))
{
var clone:Rigidbody;
clone=Instantiate(Bullet,FirePoint.position,FirePoint.rotation);
clone.velocity = transform.TransformDirection(Vector3.forward*100);
}
}
--消除爆炸后的残留物:
#pragma strict
function Start () {
}
var creationTime=Time.time;
function Awake()
{
creationTime=Time.time;
}
function Update () {
if(Time.time>(creationTime+2))
{
Destroy(gameObject);
}
}
跟踪时间
Time类包含了一个非常重要的类变量,称为deltaTime,这个变量包含从上一次调用Update 或FixedUpdate(根据你是在Update函数还是在FixedUpdate函数中)到现在的时间量。
所以对于上面的例子,修改它使这个物体以一个恒定的速度旋转而不依赖于帧率:function Update(){
transform.Rotate(0,5*Time.deltaTime,0);
}。