Unity 入门

GameObject

成员变量:

  • gameObject.name 名字
  • gameObject.activeSelf 激活状态
  • gameObject.isStatic 静态状态
  • gameObject.layer 层级
  • gameObject.tag 标签
  • gameObject.transform.position 位置

静态方法

  • GameObject.CreatePrimitive(PrimitiveType.Cube); // 创建一个Cube类型的物体,返回一个GameObject。

查找单个对象

无法找到失活的对象,多个满足条件的对象时返回不确定的对象,所以应确保唯一性。

  • GameObject.Find(""); // 根据名字查找(效率低)
  • GameObject.FindWithTag(""); // 根据tag查找

查找多个对象

  • GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
  • findtag mytag = GameObject.FindObjectOfType<findtag>(); // 效率较低,要遍历所有对象及其脚本

实例化对象(克隆)

  • Instantiate(obj);

删除对象

  • GameObject.Destroy(obj, 5); // 延迟几秒删除
  • Destroy(this); // 删除脚本
  • DontDestroyOnLoad(gameObject); // 过场景不被删除

成员方法

创建一个空物体

  • GameObject obj = new GameObject();
  • GameObject obj1 = new GameObject("我新创建物体的名字"); // 创建一个名字为”我新创建物体的名字”的物体
  • GameObject obj2 = new GameObject("我新创建物体的名字2", typeof(findtag)); // 创建一个物体并附加一个脚本

为对象添加脚本

  • gameObject.AddComponent<BoxCollider2D>();

标签比较

  • gameObject.CompareTag("Player");
  • gameObject.tag == "Player";

设置失活

  • gameObject.SetActive(false);

Time

时间缩放

  • Time.timeScale = 0; // 时间流速停止
  • Time.timeScale = 1; // 时间流速正常
  • Time.timeScale = 2; // 时间流速倍速

帧间隔时间

  • Time.deltaTime // 受scale影响
  • Time.unscaledDeltaTime // 不受scale影响

游戏开始到现在的时间

  • Time.time // 受scale影响
  • Time.unscaledTime // 不受scale影响

帧数(游戏跑了多少帧)

  • Time.frameCount

Transform

位置和位移

创建一个向量

  • Vector3 v1 = new Vector3(1, 2, 3);

常用的方向向量

  • Vector3.zero // (0, 0, 0)
  • Vector3.right // (1, 0, 0)
  • Vector3.left // (-1, 0, 0)
  • Vector3.forward // (0, 0, 1)
  • Vector3.back // (0, 0, -1)
  • Vector3.up // (0, 1, 0)
  • Vector3.down // (0, -1, 0)

计算两个点之间的距离

  • Vector3.Distance(v1, v2);

坐标系

  • transform.position // 世界坐标系
  • transform.localPosition // 本地坐标系
  • transform.forward // 自身坐标系的面朝向

位移

  • transform.Translate(Vector3.forward * 1 * Time.deltaTime, Space.World);

角度和旋转

  • transform.eulerAngles // 世界坐标角度
  • transform.localEulerAngles // 自身坐标系角度
  • transform.Rotate(new Vector3(0, 10, 0), Space.World); // 自转
  • transform.Rotate(Vector3.zero, 10 * Time.deltaTime, Space.World); // 绕轴转
  • transform.RotateAround(Vector3.zero, Vector3.up, 10 * Time.deltaTime); // 绕点转

缩放看向

  • transform.lossyScale // 相对世界缩放(只读)
  • transform.localScale // 相对父物体缩放
  • transform.LookAt(Vector3.zero); // 看向一个点(世界坐标系)
  • transform.LookAt(Transform); // 看向一个点

父子关系

设置父对象

  • transform.parent = null; // 没有父物体
  • transform.SetParent(GameObject.transform, false); // 设置父物体,第二个参数为是否保留世界坐标

设置子对象为空

  • transform.DetachChildren(); // 断绝所有子对象

获取子对象

  • transform.Find(""); // 查找所有儿子,能找到失活的对象,找不到孙子
  • transform.childCount // 子对象数量,包括失活对象,找不到孙子
  • transform.GetChild(i); // 获取对应的儿子

儿子的操作

  • public Transform son;
  • son.IsChildOf(transform); // 判断是否是指定对象的子物体
  • son.GetSiblingIndex(); // 获取儿子编号
  • son.SetAsFirstSibling(); // 设置为第一个儿子
  • son.SetAsLastSibling(); // 设置为最后一个儿子
  • son.SetSiblingIndex(); // 设置为指定序列的儿子

坐标转换

世界坐标转本地坐标

点的转换(受缩放影响)

  • transform.InverseTransformPoint(Vector3.forward);

向量转换

  • transform.InverseTransformDirection(Vector3.forward); // 不受缩放影响
  • transform.InverseTransformVector(Vector3.forward); // 受缩放影响

本地坐标转世界坐标

点的转换

  • transform.TransformPoint(Vector3.forward); // 受缩放影响

方向转换

  • transform.TransformDirection(Vector3.forward); // 不受缩放影响
  • transform.TransformVector(Vector3.forward); // 受缩放影响

Input和Screen

Input

检测鼠标输入

  • Input.mousePosition
  • Input.GetMouseButtonDown(0); // 按下左键
  • Input.GetMouseButtonUp(0); // 弹起左键
  • Input.GetMouseButton(0); // 长按左键
  • Input.mouseScrollDelta // 滚轮滚动(-1下、0没滚、1上)

检测键盘输入

  • Input.GetKeyDown(KeyCode.W); // 按下
  • Input.GetKeyDown("q"); // 按下,必须小写
  • Input.GetKeyUp(KeyCode.W); // 弹起
  • Input.GetKey(KeyCode.W); // 长按

检测默认轴输入

  • Input.GetAxis("Horizontal");
  • Input.GetAxis("Vertical");
  • Input.GetAxis("Mouse X");
  • Input.GetAxis("Mouse Y");

注意:GetAxisRaw没有渐变-1和1,GetAxis有渐变-1到1

其它

Input.anyKeyDown任意键按下

Input.inputString键盘输入

Screen

静态属性

屏幕分辨率

Screen.currentResolution.width``Screen.currentResolution.height

窗口分辨率

Screen.width

息屏休眠

Screen.sleepTimeout = SleepTimeout.NeverSleep;

场景(api)

SceneManager.LoadScene("场景的名字");场景切换

SceneManager.GetActiveScene;获得激活的场景
Application.Quit();退出游戏

Camera

Camera.main获取主摄像机

Camera.allCameraCount获取摄像机的数量

Camera.main.WorldToScreenPoint()世界坐标转屏幕坐标(x,y是根据屏幕坐标系物体的位置,z是物体距离摄像机的距离)

Camera.main.ScreenToWorldPoint()屏幕坐标转世界坐标

物理系统之碰撞检测

private void OnCollisionEnter(Collision collision){}接触时执行
private void OnCollisionExit(Collision collision){}离开时执行
private void OnCollisionStay(Collision collision){}持续碰撞执行
private void OnTriggerEnter(Collider other){}同理

添加力

private RigidBody rb;
rb.AddForce();世界坐标
rb.AddRelativeForce();相对坐标系

扭矩力(旋转)

rb.AddTorque();世界坐标
rb.AddRelativeTorque();本地坐标

速度

rb.velocity();世界坐标

爆炸力

rb.AddExplosionForce(100,Vector.zero,10);1.力的大小2.力的位置3.力的半径

刚体的休眠(unity为了节约性能)

rb.IsSleeping();
rb.WakeUp();

音效

代码控制音效

public AudioSource audioSource;
audioSource.Play();播放音乐
audioSource.Stop();暂停播放
audioSource.Pause();暂停
audioSource.isPlaying是否正在播放

其它

鼠标的相关设置

Cursor.visible = false;隐藏鼠标
Cursor.lockState = CursorLockMode.Confined;锁定鼠标(None不锁定Locked锁定在屏幕中心+隐藏Confined限制在窗口范围内)
Cursor.SetCursor(tex,Vector2.zero,CursorMode.Auto);设置鼠标的图片

参数一:光标的图片 参数二:偏移位置 参数三:光标模式

随机数

Random.range(0,100);左开右闭
Random.range(0.2f,2.3f);左开右开

Unity的自带委托

Learning不会思密达