工作中的UI界面开发的知识点1

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;

这是一款真正意义上适合软件界面开发的C++界面库。采用XML管理GDI资源(如:图片、字体、颜色等),最大程度将界面与逻辑分开,让程序员有更多的时间去进行软件内部的逻辑处理。SKINSE扩展了非常丰富的API接口,兼容其他界面控件,使界面开发更加灵活、高效。SkinSE只用到了windows几个底层的核心库,没有用到(MFC/ATL等第三方库),采用纯API编写,采用C语言导出方式,增强可移植性,可以用于多种计算机语言。 1.SKINSE界面库内部没有完全采用HOOK拦截窗口的机制,主要采用子类化控件,修改窗口过程函数的方式进行界面美化。但是内置HOOK技术,可以动态设置HOOK,保证了SKINSE在整理构架上的灵活性。 2.SKINSE界面库内置DirectUI绘制思想,将界面绘制元素抽象成图片、文本、矩形区域、线条、动画,并且内置EventItem、DrawItem绘制机制。可以将这些绘制元素以及绘制机制组合开发,实现按钮、单选框、复选框、分组框、Tab控件、动画控件等界面控件。 3.SKINSE界面库提供了非常丰富的API接口,最大限度的让SKINSE界面库更加透明化、个性化,让SKINSE界面库的使用范围得到最大延伸。 4.SKINSE界面库在子类化进行控件美化的时候,尽量不修改控件的默认属性,最大程度地兼容window标准控件的默认属性。比如,目前市场上很多界面库在绘制窗口标题栏的时候,去掉了窗口的WS_CAPTION属性, 导致GetClientRect、GetWindowRect方法失效,从而加大了界面开发和设计的难度,当然也导致不能完美支持SDI/MDI等界面框架。 5.SKINSE界面库提供了界面控件动态布局的特性。省去了程序开发最为繁琐的窗口控件位置的调整。只需要调整一下XML配置属性,就可以进行完美布局。 6.SKINSE界面库支持BMP、ICO、PNG、JPG等图片格式,支持皮肤色调变换,提供SKINSE内部的图像引擎接口。 7.SKINSE界面库支持SDI、MDI等界面框架,支持20余种界面控件,完整兼容window 2000、window2003、window XP、vista、window7当前的主流操作系统。并且支持window平台的VC、.NET、VB6、Delphi、C++ Builder、PowerBuilder、易语言等多种计算机语言开发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值