1.滑动列表,竖排内容,自动扩充排列。
在Scroll View 下找到 Content ,为其添加组件
Vertical Layout Group 和 Content Size Fitter
(横向列表同理)
2.在特定物体下寻找已知名字的子物体。
transform.Find(“name”);
其中transform属于特定物体。
3.使用下面的语句从数据库中读出的字符串格式进行转换,使Unity能够正确处理转义字符。
content = System.Text.RegularExpressions.Regex.Unescape(param);
4.拖动鼠标水平移动视角
注:该脚本一定要放在UI或者collider上
Camera m_camera;
Vector3 lastPos;
Vector3 offset;
void OnMouseDown()
{
lastPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
void OnMouseDrag()
{
offset = lastPos - Camera.main.ScreenToWorldPoint(Input.mousePosition);
m_camera.transform.position += offset;
}
5.自建Eidtor菜单,根目录建立“Editor”文件夹,创建脚本如下
using UnityEditor;
public class MyMenu : MonoBehaviour
{
[MenuItem("MyMenu/Function")]
static void Function()
{
}
}
6.编辑模式下运行脚本函数
[ContextMenu("Function")]
static void Function()
{
}
7.unity2019.3以上的版本,打开后发现Console报空错误,此时需要更新.Net到4.8,才能继续正常使用
8.只有把StartCoroutine赋予变量,才能用StopCoroutine(string CoroutineName)准确停用该协程。
public Coroutine coroutine;
coroutine = StartCoroutine(CoroutineName());
StopCoroutine(coroutine);
9.Inspector界面常用编辑方法
[Header("显示类型名称")]
10.无法buildi安卓包?
在unity unity 2018.3.1中,选中“使用旧版SDK工具”(Publishing Settings >> Use legacy SDK tools)。
11.得到范围内的碰撞体
Physics2D.Overlap....
12.改变角度,朝向目标(2D)
Vector3 v_rela = Target.transform.position - transform.position;
float angle = Vector3.Angle(Vector3.right, v_rela);
Vector3 normal = Vector3.Cross(Vector3.right, v_rela);
angle *= Mathf.Sign(Vector3.Dot(normal, Vector3.forward));
transform.eulerAngles = new Vector3(0, 0, angle);
13.transform.eulerAngles.z 有180,-180会自动变成180。
14.给UI添加Canvas组件,可以调整其渲染优先级,如果要实现拖动UI等功能,还需添加Graphic Raycaster组件。
15.判断字符串为空格的
(1)str==" ";
如果字符串为一个空格就返回true;它只能判断为一个空格的情况下,所以不太常用,也不太好用。
(2)string.IsNullOrWhiteSpace( str );
如果字符串为一个或者多个空格还有空null的情况下都会返回true;它不仅能判断为一个空格,多个空格的情况也是适用的。一般用的就是这个。
16 Text.preferredHeight 可获得Text的适应高度
17.Text空格自动换行的问题
public static readonly string no_breaking_space = “\u00A0”;
text.text = text.text.Replace(" ", no_breaking_space);
18.Scrollbar.value 的值
等于 scrollview头部未显示的部分 除以 scrollview所有未显示的部分。
19.使用和停止协程
IEnumerator coroutine = Test();
StartCoroutine(coroutine );
StopCoroutine(coroutine);
IEnumerator Test() {}
18.获取子物体
for (int i = 0; i < transform.childCount; i++)
{
Debug.Log(transform.GetChild(i).name);
}
19.鼠标获取UI
using UnityEngine.EventSystems;
public GameObject GetOverUI(GameObject canvas)
{
PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
pointerEventData.position = Input.mousePosition;
GraphicRaycaster gr = canvas.GetComponent<GraphicRaycaster>();
List<RaycastResult> results = new List<RaycastResult>();
gr.Raycast(pointerEventData, results);
if (results.Count != 0)
{
return results[0].gameObject;
}
return null;
}
20.鼠标点击获取2d碰撞体
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit2D[] hits = Physics2D.RaycastAll(new Vector2(ray.origin.x, ray.origin.y), Vector2.zero);
for (int i = 0; i < hits.Length; i++)
{
if (hits[i].collider)
{
Debug.Log(hits[i].collider);
}
}
21.检测是否点击到UI
using UnityEngine.EventSystems;
public bool IsClickDownOverUI()
{
if (EventSystem.current.IsPointerOverGameObject())
{
return true;
}
return false;
}
22.unity3d编辑器模式下运行
添加代码:[ExecuteInEditMode]
转自:unity3d编辑器模式下运行
using UnityEngine;
[ExecuteInEditMode]
public class MyEditorScript : MonoBehaviour
{
}
23. Inspector 中的值被修改时调用方法
void OnValidate()
{
Debug.Log("OnValidate");
}
24. 获取Text内容长度
private float CalcTextWidth(Text text)
{
TextGenerator tg = text.cachedTextGeneratorForLayout;
TextGenerationSettings setting = text.GetGenerationSettings(Vector2.zero);
float width = tg.GetPreferredWidth(text.text, setting) / text.pixelsPerUnit;
return width;
}
25.scroll view中,可通过调整Viewport的Pivot来调整滑动条特定的位置。
26.Unity的UI阻挡点击检测
using UnityEngine.EventSystems;
using UnityEngine.UI;
public GraphicRaycaster The_Caster;
public bool Check_Click_On_Window()
{
PointerEventData ped = new PointerEventData(EventSystem.current);
ped.position = Input.mousePosition;
List<RaycastResult> results = new List<RaycastResult>();
The_Caster.Raycast(ped, results);
if (results.Count > 0)
for (int i = 0; i < results.Count; i++)
{
if (results[i].gameObject.layer == 8) //** 8为要检测的UI的Layer id
{
return true;
}
}
return false;
}
26.卸载未占用的asset资源
Resources.UnloadUnusedAssets();
System.GC.Collect();
21.使用 VerticalLayoutGroup 时,注意对齐anchor,以免改变子物体大小时,发生错位
22.创建Texture2D时,mipChain选false可以避免边缘模糊