博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3d的一些小技巧
阅读量:5257 次
发布时间:2019-06-14

本文共 2711 字,大约阅读时间需要 9 分钟。

unity中有一些知识点比较碎,每次用到的时候都要去网上查,实在有些浪费时间,把这些知识点集中到一起倒是不错的想法,下面就是一些琐碎的知识点,以后会逐渐更新...

1,gameObject.active 表示是否在场景中停用改物体,当active=false的时候,GameObject无法find此物体,表现在编辑器中就是物体的Inspector里面显示对号没有勾选,

如果开始的时候active=true,你通过find获得了改物体,你可以setActive(false),此后此物体在场景中消失,此时你仍然可以使用setActive(true)使物体重新可以显示。

 如果想让一个游戏对象消失,除了上面这种方式外,还可以控制通过设置游戏对象的render,即gameObject.renderer.enabled = false来隐藏对象

 能让一个游戏对象在场景中消失,也可以让游戏对象的某个组件失效,方法就是先获取到这个组件,然后让组件的enabled = false。

2,照相机组件中的一些用法很有意思,用法得到可以实现很多效果。你可以修改Depth的值,当你的场景中有好几个照相机的时候,Depth值大的照相机的视野会覆盖值小的照相机视野,

利用这个功能可以实现简易版的小地图,首先给场景中添加一个照相机Cam,调整Cam的Depth的值大于主照相机的Depth,然后调整Viewport Rect的值,W,H,X,Y分别代表width的大小,

height的大小,x起始位置,y的起始位置,它们的单位都是以1为单位,我们设置x=0.8,y=0.8w=0.2,h=0.2这样Cam就可以像我们看到的端游中的小地图一样显示在右上角,当然你可以根据情况调整这四个值的大小。

 相机中的Culling Mask选项,会根据物体在哪个层有选择的渲染,如果一个物体的Layer是“UI”,而Culling Mask没有选择UI这个层,那么场景中就无法看到这个物体。

 相机中的Field of View选项,用来修改照相机的视角大小,值越大视角越大,看起来感觉物体离的越远,不过要想这个选项生效,照相机的Projection必须是Perspective才可以,

利用这个选项,我们可以在代码中修改这个值来实现物体的拉近和拉远。

3,碰撞器,触发器和刚体

两个物体发生碰撞的必要条件是:两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。碰撞器是一些组件,它包含了很多种类,

比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器根据不同的场合应用在不同物体身上。游戏引擎根据碰撞器进行计算碰撞效果,

而刚体让物体在物理效果下运行。触发器是碰撞器组件中的一个属性,碰撞器和触发器都可以检测物体是否发生碰撞,并且unity也给我们提供了接口:

触发信息检测:

1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器
2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器
3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器
 
碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器
2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器
3.MonoBehaviour.OnCollisionStay(Collision collision)  当逗留碰撞器
 
那我们如何使用上面的接口,这些接口又有哪些区别呢?我们做个试验,分别创建两个物体,并且分别给它们添加碰撞器和刚体,当物体A和物体B发生碰撞的时候,
会有物理效果即碰撞效果,并且会进入方法OnCollisionEnter,当我们给一个物体的isTrigger打上勾之后,两个物体再次碰撞,此时没有物理效果,会相互穿过去,
并且会进入方法OnTriggerEnter。经过我上面的叙述,大家应该已经明白了触发器的作用了吧。
如果既要检测到物体的接触又不想让碰撞检测影响物体的物理状态就可以使用触发器。
 
4,前几天用unity的2d功能写了微信的打飞机游戏,写的过程遇到一个小问题:要能够拖动飞机自由移动,去查了查文档,发现使用unity实现起来如此简单。
首先,我们拖动一个飞机图片到界面上作为我们的主角,unity2d自动把它当做一个sprite去渲染,然后我们给它添加脚本,代码如下:
using UnityEngine;using System.Collections;public class BirdMove : MonoBehaviour {    public Camera camera;	// Use this for initialization    void Start()    {        //获取场景中的照相机组件        camera = GameObject.Find("Main Camera").GetComponent
(); } void OnMouseDrag() { //使用unity的OnMouseDrag,当用户鼠标拖拽GUIElement(GUI元素)或Collider(碰撞体)时调用, //所以要记得给飞机添加Box Collider 2D组件 //下面一行代码是把点击的屏幕坐标转化为世界坐标 Vector3 tmp = camera.ScreenToWorldPoint(Input.mousePosition); //此时需要注意把飞机的Z轴赋给自己,不然很可能你点中飞机的时候飞机就消失了 transform.position = new Vector3(tmp.x, tmp.y, transform.position.z); }}

  相比之前用cocos2d写打飞机的拖动效果,使用unity来实现实在是太简单了,不是吗?

转载于:https://www.cnblogs.com/dearzhangle/p/4090277.html

你可能感兴趣的文章
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
数据清洗
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>