文章列表
指向被减向量
// Gets a vector that points from the player's position to the target's.
var heading = target.position - player.position;
标准化向量
var distance = heading.magnitude;
var direction = heading / distance; // This is now the normalized direction.
比较距离,避免求平方根
if (heading.sqrMagnitude < ...
Camera 2 Ray
- 博客分类:
- Unity
在上一节的视锥里说到,视图上的每个点都是三维空间中的一条线。用Ray来描述。
Camerar提供了两个方法: ScreenPointToRay(提供屏幕坐标) ViewportPointToRay(提供标准化的坐标,0表示左和下,1表示右和上)。两个方法都返回一个由起始点和标示方向的向量构成的Ray。起始点在近裁剪面上。而不是相机原点。
Raycasting 从相机发出一条虚拟射线,直到撞到目标固体
var hit: RaycastHit;
var ray: Ray = camera.ScreenPointToRay(Input.mousePosition);
i ...
Camera 1 view frustum
- 博客分类:
- Unity
视锥(view frustum)
相机的视图上的第个点都对应3D空间中一条线,这些线最终聚合到一点。就是相机的空间位置,也就是透视中心。视锥外的都不可见。还有近、远的两个裁剪平面(平行相机XY面)比近面近的不可见。比远面远的也不可见。Field Of View(FOV)是指锥尖与裁剪面上边中点构成的线,及锥尖与下边中点构成的线的角度。
用离相机的特定距离可以定义视锥中某个截面。两者可通过 FOV*0.5的tan来换算。
var frustumHeight = 2.0 * distance * Mathf.Tan(camera.fieldOfView * 0.5 * M ...
Unity对象池的做法
- 博客分类:
- Unity
从unity官方论坛上看来的。原版为英文http://forum.unity3d.com/threads/simple-reusable-object-pool-help-limit-your-instantiations.76851/
纹理池可以存储游戏中经常复用的对象,并允许用户从其中获取对象,并且区分这两种情况:获得已有的对象或者无论如果都返回一个可用的对象(没有就新建)。
步骤如下:
在prefab array里存入想初始化的预设。
对每个预设,设定初始化的数量(一开始就初始化一定数量的对象)。有默认数量。
调用ObjectPool.instance.G ...
Unity单例和事件
- 博客分类:
- Unity
继承自Mono的单例写法:
public class Clicker : MonoBehaviour
{
// Singleton
private static Clicker instance;
// Construct
private Clicker() {}
// Instance
public static Clicker Instance
{
get
{
...
Unity开发优化总结
- 博客分类:
- Unity
对所有需要的组件进行缓存。因为调用例如 transform, renderer之类的组件。内部会调用getComponent。效率非常低。缓存外部GameObject。道理相同。find很慢。gameObject 则不用。哪里访问都一样。
用缓存池,而不是永远都初始化新的。 ...