精选文章 unity3d基础02

unity3d基础02

作者:dengleize6745 时间: 2021-02-07 01:48:06
dengleize6745 2021-02-07 01:48:06
【摘要】调试: 
 在MonoDevelop里可以断点调试,注意绑定unity进程 
 使用Debug.Log()打印信息 
   
 创建游戏对象: 
 GameObject test = GameObject.CreatePrimitive(PrimitiveType.Cube); 
 GameObject t1 = instantiate(Resources.Load(“test”)) as ...

调试:

在MonoDevelop里可以断点调试,注意绑定unity进程

使用Debug.Log()打印信息

 

创建游戏对象:

GameObject test = GameObject.CreatePrimitive(PrimitiveType.Cube);

GameObject t1 = instantiate(Resources.Load(“test”)) as GameObject;

移动:

test.transform.position = new Vector3(0,0,0);

float translation = Time.deltaTime * 10; //使用这个移动的会慢一些

transform.Translate(translation,0,0);  // 不指定的,移动的就是脚本绑定的游戏对象

test = GameObject.Find ("Sphere");

test.transform.Translate(translation,0,0); //移动的就是那个球了

 

获取游戏对象:

GameObject.Find(“testname”);

获取一组:

public GameObject[] test; //先声明,此处不能实例化

test = GameObject.FindGameObjectsWithTag ("try"); //tag名可以自定义,在u3d里加好

//此时获取的是一组,可以写在Start()里面

test[1].transform.Translate(translation,0,0); //之后就可以使用了,如在update里

获取一个:

GameObject.FindGameObjectWithTag ("try");

 

数组:(声明--数组实例化--数组元素实例化)
声明: private Skill[] _skill;
数组实例化:_skill=new Skill[Enum.GetValues(typeof(SkillName)).Length];
元素实例化:for (int cnt = 0; cnt < _skill.length; cnt++)
_skill[cnt] = new Skill();
①另外可以声明数组后,利用函数返回值进行数组实例化,而且此时
GameObject[] go = GameObject.FindGameObjectsWithTag("Enemy");
②使用方式可以如:
foreach (GameObject enemy in go) {   }
③数组属于Array类,本身也有一些属性,如_skill.Length;

④函数传递数组时,形参用(Skill[] new_skill)即可(内部用new_skill.Length获取长度)。改变函数内形参的值,实参数组也会跟着改变。
 
2.无论是数组还是容器亦或者其它变量,都可以在MonoBehaviour子类中以public权限声明后,不在脚本内实例化,而是在Unity3D软件的检视面板中赋值实现实例化。
  对于GameObject,Texture2D等类型的变量(或数组以及容器),一般都是在检视面板赋值。(但GO类型也可以用寻找GO等函数实例化,Texture2D类型则可以用C#硬盘读取图片的方式赋值)

 

gameObject.GetComponent<组件名>(); //获取组件

gameObject.AddComonpent("组件名");  //添加组件

 

消息传递:

//cube1是cube的子对象

//cube的脚本里有void sayHi (string str) {Debug.Log(str + "@@@@");}

//cube1的脚本里有void sayHello(string str) {Debug.Log(str + "!!!!");}

①向上发消息:

cube1.SendMessageUpwards ("sayHi","hello"); //函数名+参数

②向自己的脚本里的函数发消息:

cube1.SendMessage ("sayHello","Hello");

③向下发消息:

temp.BroadcastMessage ("sayHello","Hello"); //temp是cube,这个写在cube脚本中

//向GameObject发送一条消息,则该GameObject上挂载的所有脚本都会接收到该条消息

 

预设prefab:

是一种资源类型,可被重复使用的游戏对象。它可以被置入多个场景中,又或者能够在一个场景中被多次置入。当你在一个场景中增加一个Prefabs,你就实例化了一个Prefabs。所有Prefabs实例都是Prefab的克隆,只要Prefabs原型发生改变,所有的Prefabs实例都会产生变化。

创建:

将Hierarchy中的游戏对象拖到Asset下;在project点create,然后再拖对象过来。

EG:

//脚本绑定在cube上,为cube添加Box collider,Is trigger指接受碰撞,为小球Sphere增//加Rigidbody,使能够下落,然后增加Sphere Collider.如果此时将cube勾去Mesh Render,//即会变透明,下面的代码即可显示:小球下落,碰撞,重回原处,下落。

//注意:碰撞双方不能都是Mesh Collider,会检测不到碰撞,如果一定要,勾选其中一个的Convex

public GameObject prefab; 

void OnTriggerEnter(Collider col) {

//注意此处第一个小球的名字为Sphere,而后来克隆的小球名字都为Sphere(Clone)

if (col.gameObject.name == "Sphere" || col.gameObject.name == "Sphere(Clone)"){

Destroy(col.gameObject);//销毁小球

}

prefab = Instantiate (Resources.Load("Sphere")) as GameObject;

}//实例化小球预设,我们从resources文件夹下载入预设

 

Unity 内置GUI的特点:将控件显示,事件响应都放在OnGUI函数中

实际,这种方式不够灵活且执行效率低,一般是采用第3方的NGUI插件来制作游戏界面

 

GUI.Label://没有框的

GUI.Label(new Rect(300,40,40,40),"你好");//X,Y,width,height,第2个参数显示文本内容

GUI.Button: 

  if (GUI.Button(new Rect(300,40,40,40),"你好")){...}

//通过在OnGUI里面判断GUI.Button是否返回true,显示是否按下

GUI.TetxField:

  txt=GUI.TextField(new Rect(300,40,40,40),txt,10);

//第2个参数表示输入框显示的内容,最后一个参数表示最大字符数

 

控件:

public float a,b,c,d;

void OnGUI() {

a = GUI.VerticalSlider (new Rect(0,50,200,200),a,0f,100f); //可以滑动的。a表示当前

b = GUI.HorizontalSlider (new Rect(500,60,200,200),b,0f,100f);//最小和最大

c = GUI.VerticalScrollbar (new Rect(0,100,200,200),c,100f,0f,100f);//第三个是size

d = GUI.HorizontalScrollbar (new Rect(500,100,200,200),b,100f,0f,100f);//不能滑

}

//大部分GUI控件都可以通过GUILayout绘制,自动计算位置

GUILayout.Button ("wooo");

 

脚本控制对象的变换:

①obj.transfrom.position = new Vector3(x,x,x) //这个是移动到指定位置

② obj.transform.Rotate(new Vector3(x,x,x))

③obj.transform.Translate(new Vector3(x,x,x)) //这个是平移

④obj.transform.localScale = new Vector3(x,x,x) //改变大小

注意:Vector3是指三维空间的向量,方向:

Vector3.left,Vector3.right x轴方向Vector3.up,Vector3.down y轴方向

Vector3.forward,Vector3.back z轴方向

 

常用工具类:

Time类:Time.time:  

游戏开始到现在的游戏时间:Time.deltaTime:

update方法中完成上一帧消耗的时间:

Time.fixedTime: FixedUpdate方法中固定消耗时间的综合(可以通过Edit->project setting->Time去设置)

 

Random.Range(min,max):

  返回最大和最小之间的一个数(包括最小值,不包括最大值)

Mathf类:Mathf.abs,Mathf.Sin()....

转载于:https://www.cnblogs.com/pxy7896/p/4671031.html

勿删,copyright占位
您找到想要的结果了吗?
unity3d基础02
提交成功!非常感谢您的反馈,我们会继续努力做到更好
分享文章到微博
分享文章到朋友圈

上一篇:10位程序员眼中的2007:寻找软件开…

下一篇:unity3d打包和包的使用

您可能感兴趣

  • Jmeter 基础

    JMeter 有两种controllers:Samplers 和 Logical Controllers. Samplers:它告诉JMeter 发送request 到 server 并且等待响应 Logical Controllers:用来修改一个sampler 重复的次数,可以定制逻辑告诉Jmeter决定什么时候发送请求。 记住要添加Lis...

  • 数据库原理及应用-编程讲解-流程控制基础-顺序分支循环

    select * from 学生 where len(姓名)=4 ----------------- 顺序结构 ----------------- –从上往下,一条一条执行 print ‘--------------...

  • 【LeetCode】二叉树(基础题2)

    1、判断两个二叉树是否相同 给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 具体代码: class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p == null...

  • C基础1--C语言环境

    C语言简介:C语言是一种通用的,面向过程式的计算机程序设计语言。1972年,为了移植与开发UNIX操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了C语言。当前最新使用的C语言标准为C11,在他之前的C语言标准为C99。...

  • 微信小程序开发基础之四:条件渲染

    页面结构文件*.wxml中的条件渲染 表达式渲染 <view class="content" hidden="{{flag? true:false}}"> </view> wx:if <view wx:if=...

  • 指针复习02

    #include<stdio.h> #include<stdlib.h> void test(int *i,int *j){ printf("----------------------------------\n"...

  • 为什么要处理自然语言? | NLP基础

    NLP基础系列 自然语言处理,英文是Natrual Language Processing,简写为NLP,原本是计算机科学领域的一个研究方向。 早几年,还没有几个外行人知道它。即使是程序员,如果不做NLP相关工作的,也有大多没听说过这个概念。 可是这几年,NLP从一个学术术语迅速爆红成了“社会词”,如今去求职/...

  • sdn开放架构_建立开放式基础架构的好处

    sdn开放架构 OpenStack基础结构团队每天管理OpenStack项目接口中开发人员所使用的所有服务,包括代码检查和持续集成系统,Wiki,IRC机器人和邮件列表。 我们本身也是一个开源项目。 我们的基础架构中使用的所有代码和配置都可以在一系列公共代码存储库中获得 ,我们的所有文档也可以公开获得 。 这与许多其他开源项目相反,...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。
unity3d基础02介绍:华为云为您免费提供unity3d基础02在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多unity3d基础02的相关内容。| 移动地址: unity3d基础02 | 写博客