Unity 入门
Unity 入门
E5战未来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.mousePositionInput.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不会思密达


