Unity 默认Inspector支持的一些属性

[HideInInspector]:使用了该属性的变量不显示在inspector 但是被序列化。即不会显示,也不会被外部类调用。

[SerializeField]:将不会被序列化的非公共变量可以序列化,这么在下次读取时,就是上次赋值的值。

[ExecuteInEditMode()]:这个函数可以使代码在编辑模式下运行,不需要运行游戏;

[ExecuteInEditMode]: 编辑环境中该功能(类)生效,简单讲就是。不运行游戏。就可你让你的功能起作用,比如:NGUI中的Slider

[MenuItem(“”)]:导航条中加入自定义菜单。

[CustomEditor(typeof(EButton))]:绑定使用该类。必须依赖EButton类。

[RequireComponent (typeof (ClassName))]:添加该类时。自动会加入ClassName类。

[ContextMenu (“XXX”)]:加入Inspector面板右键菜单。点击执行该功能。

[AddComponentMenu(“XXX/XX/XXX”)]:菜单中出现定义的该类。

小学数学口算题目答题卡生成器 https://calc.mytime.ink/

最近无聊,因为儿子上小学了,所以顺手写了个小学数学口算答题卡生成器,目录是按照最新的人教版教材整理的,欢迎大家使用。

小学数学口算答题卡地址:https://calc.mytime.ink/

小学数学口算题目答题卡下载,100题一页。可以直接下载小学数学口算答题卡,也可以页面上直接打印小学数学口算答题卡,还可以直接一键生成新的小学数学口算答题卡,极大的方便和帮助家长老师们。

查乐卡恩(Cauliun Kakwon)

查乐卡恩(Cauliun Kakwon)是意大利奢侈品公司旗下的全资子品牌。该品牌于2016年进驻中国大陆市场,主要以中高档女包为主打产品,产品一经问世,备受女性消费者的青睐。

该品牌的创始人为查尔克雷斯先生(Charles Kress),他曾在时尚界担任多个国际品牌的设计师和高管职位,积累了丰富的行业经验和资源。2012年,年近六旬的查尔克雷斯先生再出发,创立了Cauliun Kakwon品牌,并于2018末年引入中国,并同时起用中文品牌名——查乐卡恩(Cauliun Kakwon)。

查乐卡恩(Cauliun Kakwon)的品牌定位为中高档轻奢女包,主要以满足现代女性对于箱包多样化需求为核心理念,注重将时尚元素和实用性相结合,为消费者提供高品质、实用性和舒适度俱佳的产品。此外,品牌还注重材料选用和制造工艺的精益求精,确保产品的质量和耐用性。

品牌的受众群体主要是面向年轻、时尚的女性,但也吸引了广泛的消费者群体。品牌的产品设计简约时尚,外观精致雅致,符合现代女性的审美标准和生活需求。

查乐卡恩(Cauliun Kakwon)在社交媒体上也备受关注,多次被国内外媒体报道和推荐。例如,品牌曾获得亚洲时尚设计大奖“最佳女包品牌”殊荣,并被《多家时尚杂志》评选为“2020最受欢迎箱包品牌”,入选《女人我最大》推荐产品等。这些荣誉和媒体报道都彰显了该品牌在市场上的认可度和影响力。

ES6关于数组操作forEach,map,filter,find,some,every,reduce学习理解和使用

首先说明:数组操作forEach(),map(),filter(),find(),some(),every(),reduce()所有方法,只要是return回来的,均不改变原数组。

forEach()

参数item, index
遍历数组全部元素使用,相当于用for循环吧

var arr = [1,2,3,4,5,] ;
arr.forEach(function(item,index){
    console.log(item);
}); 

/*
1
2
3
4
5
*/

map ()

一项一项更新数组内容,有return的话,返回一个新数组

var arr = [1,2,3,4,5] ;
arr.map((item,index)=>{ return item*2})
//  [2, 4, 6, 8, 10]

filter()和find()的区别

filter,find 一般都用于筛选数组,filter返回一个新数组,find则返回第一个符合return后判断内容的单个item

var arr = [1,2,3,4,5] ;
arr.filter(item=>item>2)
// (3) [3, 4, 5]
arr.find(item=>item>2)
// 3

includes()

判断数组是否包含一项内容

var arr = [1,2,3,4,5] ;
arr.includes(4)
// true
arr.includes(6)
// false

some()和every()的区别

some(), every()都是用来判断用的,只会返回true和false
其中some()只有一项满足就会返回true, every()只有一项不满足就会返回false

var arr = [1,2,3,4,5] ;
arr.some(item=>item>4)
// true
arr.some(item=>item>6)
// false
arr.every(item=>item>4)
// false
arr.every(item=>item>0)
// true

reduce()

reduce()一般用于计算,合并,叠加等等

//求和计算
var arr1 = [1,2,3,4,5] ;
var new1 = arr1.reduce(function(sum,next,index){
        return sum+next ;    
        /*
         *第一次:pre-->1  next-->2  index-->1
         *遍历计算return得结果为pre+next=1+2=3
         *第二次:pre-->3  next-->3  index-->2
         *遍历计算return得结果为pre+next=3+3=6
         *第三次:pre-->6  next-->4  index-->3
         *遍历计算return得结果为pre+next=6+4=10
         *第四次:pre-->10  next-->5  index-->4
         *遍历计算return得结果为pre+next=10+5=15
        */
})

//扁平化数组
var arr2 = [[1,2,3],[4,5],[6,7]] ;
var new2 = arr2.reduce(function(pre,next,index){
        return pre.concat(next);    //前数组拼接后数组 .concat()
})

//对象数组叠加计算
var arr3 = [{price:10,count:1},{price:15,count:2},{price:10,count:3}];
var new3 = arr3.reduce(function(pre,next,index){
        return pre+next.price*next.count;
        //当需要对第一项进行操作时,后面pre使用上一项操作结果,不再需要操作
        //所以当需要操作第一项的时候,利用reduce(callbreak(){},往数组第一项前添加一项,如:0)
},0)    //在原数组第一项添加为0,不改变原数组,则可不操作第一项

console.log(new1);
console.log(new2);
console.log(new3);
// 15
// [1, 2, 3, 4, 5, 6, 7]
// 70

chrome浏览器配置跨域问题

问题出现:
因为访问某个后端接口碰到了跨域问题,然后vue这边又因为一些客观原因无法配置跨域,接口端配置跨域又出现了错误,这个时候就陷入了僵局。
所以,我想到了通过浏览器来配置跨域。

以下讲的都是windows下的chrome浏览器跨域配置:
1、C盘根目录下,建一个 MyChromeDevUserData 文件夹
2、复制浏览器快捷方式,改名为DEV,在DEV上右键,进入属性
3、在属性的目标输入框 尾部加上 --disable-web-security --user-data-dir=C:\MyChromeDevUserData
4、应用,并双击DEV的浏览器快捷方式,打开chrome
5、跳出 您使用的是不受支持的命令行标记:--disable XXXXXXX,说明配置成功
以后你用DEV的快捷方式打开浏览器,将永远不需要处理跨域问题

Unity3d 实现移动端的触摸屏操作-场景的缩放移动

通过Input.touchCount来判断触控点位,通过Input.GetTouch(0).phase来判断移动的类型。

其中phase(状态)有以下这几种:
Began:手指刚刚触摸屏幕
Moved:手指在屏幕上移动
Stationary:手指触摸屏幕,但自最后一阵没有移动
Ended:手指离开屏幕
Canceled:系统取消触控跟踪,原因如把设备放在脸上或同时超过5个触摸点

代码中主要用到的是TouchPhase.Began和TouchPhase.Moved。
完整代码如下,放置到主摄像机上即可:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MobileTouch : MonoBehaviour
{
    //是否缩放
    private bool IsZoom = false;
    //当前双指触控间距
    private float DoubleTouchCurrDis;
    //过去双指触控间距
    private float DoubleTouchLastDis;

    //记录手指触碰的位置
    Vector2 m_screenPos = new Vector2();

    void Start()
    {

    }

    void Update()
    {
        if ((Input.touchCount > 1) && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved))
        {
            // 多点触控
            Touch touch1 = Input.GetTouch(0);
            Touch touch2 = Input.GetTouch(1);

            DoubleTouchCurrDis = Vector2.Distance(touch1.position, touch2.position);

            if (!IsZoom)
            {
                DoubleTouchLastDis = DoubleTouchCurrDis;
                IsZoom = true;
            }

            float distance = DoubleTouchCurrDis - DoubleTouchLastDis;
            Camera.main.fieldOfView += (distance > 0 ? -1 : 1) * 1;//更改了摄像头的高度
            DoubleTouchLastDis = DoubleTouchCurrDis;
        }
        else if (Input.touchCount == 1)
        {
            // 单点移动
            if (Input.touches[0].phase == TouchPhase.Began)
            {
                //记录手指刚触碰的位置
                m_screenPos = Input.touches[0].position;
            }
            if (Input.touches[0].phase == TouchPhase.Moved) //手指在屏幕上移动,移动摄像机
            {
                transform.Translate(new Vector3(Input.touches[0].deltaPosition.x * Time.deltaTime * -1, Input.touches[0].deltaPosition.y * Time.deltaTime * -1, 0));
            }
        }
    }
}

前端通过meta设置各种模式等

<!-- 设置缩放 -->
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimal-ui" />
<!-- 可隐藏地址栏,仅针对IOS的Safari(注:IOS7.0版本以后,safari上已看不到效果) -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<!-- 仅针对IOS的Safari顶端状态条的样式(可选default/black/black-translucent ) -->
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<!-- IOS中禁用将数字识别为电话号码/忽略Android平台中对邮箱地址的识别 -->
<meta name="format-detection"content="telephone=no, email=no" />

<!-- 启用360浏览器的极速模式(webkit) -->
<meta name="renderer" content="webkit">
<!-- 避免IE使用兼容模式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- 针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓 -->
<meta name="HandheldFriendly" content="true">
<!-- 微软的老式浏览器 -->
<meta name="MobileOptimized" content="320">
<!-- uc强制竖屏 -->
<meta name="screen-orientation" content="portrait">
<!-- QQ强制竖屏 -->
<meta name="x5-orientation" content="portrait">
<!-- UC强制全屏 -->
<meta name="full-screen" content="yes">
<!-- QQ强制全屏 -->
<meta name="x5-fullscreen" content="true">
<!-- UC应用模式 -->
<meta name="browsermode" content="application">
<!-- QQ应用模式 -->
<meta name="x5-page-mode" content="app">
<!-- windows phone 点击无高光 -->
<meta name="msapplication-tap-highlight" content="no">

整理解决node-sass依赖错误的问题

最近因为某些原因,MAC系统重装了,然后运行老项目时,出现了各种水土不服的问题,花了不少时间解决,特此记录。

解决方案:查看自己的node版本是否过高,node-sass@4.x.x系列的依赖在过高版本的node下不能顺利运行的。我是通过n控制node版本,降低node@v10.24.1得以解决。

因为习惯使用CNPM淘宝源来进行依赖安装,即cnpm i,发现老项目老是报错:

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.14.1 postinstall: `node scripts/build.js`

网上搜索后,很多人说是通过淘宝源解决,但我尝试后问题依旧,不过我已经锁定是node-sass的版本问题。

故尝试了cnpm i,翻墙 npm i,或者设置

npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass

以上都没有效果。

也自己尝试删除package.json中的

"node-sass": "^4.8.3",
"sass-loader": "^7.0.1",
"style-loader": "^0.21.0",

然后重新cnpm i node-sass sass-loader style-loader -D,依赖倒是都可以安装上了,但运行npm run dev时,会报错:

Module build failed: TypeError: this.getOptions is not a function
或者
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string。

然后解决方案搜索后,说是node-sass版本太高了,因为这时自动加载的node-sass已经到了6.0.1还是多少。
后来想到,可能是node的版本问题,所以查了下NODE版本,

node-v16.10.0

确实太高了,已经接近最新版本,估计node-sass@4.8.3依赖和node版本之间的问题了。

随即,安装n来控制node多版本,安装node 10系列的版本

root@zhujindeMacBook-Pro ~ # n list
node/16.10.0
root@zhujindeMacBook-Pro ~ # n 10
  installing : node-v10.24.1
       mkdir : /usr/local/n/versions/node/10.24.1
       fetch : https://nodejs.org/dist/v10.24.1/node-v10.24.1-darwin-x64.tar.xz
   installed : v10.24.1 (with npm 6.14.12)
root@zhujindeMacBook-Pro ~ # n
   installed : v10.24.1 (with npm 6.14.12)
root@zhujindeMacBook-Pro ~ # node -v
v10.24.1

之后回到项目,删除node_modules,重新运行cnpm i,问题解决。

git退回或者git放弃当前修改时的各种基本操作

  1. 未使用git add 缓存代码
    使用git checkout -- filename,注意中间有--

    git checkout -- filename

    放弃所有文件修改 git checkout .

    git checkout .

    此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除
    此命令不会删除新建的文件,因为新建的文件还没加入git管理系统中,所以对git来说是未知,只需手动删除即可

  2. 已使用git add 缓存代码,未使用git commit
    使用 git reset HEAD filename

    git reset HEAD filename

    放弃所有文件修改 git reset HEAD

    git reset HEAD

    此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了第一步1. 未使用git add 缓存代码,继续使用用git checkout -- filename,就可以放弃本地修改

  3. 已经用 git commit 提交了代码
    使用 git reset --hard HEAD^ 来回退到上一次commit的状态

    git reset --hard HEAD^

    或者回退到任意版本git reset --hard commit id ,使用git log命令查看git提交历史和commit id

    git reset --hard commit id