Unity3d常用知识

2019.4.1

同一物体上的脚步运行顺序(awake)

Project settings -> script execution order 时间小先执行

 

不同物体上的同一脚本执行顺序(awake)

通过其他函数的调用,不使用awake

 

2019.4.29

Range(min,max) number 浮点数

Color (number,number,number,number) 颜色

2D “name” {options} 2D纹理

Rect “name” {options} 长方形(非2次方)纹理

Cube “name” {options} 立方贴图纹理

Float number 浮点数

Vector (number, number, number, number) 四元数的容器

2019.6.28

//可视化图标辅助 创建文件夹Gizmos hbs01tif.png图片放入其中

void OnDrawGizmos() {

    Gizmos.DrawIcon(this.transform.position, "hbs01tif.png");

    Gizmos.DrawLine(new Vector3,new Vector3);

}

//编辑器设置 %q设置快捷键(ctrl+w) 根据返回值禁用编辑器功能

%代表Ctrl

#代表shift

&代表alt

_代表无修改键

[MenuItem("PathTool/SetParent %q", true)]

//组件齿轮功能编辑

[ContextMenu("BuildPath")]

 

2019.7.10

//功能代码热更新可行性研究

  1. Dll

1.将C#单个脚本文件生成dll,再更改为bytes格式文件进行AssetBundle打包,可进行动态加载外部代码。VS编辑器直接生成的dll是整个项目生成的dll,不可使用。CMD命令使用csc.exe生成单个C#文件dll,提示error CS0246: 未能找到类型或命名空间名称“UnityEngine”(是否缺少 using 指令或程序集引用?)。以上结果暂定不可使用dll进行功能代码的动态加载。

使用unity反射来获取类库。

https://blog.csdn.net/qq_39484391/article/details/80888678

https://blog.csdn.net/dongzi860103/article/details/13511031

2.使用dll加ab包方式,解决PC端进行代码热更新的问题,但是WEBGL不支持反射机制不可使用。上次不可使用,是因为dll生成框架没有选择正确。

 2.UniLua

UniLua可实现C#和Lua语言的相互调用,可加载AB对程序进行功能代码的热更新。AB包的资源内容不知,使用AssetStudio解包出为txt文件并且乱码,暂时无法解决该问题。

发布WEBGL不成功会报错,不可使用。

  1. XLua

XLua基于自己的框架可以进行C#和Lua代码的相互调用,并且可以对已经写好的C#代码打上标签以此可以从外部进行修改,以及可以从外部添加额外的功能代码。以上都只能在PC端进行操作,WEBGL端不可使用。XLua框架不可使用。

更新了XLua版本,可以使用WebGL发布,但是运行会报错。

  4.MoonSharp

https://www.cnblogs.com/skig/p/netcore-lua-MoonSharp.html

       使用MoonSharp和Lua进行WebGL上的功能代码热更新测试,WebGL运行崩溃,可能是文件流的问题。

       使用BestHttp成功解决WebGL运行崩溃问题,并且代码加载成功。

 

2019.7.16

//AB包上传到服务器

使用post

https://cloud.tencent.com/developer/ask/216576

 

2019.7.18

//BestHttp Post

使用BestHttp插件,nginx本地服务器,来进行服务器上的文本文件数据获取,得到的数据和本地直接通过Resouces获取的数据不同,数据长度相差一位。通过测试通过BestHttp获取到的数据比Resouces的多一位到第一位上,所以直接移除第一位便可使两个数据相同。

 

2019.7.25

//获取UI宽高

RectTransform rect = transform.GetComponent<RectTransform>();

rect.rect.width

 

//UI蓝图模式

可以固定UI响应区域

 

2019.8.6

//XLua 用做功能代码热更新

https://www.cnblogs.com/takanashi/p/11068995.html

https://github.com/Tencent/xLua/blob/master/docs/source/src/v1/guide/api.md

 

2019.8.9

//shader graph

pbr shader受光照效果

unlit shader不受光照效果

 

2019.9.19

//远程桌面连接镜头控制不可转动问题

  1. 自己的镜头控制脚本:在编辑器、EXE中右键不可使用,但在Html中右键是可使用的。

  2. 官方的第一人称以及第三人称镜头控制脚本:在编辑器下不可使用。

 

  1. Html:鼠标按键可被检测,并且镜头控制正常。

  2. EXE:鼠标按键可被检测,镜头控制不起作用。

  3. 编辑器:鼠标按键可被检测,镜头控制不起作用。

 

  1. 远程桌面连接镜头控制无用的原因 Input.GetAxis获取为0。

  2. Input.GetAxis返回值含义:返回输入设备在方法参数axisName所指定的轴上的位移量,该位移量由此次调用该方法时输入设备在轴上的位置与上次调用该方法时输入设备在轴上的位置相减得出。

    1. 解决:采用前后帧鼠标位置差值检测。

2019.12.3

//鼠标拖动物体移动

screenPosition = Camera.main.WorldToScreenPoint(transform.localPosition);

//获取鼠标在场景中坐标

mousePositionOnScreen = Input.mousePosition;

//让场景中的Z=鼠标坐标的Z

mousePositionOnScreen.z = screenPosition.z;

//将相机中的坐标转化为世界坐标

mousePositionInWorld = Camera.main.ScreenToWorldPoint(mousePositionOnScreen);

//物体跟随鼠标X轴移动

transform.localPosition = new Vector3(mousePositionInWorld.x, transform.localPosition.y, mousePositionInWorld.z);

//字符串添加组件

//获取组件全名

componment.GetType().AssemblyQualifiedName

Type type = Type.GetType(lists[i].componentsName[j]);

gameObject.AddComponent(type);

2020.4.10

Unity阻止鼠标在UI上时执行某种操作(UGUI)

 

 

if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())

return;

 

 

 

物体双击和单机

private Ray _ray;//物理射线相关

    public RaycastHit _hit;//物理射线相关

    private bool _first = true;//新一轮标识(或者也可以叫是否结束的标识)

    private bool _flag = true;//单击或双击的标识(默认单击)

    private void Update()

    {

        monitor();

    }

    /**

     * 鼠标单、双击监听

     */

    private void monitor()

    {

        //触发鼠标左键点击

        if (!Input.GetMouseButtonDown(0)) return;

        //射线检测到的对象是当前对象

        if (Camera.main != null) _ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (!Physics.Raycast(_ray, out _hit) || _hit.collider.gameObject != gameObject) return;

        _flag = !_flag;

        //上一次的事件是否已经执行完毕,也就是判断是否为新一轮

        if (!_first) return;

        _first = false;

        //初始化定时器,300毫秒后执行预定方法

        Invoke("Timer", 0.3f);

    }

    /**

     * 定时调用函数

     */

    private void Timer()

    {

        //进行判断

        if (_flag)

        {

            OnDblclick();

        }

        else

        {

            OnClick();

        }

        //定时调用结束,重置标识

        _first = true;

        _flag = true;

    }

    /**

     * 单击事件

     */

    private void OnClick()

    {

        Debug.Log(gameObject.name + "单击事件被触发");

        //Relation.GetComponent<RectTransform>().SetAsLastSibling();

    }

    /**

     * 双击事件

     */

    private void OnDblclick()

    {

        Debug.Log(gameObject.name + "双击事件被触发");

        //Destroy(gameObject);

    }

 

2020.4.15

使用JSON格式作为配置文件

1.开始使用的Unity插件为 listjson,但因为作为配置文件需要良好的容错性和灵活性,然而 listjson数据对象必须和json一对一,匹配机制十分严格固需要重新寻找其他的JSON读取方式。

2.目前unity自带的 JsonUtility,JsonUtility因不能解析复杂的json所以不在考虑范围内。

3. Newtonsoft.Json 可以解析复杂的json,不需要和json字段一对一 ,灵活。

json字段为字符串,无对应值时,该值为赋值null

json字段为布尔值,无对应值时,该值为赋值false

可以设置参数默认值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值