1、//字符串转枚举
SceneType type = (SceneType)Enum.Parse(typeof(SceneType), sceneName);
2、鼠标移动图片
RectTransformUtility.ScreenPointToWorldPointInRectangle(go.transform.GetComponent(), Input.mousePosition, data.enterEventCamera, out m_testPosition);
go.transform.position = m_testPosition;
RectTransform 移动时,要使用 rect.anchoredPosition3D
trantform 移动,使用 trans.localPosition
5、Animator当前正在播放的状态 名字
string animString = anim.GetCurrentAnimationClipState(0)[0].clip.name;
//示例,查询对应的播放状态
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
if (stateInfo.IsName(“Base Layer.Run”))
{
if (Input.GetButton(“Fire1”))
animator.SetBool(“Jump”, true);
}
//当前动画的进度
stateInfo.normalizedTime 的值整数部分是当前动画的循环播放时间(或者循环次数,具体不知,大概率是播放总时长),后面
的小数部分是当前播放进度,获取小数部分可以这样做
int integer=(int)stateInfo.normalizedTime;
float progress=stateInfo.normalizedTime-integer; //这样就获取到当前小数的部分了
6、//图片的检测透明度为0.5 需要设置图片的Sprite2D格式,然后开启Advanced中的Read/WriteEnabled
transform.GetComponent().alphaHitTestMinimumThreshold = 0.5f;
7、修改图片RectTransform的宽和高
var rt = gameObject.GetComponent();
rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 0, 100);
rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, 30);
//这种方式修改宽和高会受锚点的影响
rect.sizeDelta = new Vector2(616.2f, 1057.9f);
//修改图片大比例Scale,使用doTween来缩放图片大小
RectTransform rec = gameObject.GetComponent();
if (rec != null)
{
initScale = rec.localScale.x;
gameObject.transform.DOScale(initScale, ScaleTime);
}
8、世界坐标转换成屏幕坐标
float scrollLeft = Camera.main.WorldToScreenPoint(scroll.transform.position).x;
9、买点得分
CollectManager.Instance.RecordScenePoint(“卡牌”, 0, 6 - m_FlipCardDic.Count, 0); //买点得分
发送买点,发送一次,一次内包含正确的次数
10、协程相关
yield return null; // 下一帧再执行后续代码
yield return 0; //下一帧再执行后续代码,比return null多消耗20B的内存
yield return 6;//(任意数字) 下一帧再执行后续代码
yield break; //直接结束该协程的后续操作
yield return asyncOperation;//等异步操作结束后再执行后续代码
yield return StartCoroution(/某个协程/);//等待某个协程执行完毕后再执行后续代码
yield return WWW();//等待WWW操作完成后再执行后续代码
yield return new WaitForEndOfFrame();//等待帧结束,等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行
yield return new WaitForSeconds(0.3f);
//等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间会受到Time.timeScale的影响);
yield return new WaitForSecondsRealtime(0.3f);
//等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间不受到Time.timeScale的影响);
yield return WaitForFixedUpdate();//等待下一次FixedUpdate开始时再执行后续代码
yield return new WaitUntil()
//将协同执行直到 当输入的参数(或者委托)为true的时候…如:yield return new WaitUntil(() => frame >= 10);
yield return new WaitWhile()//将协同执行直到 当输入的参数(或者委托)为false的时候… 如:yield return new WaitWhile(() => frame < 10)
11、修改 gameobject的位置,在UI层上的显示
RectTransform rt = go.GetComponent();
rt.anchoredPosition3D = prefabPos;
修改3D空间的位置是
go.transform.localPosition = prefabPos;
12、如果UGUI旋转后,按钮不能点击,则可以修改Scale中的值,只要设置成-1就翻转了
13、c#检测文件是否存在
string prefab = ResourcesDefine.LocalBundleDefine + “/” + sceneName.ToLower() + “_prefab”;
if (File.Exists(prefab))
{
num += 1;
}
true存在,false不存在
14、c#创建文件夹
if (!Directory.Exists(path))
{
// Create the directory it does not exist.
Directory.CreateDirectory(path);
}
15、计算文件夹大小,计算文件夹中的文件大小总和
public static long DirSize(DirectoryInfo d)
{
long Size = 0;
// Add file sizes.
FileInfo[] fis = d.GetFiles();
foreach (FileInfo fi in fis)
{
Size += fi.Length;
}
// Add subdirectory sizes.
DirectoryInfo[] dis = d.GetDirectories();
foreach (DirectoryInfo di in dis)
{
Size += DirSize(di);
}
return(Size);
}
16、使用DoTween来移动时,暂停方法是
go.transform.parent.DOPause();
17、Animator 倒着播放动画
anim.speed = -1;
anim.Play (“AnimationTestClip”);
两创建两个动画间的过度,ExitTime 就是延时的等待时间。记得把过度的部分调成“无”
18、生成一组不重复的随机数字
///
/// 获取不重复的从0开始的n个随机整数,随机范围是连续的整数
///
/// 获取随机的数量
/// 随机范围上限–包含
/// 随机范围下限–包含
///
public static int[] GetRandoms(int num, int max, int min = 0)
{
if (max < num || max < min)
{
//不符合要求
return null;
}
//存放有序的数组
int[] orderly = new int[max - min];
//存放无序的数组
int[] disOrderly = new int[num];
for (int i = min; i < max; ++i)
{
//先生成一个有序的数组
orderly[i - min] = i;
}
//通过交换的方式来生成一组伪随机数组
for (int j = 0; j < orderly.Length; ++j)
{
//先随机一个值,这个值就是有序数组的下标
int id = Random.Range(0, max - min);
//将随机选出来的第[id]位的值与有序数组第i位进行交换
int temp = orderly[id];
orderly[id] = orderly[j];
orderly[j] = temp;
}
//将不重复的数组,截取前num个来使用
for (int i = 0; i < num; ++i)
{
disOrderly[i] = orderly[i];
LogSystem.Log("random: " + i + " : " + disOrderly[i]);
}
return disOrderly;
}
19、2D模型的检测,模型身上需要挂在Boxclider,不是2D的那个
void Update()
{
if (Input.GetMouseButtonUp(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo))
{
Debug.DrawLine(ray.origin, hitInfo.point);
GameObject gameObj = hitInfo.collider.gameObject;
Debug.Log("click model name " + gameObj.name);
}
}
}
20、在Resource下面,的资源使用Resource.Load()来加载,不在Resource路径下的资源使用
var item = AssetDatabase.LoadAssetAtPath(dataPath, typeof(UnityEngine.Object)); 来加载
这个加载的路径必须是从Asset文件夹开始的,不能是工程路径外
21、加载Shader
Shader shader = Shader.Find(“Unlit/Alpha_zorro”);
22、动态修改Animator的Controller
string controllerPath = “Assets/AnimationFile/Bacteria_Ani/lukeke/out/lukeke_Controller.controller”;
Animator tor = spineModel.GetComponent();
RuntimeAnimatorController newController = (RuntimeAnimatorController)AssetDatabase.LoadAssetAtPath(controllerPath, typeof(RuntimeAnimatorController));
tor.runtimeAnimatorController = newController;
23、动态修改Spine的层级OrderInLaye
MeshRenderer ske = model.GetComponent();
ske.sortingOrder = order;
通过meshRender来实现修改的
24、使某个image给淡入淡出效果
three.transform.Find(“arrow”).GetComponent().DOFade(1, 2);
25、使用刚体移动
Role.gameObject.GetComponent().velocity = Vector3.up * MoveSpeed * Time.deltaTime;
参考RescueMeiMeiCaiMoGu.cs
26、8天前日期
DateTime date = DateTime.Now.AddDays(-8);
27、两点之间的角度计算公式旋转角度,有可能是up,根据朝向,如果是up则以12点的方向来计算的
Vector3 direction = leftMove.transform.position - point.transform.position;
float angle = Vector3.Angle(-direction, Vector3.right);
point.transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
28、锁帧
//锁帧
Application.targetFrameRate = 60;
//关闭息屏
Screen.sleepTimeout = SleepTimeout.NeverSleep;
//关闭多点触碰
Input.multiTouchEnabled = false;