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.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不会思密达