本文档记录自己用到的觉得比较适用的API
-
摄像机
- Renderer.isVisible 当前对象是否处于任意摄像机内.
- 屏幕尺寸
float ratio = Screen.width / Screen.height;
可直接获取屏幕的宽高
*摄像机视野及显示尺寸this.GetComponent<Camera>().rect = new Rect((1 - 0.2f), (1 - 0.2f * ratio), 0.2f, (1 - 0.2f * ratio));
前两个参数表示 摄像机画面处在屏幕的位置,后两个参数表示画面显示的尺寸
-
生命周期函数
- OnBecameVisible() 开始时如果对象在摄像机的视野内则执行一次.
-
编辑器函数
void OnDrawGizmos() { Gizmos.DrawIcon(transform.position, "item.png", true); }
用途:当我们想要在scene中看见一个对象,但又在游戏中不想看见时,可使用此方法.
用法:在Assects根目录下创建文件夹 名称为 Gizmos , 将资源(图片)导入该文件夹, 在想要被看见的对象脚本中 编写函数 void OnDrawGizmos() { Gizmos.DrawIcon(transform.position, “item.png”, true); },该函数即便没运行也能执行, 三个参数为, 显示的位置,显示的图片名称,是否可见.
-
小贴士
- 垃圾回收
if (Time.frameCount % 30 == 0) { System.GC.Collect(); }
创建实例,销毁对象都会产生内存垃圾, 分配内存时手动的,但清除内存是自动的, 系统会根据内置算法自动调用回收垃圾方法,这样会可能掉帧. 可采用的方式 每间隔30帧手动回收,如上述方法, 也可以将手动GC 放在 场景切换时进行.
- 垃圾回收
-
UI
-
EventTrigger 可做按/压判断
EventTrigger trigger = button.GetComponent<EventTrigger>(); EventTrigger.Entry entry = new EventTrigger.Entry(); entry.eventID = EventTriggerType.PointerDown; entry.callback = new EventTrigger.TriggerEvent(); entry.callback.AddListener(delegate (BaseEventData eventData) { Debug.Log("ON Press"); }); trigger.triggers.Add(entry);
-
ScrollView
scrollrect.verticalNormalizedPosition = 0.5f; // 手工移动列表,0.5f表示移到中间
-
判断是否单击了UI
if (EventSystem.current.IsPointerOverGameObject() || GUIUtility.hotControl != 0){}
-
屏幕坐标转UI本地坐标
bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle( dragArea, touchpos, ((PointerEventData)eventData).enterEventCamera, out uguiPos);//将屏幕坐标转换为ugui本地坐标
-
-
DOTween
- 自带状态函数
void OnAnimationFinish() { Debug.Log("动画播放结束") ; }
void OnParamUpdate( float f ) { Debug.Log(f); }
- 自带状态函数
-
物理引擎
- 射线检测
bool hit = Physics.Raycast(gunpos.position, cameraTransf.TransformDirection(Vector3.forward), out raycast, 100, layerMask);
第一个参数是射线发出的起点,第二个参数是射线方向的指向点,第三个参数是 射线检测到的信息,第四个参数是射线可检测的范围距离,第五个参数是 射线可检测的裁剪层.
- 射线检测
-
transform
- 坐标变换
characterCrl.Move(transform.TransformDirection(motion));//本地坐标转换成世界坐标
characterCrl.Move( ) 是以世界坐标为参数的,但我们只能得到本地坐标的参数, 这时transform.TransformDirection(motion)就可以把,以自身为参考的本地坐标移动后的结果,转换成世界坐标. - 坐标累加
cameraTransf.position = transform.TransformPoint(0, rolehight, 0);
表示在transform的坐标基础上,加上(0, rolehight, 0)后得到的坐标. - 向量变换
Vector3 dirward = Vector3.RotateTowards(transform.forward, dir, Time.deltaTime * rot, 0);
当前物体前方的向量将要转向dir方向的向量,过渡期间的向量值
- 坐标变换
-
Animator
- 状态
AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0);
可获取当前动画机的状态stateInfo.fullPathHash == Animator.StringToHash("Base Layer.idle") && !anim.IsInTransition(0)
动画机处于idle状态,且不处于过渡状态
- 状态
-
NavAgent
- 设置目标点
nav.SetDestination(target.position);
- 停止寻路
nav.ResetPath();
- 设置目标点