Unity API - C

废话不多说,一针见血,go!
一起来看 API

    • Caching 缓存
    • Camera 摄像机
    • CapsuleCollider 胶囊碰撞器
    • CharacterController 角色控制器
    • CharacterJoint 角色关节
    • Cloth 布料
    • ClothRenderer 布料渲染器
    • ClothSkinningCoefficient 布料蒙皮系数
    • Collider 碰撞器
    • Collision 碰撞
    • Color 颜色
    • CombineInstance 合并实例

Caching 缓存

Caching.Authorize 授权
授权这个Unity内容使用缓存

Caching.CleanCache 清除缓存
删除这个内容相关的缓存文件夹

当你已经有一个缓存许可证时,这个函数才能激活

Caching.Authorize (name, domain, size, signature);
    if (GUILayout.Button("Uninstall Game"))
        Caching.CleanCache ();

Caching.enabled 启用
缓存是否启用?

if (!Caching.enabled)
    GUILayout.Label ("Please turn on caching to run this game.");

Caching.expirationDelay 截止延迟(啥?)

Caching 缓存
Caching类让你管理资源包缓存,下载使用

Caching.IsVersionCached 是否缓存的版本
检查,如果一个资源包被缓存

if (Caching.IsVersionCached("http://myserver.com/bla.unity3d", 3))
    GUILayout.Button("Load Level");

Caching.ready 准备

Caching.spaceFree 剩余空间
可用的磁盘空间,以bytes(字节)为单位

Caching.spaceOccupied 占用空间
已经使用的磁盘空间,以bytes(字节)为单位

Camera 摄像机

Camera.actualRenderingPath 实际渲染路径
实际使用的渲染路径

Camera.allCameras 所有相机
返回场景中所有启用的相机

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public int count = Camera.allCameras.Length;
    public void Awake() 
    {
        print("We've got " + count + " cameras");
    }
}

Camera.aspect 宽长比
宽长比(宽度除以高度)

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
    if (camera.aspect > 1.0F)
        print("Screen is more wide than tall!");
    else
        print("Screen is more tall than wide!");
    }
}

Camera.backgroundColor 背景颜色
屏幕将被清理为这个颜色

来回变化背景颜色

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Color color1 = Color.red;
    public Color color2 = Color.blue;
    public float duration = 3.0F;
    void Update() 
    {   //设置消除标识到颜色
        float t = Mathf.PingPong(Time.time, duration) / duration;
        camera.backgroundColor = Color.Lerp(color1, color2, t);
    }
    public void Awake() 
    {
        camera.clearFlags = CameraClearFlags.SolidColor;
    }
}

Camera.cameraToWorldMatrix 相机转世界矩阵
从相机空间到世界空间的变换矩阵

在屏幕视图绘制一个黄色的球,以Distance单位,沿着相机所看方向

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public float distance = -1.0F;
    void OnDrawGizmosSelected() 
    {
        Matrix4x4 m = camera.cameraToWorldMatrix;
        Vector3 p = m.MultiplyPoint(new Vector3(0, 0, distance));
        Gizmos.color = Color.yellow;
        Gizmos.DrawSphere(p, 0.2F);
    }
}

Camera.clearFlags 清除标识
相机如何清除背景

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //用背景颜色清除(忽略天空盒)
        camera.clearFlags = CameraClearFlags.SolidColor;
    }
}

Camera.CopyFrom 复制到
使这个相机的设置与其他相机相同

Camera.cullingMask 消隐遮罩
这个用来选择性的渲染部分场景

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //只渲染在第一层中的物体(默认层)
        camera.cullingMask = 1 << 0;// 1/1
    }
}

Camera.current 当前相机
当前用于渲染的相机,只用于低级的渲染控制

Camera.depth 深度
相机在渲染顺序上的深度

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //设置这个相机在主相机之后渲染
        camera.depth = Camera.main.depth + 1;
    }
}

Camera.depthTextureMode 深度纹理模式
相机生成怎样的一个深度纹理

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //生成一个深度+法线纹理
        camera.depthTextureMode = DepthTextureMode.DepthNormals;
    }
}

Camera.farClipPlane 远裁剪平面
远裁剪面的距离(啥玩意)

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        camera.farClipPlane = 100.0F;
    }
}

Camera.fieldOfView 固定视野
相机的视野,以度为单位

例一

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //设置附加到同一个游戏物体上相机的视野为60
        camera.fieldOfView = 60;
    }
}

例二
使用专门主相机

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //设置主相机的视野为 80
        Camera.main.fieldOfView = 80;
    }
}

Camera 摄像机
Camera是一个设备,玩家通过它看世界

Camera.layerCullDistances 层消隐距离
每层的消隐距离(不懂)

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Start() 
    {
        float[] distances = new float[32];
        //设置层10的消隐为15米距离,其他所有层使用远剪裁屏幕距离
        distances[10] = 15;
        camera.layerCullDistances = distances;
    }
}

Camera.main 主相机
第一个启用的被标记为“MainCanmera”的相机

Camera.nearClipPlane 近裁剪平面
近裁剪面的距离

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        camera.nearClipPlane = 0.1F;
    }
}

Camera.OnPostRender 在渲染之后
OnPostRender 在相机渲染场景之后调用

这个脚本让你在每个相机开启/禁用雾效
在检视面板开启或禁用这个脚本
在每个相机可以开启/禁用雾效

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    private bool revertFogState = false;
    void OnPreRender() 
    {
        revertFogState = RenderSettings.fog;
        RenderSettings.fog = enabled;
    }
    void OnPostRender() 
    {
        RenderSettings.fog = revertFogState;
    }
}

Camera.OnPreCull 在消隐之前
OnPreCull在相机开始裁剪场景之前调用

附加这个到相机
反转相机中的物体,因此每个被渲染的物体是反的(?)

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnPreCull() 
    {
        camera.ResetWorldToCameraMatrix();
        camera.ResetProjectionMatrix();
        camera.projectionMatrix = camera.projectionMatrix * Matrix4x4.Scale(new Vector3(1, -1, 1));
    }
    void OnPreRender() 
    {   //设置为true,因此可以看到翻转的物体
        GL.SetRevertBackfacing(true);
    }
    void OnPostRender() 
    {   //设置为false,因为不想影响所有其他相机
        GL.SetRevertBackfacing(false);
    }
}

Camera.OnPreRender 在渲染之前
OnPreRender在相机开始渲染场景之前调用

这个脚本让你在每个相机开启/禁用雾效
在检视面板开启或禁用这个脚本
在每个相机可以开启/禁用雾效

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    private bool revertFogState = false;
    void OnPreRender() 
    {
        revertFogState = RenderSettings.fog;
        RenderSettings.fog = enabled;
    }
    void OnPostRender() 
    {
        RenderSettings.fog = revertFogState;
    }
}

Camera.OnRenderImage 在渲染图像之后
OnRenderImage在所有渲染完成后被调用,来渲染图片的后期处理效果

Camera.OnRenderObject 在渲染物体之后
OnRenderObject 被用来渲染你自己的物体,使用或者其他函数

Camera.OnWillRenderObject 在渲染物体之前
如果物体可见,每个相机都会调用OnWillRenderObject

增加otherObject的大小同时这个变换正在渲染
注意这个将被调用即使场景编辑器显示这个物体
因此,请确保在游戏视图看不到的物体,不在场景编辑器

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public GameObject otherObject;
    void OnWillRenderObject() 
    {
        otherObject.transform.localScale *= 1.0001F;
    }
}

Camera.orthographic 正交
相机是正交的(true),是透视的(false)?

例一

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //设置相机为正交
        camera.orthographic = true;
    }
}

例二
用于专门的主相机

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //设置主相机为正交
        Camera.main.orthographic = true;
    }
}

Camera.orthographicSize 正交大小
在正交模式下相机的一半尺寸

例一

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //设置相机的正交尺寸为5
        camera.orthographic = true;
        camera.orthographicSize = 5;
    }
}

例二
使用专门的主相机

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //设置主相机的正交尺寸为5
        Camera.main.orthographic = true;
        Camera.main.orthographicSize = 5;
    }
}

Camera.pixelHeight 相机高度
相机有多高,以像素单位

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        print("Camera is " + camera.pixelWidth + " pixels wide");
    }
}

Camera.pixelRect 像素矩形
相机被渲染到屏幕像素中的位置

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
void Update() 
{
      Rect r = camera.pixelRect;
      print("Camera displays from " + r.xMin + " to " + r.xMax + " pixel");
}
}

Camera.pixelWidth 相机宽度
相机有多宽,以像素单位

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        print("Camera is " + camera.pixelWidth + " pixels wide");
    }
}

Camera.projectionMatrix 投影矩阵
设置自定义的投影矩阵

例一
让相机以流行的方式晃动

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Matrix4x4 originalProjection;
    void Update() 
    {
        Matrix4x4 p = originalProjection;
        //改变原始矩阵的某些值
        p.m01 += Mathf.Sin(Time.time * 1.2F) * 0.1F;
        p.m10 += Mathf.Sin(Time.time * 1.5F) * 0.1F;
        camera.projectionMatrix = p;
    }
    public void Awake() 
    {
        originalProjection = camera.projectionMatrix;
    }
}

例二
设置一个偏移中心的投影,这个透视的消失点没有必要在屏幕的中心
定义近载面大小,例如相机的近裁面偏移中心多少
改变这个值你就能看到相机视图的变化

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public float left = -0.2F;
    public float right = 0.2F;
    public float top = 0.2F;
    public float bottom = -0.2F;
    void LateUpdate() 
    {
        Camera cam = camera;
        Matrix4x4 m = PerspectiveOffCenter(left, right, bottom, top, cam.nearClipPlane, cam.farClipPlane);
        cam.projectionMatrix = m;
    }
    static Matrix4x4 PerspectiveOffCenter(float left, float right, float bottom, float top, float near, float far) {
        float x = 2.0F * near / right - left;
        float y = 2.0F * near / top - bottom;
        float a = right + left / right - left;
        float b = top + bottom / top - bottom;
        float c = -far + near / far - near;
        float d = -2.0F * far * near / far - near;
        float e = -1.0F;
        Matrix4x4 m;
        m[0, 0] = x;
        m[0, 1] = 0;
        m[0, 2] = a;
        m[0, 3] = 0;
        m[1, 0] = 0;
        m[1, 1] = y;
        m[1, 2] = b;
        m[1, 3] = 0;
        m[2, 0] = 0;
        m[2, 1] = 0;
        m[2, 2] = c;
        m[2, 3] = d;
        m[3, 0] = 0;
        m[3, 1] = 0;
        m[3, 2] = e;
        m[3, 3] = 0;
        return m;
    }
}

Camera.rect 矩形
相继被渲染到屏幕规范化坐标中的位置

Rect的范围总0(左/下)到1(右/上)

//每次按下空格键时改变视口宽度
function Update () {
    if (Input.GetButtonDown ("Jump")) 
    {
        //随机选择边缘
        var margin = Random.Range (0.0, 0.3);
        //设置矩形
        camera.rect = Rect (margin, 0, 1 - margin * 2, 1);
    }
}

Camera.Render 渲染
手动渲染相机

Camera.renderingPath 渲染路径
渲染路径

Camera.RenderToCubemap 渲染到立方图
从这个相机渲染到一个立方贴图(不懂)

例一

//从给定的点渲染香精到以静态立方贴图
//放置这个脚本到工程的Editor文件夹中
//然后用一个Reflective shaders 来使用这个立方贴图
class RenderCubemapWizard extends ScriptableWizard {
    var renderFromPosition : Transform;
    var cubemap : Cubemap;

    function OnWizardUpdate () {
        helpString = "Select transform to render from and cubemap to render into";
        isValid = (renderFromPosition != null) && (cubemap != null);
    }

    function OnWizardCreate () {
        //为渲染创建临时相机
        var go = new GameObject( "CubemapCamera", Camera );
        //放置它到物体上
        go.transform.position = renderFromPosition.position;
        go.transform.rotation = Quaternion.identity;

        //渲染到立方贴图 
        go.camera.RenderToCubemap( cubemap );

        //销毁临时相机
        DestroyImmediate( go );
    }

    @MenuItem("GameObject/Render into Cubemap")
    static function RenderCubemap () {
        ScriptableWizard.DisplayWizard.<RenderCubemapWizard>(
        "Render cubemap", "Render!");
    }
}

例二

//附加这个脚本到使用了Reflective shader的物体上 
//实时反射立方贴图
@script ExecuteInEditMode

var cubemapSize = 128;
var oneFacePerFrame = false;
private var cam : Camera;
private var rtex : RenderTexture;

function Start () {
    //在启动时渲染所有六个面
    UpdateCubemap( 63 );
}

function LateUpdate () {
    if (oneFacePerFrame) 
    {
        var faceToRender = Time.frameCount % 6;
        var faceMask = 1 << faceToRender;
        UpdateCubemap (faceMask);
    } 
    else 
    {
        UpdateCubemap (63); //所有六个面
    }
}

function UpdateCubemap (faceMask : int) {
    if (!cam) 
    {
        var go = new GameObject ("CubemapCamera", Camera);
        go.hideFlags = HideFlags.HideAndDontSave;
        go.transform.position = transform.position;
        go.transform.rotation = Quaternion.identity;
        cam = go.camera;
        cam.farClipPlane = 100; //不要渲染较远的部分
        cam.enabled = false;
    }

    if (!rtex) 
    {
        rtex = new RenderTexture (cubemapSize, cubemapSize, 16);
        rtex.isPowerOfTwo = true;
        rtex.isCubemap = true;
        rtex.hideFlags = HideFlags.HideAndDontSave;
        renderer.sharedMaterial.SetTexture ("_Cube", rtex);
    }

    cam.transform.position = transform.position;
    cam.RenderToCubemap (rtex, faceMask);
}

function OnDisable () {
    DestroyImmediate (cam);
    DestroyImmediate (rtex);
}

Camera.RenderWithShader 用Shader渲染
用shader替代渲染相机

Camera.ResetAspect 重设长宽比
恢复长宽比为屏幕的长宽比

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        camera.ResetAspect();
    }
}

Camera.ResetProjectionMatrix 重设投影矩阵
让投影反映正常的相机参数(?)

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        camera.ResetProjectionMatrix();
    }
}

Camera.ResetReplacementShader 重设替换Shader
从相机上移除shader替换(what?)

Camera.ResetWorldToCameraMatrix 重设世界转相机矩阵
在场景中让渲染位置反映相机的位置

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        camera.ResetWorldToCameraMatrix();
    }
}

Camera.ScreenPointToRay 屏幕位置转射线
返回一条射线从摄像机通过一个屏幕点

打印相机直接看到物体名称

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Update() 
    {   //获取穿过屏幕中心的射线
        Ray ray = camera.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
        //投射
        RaycastHit hit;
        if (Physics.Raycast(ray, ref hit))
            print("I'm looking at " + hit.transform.name);
        else
            print("I'm looking at nothing!");
    }
}

Camera.ScreenToViewportPoint 屏幕转视窗位置
从屏幕空间到视窗空间的变换位置

Camera.ScreenToWorldPoint 屏幕转世界位置
从屏幕空间到世界空间的变化位置

在所选相机的近裁剪面上,绘制一个黄色的球,在左下100像素的位置

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnDrawGizmosSelected() 
    {
        Vector3 p = camera.ScreenToWorldPoint(new Vector3(100, 100, camera.nearClipPlane));
        Gizmos.color = Color.yellow;
        Gizmos.DrawSphere(p, 0.1F);
    }
}

Camera.SetReplacementShader 设置替换Shader
使相机渲染用shader替换

Camera.targetTexture 目标纹理
渲染纹理的目标

Camera.velocity 速度
获取世界空间中相机的速度

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Update() 
    {
        print("Camera moving at " + camera.velocity.magnitude + " m/s");
    }
}

Camera.ViewportPointToRay 视窗位置转射线
返回从相机出发穿过视点的一个射线

打印相机直接看到物体名称

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Update() 
    {   //获取穿过屏幕中心的射线
        Ray ray = camera.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
        //投射
        RaycastHit hit;
        if (Physics.Raycast(ray, ref hit))
            print("I'm looking at " + hit.transform.name);
        else
            print("I'm looking at nothing!");
    }
}

Camera.ViewportToScreenPoint 视窗转屏幕位置
从视口空间到屏幕空间的变换位置

Camera.ViewportToWorldPoint 视窗转世界位置
从视窗空间到世界空间的变换位置

在近裁剪面的右上角绘制一个黄色的球,针对在场景视图中选中的相机

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnDrawGizmosSelected() 
    {
        Vector3 p = camera.ViewportToWorldPoint(new Vector3(1, 1, camera.nearClipPlane));
        Gizmos.color = Color.yellow;
        Gizmos.DrawSphere(p, 0.1F);
    }
}

Camera.worldToCameraMatrix 世界转相机矩阵
从世界到相机空间的变换矩阵

从Offsets位置偏移相机的渲染

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Vector3 offset = new Vector3(0, 1, 0);
        void LateUpdate() 
        {//构建一个沿着Z轴偏移和镜像的矩阵,因为相机已经为Z轴镜像,并用于其余部分
        Vector3 camoffset = new Vector3(-offset.x, -offset.y, offset.z);
        Matrix4x4 m = Matrix4x4.TRS(camoffset, Quaternion.identity, new Vector3(1, 1, -1));
        //重载worldToCameraMatrix为偏移/镜像的变换矩阵
        camera.worldToCameraMatrix = m * transform.worldToLocalMatrix;
    }
}

Camera.WorldToScreenPoint 世界转屏幕位置
从世界空间到屏幕空间变换位置

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Transform target;
    void Update() 
    {
        Vector3 screenPos = camera.WorldToScreenPoint(target.position);
        print("target is " + screenPos.x + " pixels from the left");
    }
}

Camera.WorldToViewportPoint 世界转视窗位置
从世界空间到视窗空间的变换位置

Target在屏幕的左边还是右边

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Transform target;
    void Update() 
    {
        Vector3 viewPos = camera.WorldToViewportPoint(target.position);
        //视口坐标范围从0到1
        if (viewPos.x > 0.5F)
            print("target is on the right side!");
        else
            print("target is on the left side!");
    }
}

CapsuleCollider 胶囊碰撞器

CapsuleCollider.center 中心
胶囊的中心,基于物体的自身坐标空间

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //重设中心点到变换的位置
        collider.center = Vector3.zero;
    }
}

CapsuleCollider.direction 方向
胶囊的方向

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //使胶囊的高度沿着x轴
        collider.direction = 0;
    }
}

CapsuleCollider.height 高度
胶囊的高度,基于物体的自身空间

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        collider.height = 5;
    }
}

CapsuleCollider 胶囊碰撞器
一个胶囊形状的基本碰撞器

CapsuleCollider.radius 半径
球体的半径,基于物体的自身坐标

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        collider.radius = 1;
    }
}

CharacterController 角色控制器

CharacterController.center 中心
相对于变换位置的角色胶囊体的中心

将胶囊体的中心向上移动

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public CharacterController controller;
    public void Awake() 
    {
        controller = GetComponent<CharacterController>();
        controller.center = new Vector3(0, 1, 0);
    }
}

CharacterController.collisionFlags 碰撞标识
在最后的CharacterController.Move调用期间,胶囊体的哪个部分与周围环境相碰撞

function Update () {
    var controller : CharacterController = GetComponent(CharacterController);
    if ((controller.collisionFlags & CollisionFlags.Above) != 0)
        print("touched the ceiling");
}

CharacterController.detectCollisions 检测碰撞
其他的刚体和角色控制器是否能够与本角色控制器相碰撞(默认值始终启用)

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public CharacterController c;
    public void Awake() 
    {
        c = GetComponent<CharacterController>();
        c.detectCollisions = false;
    }
}

CharacterController.height 高度
角色胶囊体的高度

设置控制器的高度为2.0

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public CharacterController controller;
    public void Awake() 
    {
        controller = GetComponent();
        controller.height = 2.0F;
    }
}

CharacterController 角色控制器
用CharacterController组件,它包含Rigidbody组件的一些属性,就不用用Rigidbody组件了

character一般用于主角这类用户控制的物体,它不会受到scene的重力影响,不会被其他物体推。 

程序中可以使用它的move方法移动它,当他碰到静态物体时,会停下来,遇到动态物体时会推开他,当然,这些都是可以通过activegroup来控制的。group最多有32组。因为他是一个NxU32,并通过每一位代表一个组。 

move的一个参数用来告诉程序,character的当前状态。(collisionFlags) 

当他遇到物体的时候,如果设置了回调函数,系统会通过回调函数通知程序。。(NxControllerDesc.callback) 

character还有上楼梯模式,在某些高度的台阶,可以直接上去。(NxControllerDesc.stepOffset)

character还可以设置可以走上去的斜坡。(NxControllerDesc.slopeLimit)

由于character不受场景的重力影响,所以,用户要在move函数中自己添加重力因素,也就是说,character可以浮在空中,除非那里有其他activegroup物体。

CharacterController.isGrounded 是否地面
在最后的移动角色控制器是否触碰地面?

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Update() 
    {
        CharacterController controller = GetComponent<CharacterController>();
        if (controller.isGrounded)
            print("We are grounded");

    }
}

CharacterController.Move 移动
一个更加复杂的运动函数,每次都绝对运动

这个脚本用箭头键向前移动和侧移角色控制器。
当按下空格键时,它跳起
确保把一个character controller组件附加到同一个游戏物体上
建议你每帧只调用一次Move或者SimpleMove

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public float speed = 6.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;
    private Vector3 moveDirection = Vector3.zero;
    void Update() 
    {
        CharacterController controller = GetComponent<CharacterController>();
        if (controller.isGrounded) 
        {   //我们着地了,所以直接通过轴重新计算move direction。
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            if (Input.GetButton("Jump"))
                moveDirection.y = jumpSpeed;
        }
        //应用重力
        moveDirection.y -= gravity * Time.deltaTime;
        //移动控制器
        controller.Move(moveDirection * Time.deltaTime);
    }
}

CharacterController.OnControllerColliderHit 控制碰撞器碰撞
当控制器碰撞一个正在运动的碰撞器时,OnControllerColliderHit 被调用

这个脚本推动所有的角色碰撞到的刚体

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public float pushPower = 2.0F;
    void OnControllerColliderHit(ControllerColliderHit hit) {
        Rigidbody body = hit.collider.attachedRigidbody;
        // 没有刚体
        if (body == null || body.isKinematic)
            return;
        // 我们不想推动在我们下边的物体
        if (hit.moveDirection.y < -0.3F)
            return;
        // 通过移动方向计算推动方向,我们只把物体推到两侧,从不向上和向下推
        Vector3 pushDir = new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z);
        // 如果你知道你的角色移动的有多快,那么你也可以用它乘以推动速度
        // 应用推力
        body.velocity = pushDir * pushPower;
    }
}

CharacterController.radius 半径
角色胶囊体的半径

设置控制器的半径为0.3

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public CharacterController controller;
    public void Awake() 
    {
        controller = GetComponent<CharacterController>();
        controller.radius = 0.3F;
    }
}

CharacterController.SimpleMove 简单移动
以一定的速度移动角色

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public float speed = 3.0F;
    public float rotateSpeed = 3.0F;
    void Update() 
    {
        CharacterController controller = GetComponent<CharacterController>();
        //围绕Y轴旋转
        transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);
        //向前后移动
        Vector3 forward = transform.TransformDirection(Vector3.forward);
        float curSpeed = speed * Input.GetAxis("Vertical");
        controller.SimpleMove(forward * curSpeed);
    }
}

CharacterController.slopeLimit 坡度限制
角色控制器的坡度度数限制

设置控制器的坡度限制为45.0度

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public CharacterController controller;
    public void Awake() 
    {
        controller = GetComponent<CharacterController>();
        controller.slopeLimit = 45.0F;
    }
}

CharacterController.stepOffset 台阶偏移量
以米为单位的角色控制器的台阶偏移量
台阶高度,步高

设置控制器的台阶高度

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public CharacterController controller;
    public void Awake() 
    {
        controller = GetComponent();
        controller.stepOffset = 2.0F;
    }
}

CharacterController.velocity 速度
角色当前的相对速度

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Update() {
        CharacterController controller = GetComponent<CharacterController>();
        Vector3 horizontalVelocity = controller.velocity;
        horizontalVelocity = new Vector3(controller.velocity.x, 0, controller.velocity.z);
        //忽略Y轴的X-Z平面上的速度
        float horizontalSpeed = horizontalVelocity.magnitude;
        //重力或者跳跃引起的速度
        float verticalSpeed = controller.velocity.y;
        //总体速度
        float overallSpeed = controller.velocity.magnitude;
    }
}

CharacterJoint 角色关节

CharacterJoint.highTwistLimit 旋转上限
角色关节围绕原始轴的上限

CharacterJoint 角色关节
角色关节主要用于布娃娃效果 它们是一个扩展的球窝状关节,允许你在每个轴上限制关节

CharacterJoint.lowTwistLimit 旋转下限
角色关节围绕原始轴的下限

CharacterJoint.swing1Limit 旋转限制1
角色关节围绕原始轴的限制

CharacterJoint.swing2Limit 旋转限制2

CharacterJoint.swingAxis 旋转轴
关节可以围绕旋转的副轴

Cloth 布料

Cloth.bendingStiffness 抗弯硬度
布料的抗弯硬度(坚挺的程度)

设置布料的bending Stiffness为1
可以是Skinned Cloth或者Interactive Cloth

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        transform.GetComponent<Cloth>().bendingStiffness = 1;
    }
}

Cloth.damping 阻尼
布料运动时的阻尼

设置布料的damping为1
可以是Skinned Cloth或者Interactive

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        transform.GetComponent<Cloth>().damping = 1;
    }
}

Cloth.enabled 启用?
是否启用这个布料?

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        GetComponent<InteractiveCloth>().enabled = false;
    }
}

Cloth.externalAcceleration 外力
施加于布料的外力,一个恒量

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //使布料下落时,受到一半的重力(如果是受重力影响)
        transform.GetComponent<Cloth>().externalAcceleration = -Physics.gravity / 2;
    }
}

Cloth 布料
用来模拟物理布料的基类,通过InteractiveCloth和SkinnedCloth共享

Cloth.normals 法线列表
当前布料物体的法线列表

Cloth.randomAcceleration 随机外力
施加于布料的外力,一个随机变量

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   //模仿来自X轴向上的风 
        transform.GetComponent<Cloth>().randomAcceleration = new Vector3(10, 0, 0);
    }
}

Cloth.selfCollision 自身碰撞
是否产生自身碰撞

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        GetComponent<InteractiveCloth>().selfCollision = false;
    }
}

Cloth.stretchingStiffness 韧度
布料的韧性(可拉伸的程度)

设置布料的stretching Stiffness为1
可以是Skinned Cloth或者Interactive

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        transform.GetComponent<Cloth>().stretchingStiffness = 1;
    }
}

Cloth.thickness 厚度
布料表面的厚度

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {
        transform.GetComponent<Cloth>().thickness = 0.2F;
    }
}

Cloth.useGravity 使用重力
是否重力影响布料模拟?

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   // 使布料不受重力的影响
        transform.GetComponent<Cloth>().useGravity = false;
    }
}

Cloth.vertices 顶点列表
当前布料物体的顶点位置列表

ClothRenderer 布料渲染器

ClothRenderer 布料渲染器
ClothRenderer组件和InteractiveCloth 组件配合使用,在场景中使一个布料物体可见

ClothRenderer.pauseWhenNotVisible 不可见时暂停
在ClothRenderer不可见的时,暂停布料模拟

如果这个属性开启,布料只会在任意相机中可见时模拟。这样可改善物理模拟的性能

pauseWhenNotVisible = true;

ClothSkinningCoefficient 布料蒙皮系数

ClothSkinningCoefficient.collisionSphereDistance 碰撞球体距离
定义一个球体的一个顶点不允许进入 这允许反向碰撞动画布料(什么意思)

ClothSkinningCoefficient.collisionSphereRadius 碰撞球体半径
定义一个球体的一个顶点不允许进入 这允许反向碰撞动画布料

ClothSkinningCoefficient 布料蒙皮系数
ClothSkinningCoefficient结构用于设置SkinnedCloth组件允许如何移动,有关SkinnedMeshRenderer是附加的(不懂)

ClothSkinningCoefficient.maxDistance 最大距离
一个点是允许从蒙皮网格点位置运动的距离

ClothSkinningCoefficient.maxDistanceBias 最大距离偏移
通过基于蒙皮网格法线的最大距离,变形定义的球体(what)

Collider 碰撞器

Collider.attachedRigidbody 附加刚体
碰撞器附加的刚体

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   // Lift the rigidbody attached to the collider.
        //升起附加在碰撞器的刚体
        collider.attachedRigidbody.AddForce(0, 100, 0);
    }
}

Collider.bounds 包围盒
碰撞器在世界坐标空间的包围盒

Collider.ClosestPointOnBounds 到包围盒最近点
到附加碰撞器的包围盒最近的点

当应用于爆炸伤害,这能用于计算伤害点数

var hitPoints : float = 100.0;
function ApplyHitPoints (explosionPos : Vector3, radius : float) {
    // The distance from the explosion position to the surface of the rigidbody
    //从爆炸点到刚体表面的距离
    var closestPoint : Vector3 = collider.ClosestPointOnBounds(explosionPos);
    var distance : float = Vector3.Distance(closestPoint, explosionPos);
    // The hit points we apply fall decrease with distance from the hit point
    //伤害点数,我们使到伤害点距离减少
    var hitPoints : float = 1.0 - Mathf.Clamp01(distance / radius);
    // This is the final hitpoints we want to apply. 10 at maximum
    //这是我们想要的最终伤害点数为10
    hitPoints *= 10;
}

Collider 碰撞器
所有碰撞器的基类(鸡肋)

Collider.isTrigger 是触发器?
碰撞器是一个触发器?

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   // Turns the attached to collider into a trigger
        //转换附加的碰撞器为一个触发器
        collider.isTrigger = true;
    }
}

Collider.material 材质
碰撞器使用的材质

如果材质被碰撞器共享,它将复制材质并指定给碰撞器

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   // Makes the collider act like ice.
        //让碰撞器像冰一样(滑动摩擦&&静摩擦==0)
        collider.material.dynamicFriction = 0;
        collider.material.staticFriction = 0;
    }
}

Collider.OnCollisionEnter 进入碰撞
当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter被调用
如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件

例一

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnCollisionEnter(Collision collision) 
    {   // Debug-draw all contact points and normals
        //调试绘制全部的接触点和法线
        foreach (ContactPoint contact in collision.contacts) 
        {
            Debug.DrawRay(contact.point, contact.normal, Color.white);
        }
        // Play a sound if the coliding objects had a big impact.
        //如果碰撞物体有一个更大的撞击就播放声音
        if (collision.relativeVelocity.magnitude > 2)
            audio.Play();

    }
}

例二
一个手榴弹
A grenade
一个手榴弹
- instantiates a explosion prefab when hitting a surface
当撞击表面时实例化一个爆炸预设
- then destroys itself
然后销毁它们

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Transform explosionPrefab;
    void OnCollisionEnter(Collision collision) 
    {   // Rotate the object so that the y-axis faces along the normal of the surface
        //旋转物体,以便y轴方向沿着表面的法线
        ContactPoint contact = collision.contacts[0];
        Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
        Vector3 pos = contact.point;
        Instantiate(explosionPrefab, pos, rot);
        // Destroy the projectile
        //销毁炮弹
        Destroy(gameObject);
    }
}

Collider.OnCollisionExit 退出碰撞

当 collider/rigidbody停止触动另一个 rigidbody/collider时,OnCollisionExit被调用
如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnCollisionExit(Collision collisionInfo) 
    {
        print("No longer in contact with " + collisionInfo.transform.name);
    }
}

Collider.OnCollisionStay 逗留碰撞
一个碰撞器或刚体触动另一个刚体或碰撞器,在每帧都会调用OnCollisionStay,直到它们之间离开,不接触
如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnCollisionStay(Collision collisionInfo) 
    {   // Debug-draw all contact points and normals
        //调试绘制全部接触点和法线
        foreach (ContactPoint contact in collisionInfo.contacts) 
        {
            Debug.DrawRay(contact.point, contact.normal * 10, Color.white);
        }
    }
}

Collider.OnTriggerEnter 进入触发器
当碰撞器other进入触发器时OnTriggerEnter被调用
假如一个碰撞物体同时带有一个刚体属性
那么只发送这个触发事件

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnTriggerEnter(Collider other) 
    {   // Destroy everything that enters the trigger
        //当进入触发器销毁所有物体
        Destroy(other.gameObject);
    }
}

Collider.OnTriggerExit 退出触发器
当碰撞器离开触发器时,调用OnTriggerExit
假如一个碰撞物体同时带有一个刚体属性
那么只发送这个触发事件

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnTriggerExit(Collider other) 
    {   // Destroy everything that leaves the trigger
        //离开触发器时,销毁所有物体
        Destroy(other.gameObject);
    }
}

Collider.OnTriggerStay 逗留触发器
每个碰撞器从进入触发器那一刻到退出触发器之前,几乎每帧都会调用OnTriggerStay
假如一个碰撞物体同时带有一个刚体属性
那么只发送这个触发事件
OnTriggerStay是在每一个Time.fixedDeltaTime的时间节点上运行,不是Time.deltaTime的时间节点上运行

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnTriggerStay(Collider other) 
    {   // Applies an upwards force to all rigidbodies that enter the trigger.
        //进入触发器给所有的刚体应用向上的力
        if (other.attachedRigidbody)
            other.attachedRigidbody.AddForce(Vector3.up * 10);
    }
}

Collider.Raycast 光线投射
投射一个光线(Ray),它忽略所有碰撞器,除了这个

// pragma below is needed due to a UnityJS issue
//下面的代码运行于js
#pragma strict

function Update() {
    var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);
    var hit : RaycastHit;
    if (collider.Raycast (ray, hit, 100.0)) 
    {
        Debug.DrawLine (ray.origin, hit.point);
    }
}

Collider.sharedMaterial 共享材质
碰撞器的共享物理材质

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public PhysicMaterial material;
    public void Awake() 
    {
        collider.sharedMaterial = material;
    }
}

Collision 碰撞

Collision.collider 碰撞器
我们碰撞的碰撞器

Collision.contacts 接触点列表
接触点由物理引擎产生

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnCollisionStay(Collision collision) 
    {   // Check if the collider we hit has a rigidbody
        // Then apply the force
        //检查如果碰撞的碰撞器有刚体,然后应用力
        foreach (ContactPoint contact in collision.contacts) 
        {
            print(contact.thisCollider.name + " hit " + contact.otherCollider.name);
            // Visualize the contact point
            //可视化接触点
            Debug.DrawRay(contact.point, contact.normal, Color.white);
        }
    }
}

Collision.gameObject 游戏物体
gameObject是我们碰撞的物体

Collision 碰撞
描述碰撞

Collision.relativeVelocity 相对速度
两个碰撞物体的相对线性速度

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnCollisionEnter(Collision collision) 
    {   // Play a sound when we hit an object with a big velocity
        //当以一个较大的速度碰到物体时,播放声音
        if (collision.relativeVelocity.magnitude > 2)
            audio.Play();
    }
}

Collision.rigidbody 刚体
我们碰撞的刚体 如果我们碰撞的物体是一个没有附加刚体的碰撞器,返回null

Make all rigidbodies we touch fly upwards
使我们接触的全部刚体向上飞

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void OnCollisionStay(Collision collision) 
    {   // Check if the collider we hit has a rigidbody
        //检查如果我们接触的碰撞器是一个刚体
        if (collision.rigidbody)
            // Then apply the force
            //然后应用力
            collision.rigidbody.AddForce(Vector3.up * 15);
    }
}

Collision.transform 变换
我们碰撞的物体的Transform

Color 颜色

Color.a 透明
颜色中的Alpha组件

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Color color = Color.white;
    public void Awake() 
    {
        color.a = 0;
    }
}

Color.b 蓝色
三基色之一的蓝色通道

Color.g 绿色
三基色之一的绿色通道

Color.r 红色
三基色之一的红色通道

Color.black 黑色
纯黑色 RGBA 是 (0, 0, 0, 1)

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public void Awake() 
    {   // Assign a black color to this transform's material
        // 赋一个黑色给这个变换的材质
        transform.renderer.material.color = Color.black;
    }
}

Color.blue 蓝色
纯蓝色 RGBA 是(0, 0, 1, 1)

Color.clear 清空
完全透明 RGBA 是 (0, 0, 0, 0)

Color.Color 颜色
用给定的r,g,b,a组件构造一个新的颜色

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Color color = new Color(0.2F, 0.3F, 0.4F, 0.5F);
}

Color.cyan 青色
青色 RGBA 是 (0, 1, 1, 1)

Color.gray 灰色 || Color.grey 灰色
灰色 RGBA 是 (0.5, 0.5, 0.5, 1)

Color.grayscale 灰度
颜色的灰度值

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Color color = new Color(0.3F, 0.4F, 0.6F);
    public void Awake() 
    {
        print(color.grayscale);
    }
}

Color.green 绿色
纯绿色 RGBA 是 (0, 1, 0, 1)

Color.magenta 紫红色
紫红色 RGBA 是 (1, 0, 1, 1)

Color.red 红色
纯红色 RGBA 是 (1, 0, 0, 1)

Color.white 白色
纯白色 RGBA 是 (1, 1, 1, 1)

Color.yellow 黄色
黄色。 RGBA 是怪异的 (1, 235/255, 4/255, 1) , 但是颜色看起来漂亮!

Color.this [int index] 访问索引
分别用[0],[1],[2],[3]访问r,g,b,a组件

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Color p;
    public void Awake() 
    {
        p[1] = 5;
        // the same as p.g = 5
        // 等同于 p.g = 5 
    }
}

Color.Lerp 插值
通过t在颜色a和b之间插值

Converts a white color to a black one trough time.
在一个时间段内将白色逐渐转换成黑色

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    public Color lerpedColor = Color.white;
    void Update() 
    {
        erpedColor = Color.Lerp(Color.white, Color.black, Time.time);
    }
}

Color.operator + 运算符 加法
两个颜色相加,每个组件被分别相加

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    // blue + red = magenta
    //蓝色+红色=紫红色
    public Color result = Color.blue + Color.red;
}

以下东西有个屁用
Color.operator Color 运算符 颜色 miss
Color.operator /运算符 除法 miss
Color.operator * 运算符 乘法 miss
Color.operator - 运算符 减法 miss
Color.operator Vector4 运算符 四维向量 miss
Color.ToString 转为字符串 miss

CombineInstance 合并实例

CombineInstance 合并实例
用来描绘网格合并的结构,使用Mesh.CombineMeshes

CombineInstance.mesh 网格
网格合并

CombineInstance.subMeshIndex 子网格索引
网格的子网格索引

CombineInstance.transform 变换
合并之前,网格变换的矩阵

你可能感兴趣的:(unity-api)