unity 开发中10个小知识(一)

文章介绍了在Unity开发中涉及的一些关键知识点,包括如何获取和使用LayerMask,进行Raycast检测,处理触摸输入,检查FairyGui的UI交互,动态创建UIPanel,为控件添加触摸事件,以及C#中的空合并操作符和可空调用操作符的使用。此外,还讲解了泛型约束和对象旋转的方法。
摘要由CSDN通过智能技术生成

现在记忆力越来越差,写过很多遍的内容,都有可能需要慢慢才能想起来,这里就记录下在unity开发过程中一些小的知识点

一、获取unity层级和layerMask

 int ground = LayerMask.NameToLayer("Ground");

 int groundMask = 1<<ground;


二、获取鼠标拾取位置

 

    public static  class ULayerMask
    {
        public static int Ground = LayerMask.NameToLayer("Ground");
        public static int GroundMask = 1<<LayerMask.NameToLayer("Ground");

        public static int Wall = LayerMask.NameToLayer("Wall");

        public static int WallMask = 1 << Wall;

        public static int CollisionMask = 1<< Ground | 1<< Wall;



    }

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            RaycastHit hit;

            if (Physics.Raycast(ray, out hit,1000f,ULayerMask.CollisionMask)) 
            {
                ULog.Error("astar");
                foreach (var actor in charactors.GetActors())
                {
                    actor.Astar?.BeginPath(hit.point);
                }
            }


 

 三、获取触摸输入的位置

for (var i = 0; i < Input.touchCount; ++i)
{
    if (Input.GetTouch(i).phase == TouchPhase.Began)
    {
        // Construct a ray from the current touch coordinates
        Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
        // Create a particle if hit
        if (Physics.Raycast(ray))
        {
            //ULog.Info(ray.ToString());
        }
    }
} 

四、FariyGui 判断鼠标等输入设备是否在UI之上

 Stage.isTouchOnUI


 

五、fairyGui动态创建UIPanel

GameObject uiObject = new GameObject();
uiObject.layer = ULayerMask.UI;


UIPanel uiPanel = uiObject.AddComponent<UIPanel>();

uiPanel.packageName = package;
uiPanel.componentName = componentName;

uiPanel.CreateUI();

 


 六、fairyGui为控件添加Touch事件

  GObject _touchArea;

_touchArea.onTouchBegin.Add(this.OnTouchBegin);
 _touchArea.onTouchMove.Add(this.OnTouchMove);
_touchArea.onTouchEnd.Add(this.OnTouchEnd);

七 C#中??的使用

a??b;

当a不为空时返回a,否则返回b

八、C#中 ?. 的使用

a?.name

如果a为空返回空,否则返回a.name

string name = a?.name;

九、如何对泛型进行约束

约束为T必须继承BaseComponent,并且带默认构造函数

public void RemoveComponent<T>() where  T : BaseComponent,new()
{
    RemoveComponent(typeof(T));

}


十、绕y轴选旋转一定角度

 

public void RotationY(float angle)
{

    transform.rotation = Quaternion.Euler(Vector3.up * (angle % 360));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值