阅读代码时,先弄清楚每一块的功能;再根据关键的东西去看懂它(根据钻孔生成德劳内,加密三角剖分网络,用边界去截取)
通用的功能最好写成一个class,或者一个file,写成通用的功能
页面的阅读逻辑和算法的逻辑分开,不要一条线写到底
面向对象编程
找到使用代码模块的方法,不必纠结于代码细节
类,包括属性(必须要有的,固有的),方法(行为,一定要有括号),可能会重复利用的,关系特别大的,复杂的流程也可以当作一个类,此时不注重属性,而是注重方法,此时类相当于一个黑箱子。
一个类,开一个文件,文件名=类名
非静态类调用时必须先实例化一个对象,静态类则可以直接使用,静态类中一定要有静态方法,静态类适用于比较简单的东西。
检查输入的数据是否为有效数据,建立无效数据删除机制。
基本的数学问题搞清楚,逻辑严密才不会出问题,模块化写代码,模块化测试,追踪奇异数据。
有需求再写代码,先写最基本的用途,再根据实际需求补充类中的字段及方法
保护好类中的非独立变量,不可为外部所更改(独立变量可更改,非独立变量的更改易引起冲突),可利用get、set控制外部数据读写类的内部字段,保证类的安全性。
封装有时称为面向对象的编程的第一支柱或原则。 根据封装原则,类或结构可以指定自己的每个成员对外部代码的可访问性。 可以隐藏不得在类或程序集外部使用的方法和变量,以限制编码错误或恶意攻击发生的可能性。
习惯用类的方式表征数据,一个类要放在一个cs文件中。
## Class
类的组件包括:
# CAUTION
• “>10e-5 “means bigger than” 〇”, this is a question that so simple which will kill you.
• When you divide something, you must consider what if the denominator(分母) is 〇
# 自己的思考
类定义对象类型,但不是对象本身,类描述对象的类型,对象是类的可用实例,对象是基于类的具体实体,也可称为类的实例,创建类的实例后,会将一个该对象的引用传递回程序。
多写代码,边写边尝试
结构体是稍有些复杂的数据。
# 强哥note
## 程序结构的演变
多条语句包装起来重用-》函数
多个函数或变量包装起来-》类
类被实例化后-》对象OBJECT
类中的公共变量-》属性
类中的公共函数-》方法
存放类或函数可供其他程序调用的py文件-》模块
存放模块文件的文件夹结构-》包package
类的属性
公共和私有属性
属性在内部的访问(隐私)
属性在外部的访问(公开信息,组织内部可知道)
类的方法
动态方法,参数的特别规定,SELF,类里面的函数的第一个参数一定是SELF变量(SELF指class自己,self.变量名=
静态方法:@static method
静态方法和动态方法的区别与各自的优缺点:静态方法常驻内存,用于处理简单事物,静态方法不宜过多,不同的设备性能不同,动态方法实例化后载入内存不同设备性能不同
初始化方法:init,类被实例化后自动执行的方法(入口函数,构造函数)
类的实例化,静态方法可以不实例化,一个类被实例化后,就成为了两个不同的副本,对同样的事情可能有不同的反应
### 模块MODULE
讲所有可用的code放入一个py文件,这个文件成为模块
模块的引用:文件名即模块名
if name=='main': 使用该语句,只是用模块而不执行程序题(普遍的用法,不是语法)
package
## 条件判断
Beginner坑:注意条件的全覆盖,提前给label赋值为“unknown”
三目运算符:return True if condition else retuen False
正则表达式—字符串处理库,永远不要相信用户的输入(处理用户输入)是可靠的
Circulation
'''While true else, for item in collections'''
Infinite circulation的作用与坑
Break/continue
单行:while condition:pass
嵌套:range(5) =range(0, 5, 1), range(2, 4), range(2, 10, 3)
For i in range ( len( a )): print( i, a[i] ) #range与len结合索引遍历列表
知识点
函数就是经验的固化(对你的编程事业非常重要)
def functionName (parList)
参数list dict是可变的
用关键词方式传递参数,参数的位置可变
参数的默认值
不定数量的参数可以用集合代替
Return默认为none,return后面的值和return本身都不是必须的
高级函数应用:匿名函数,迭代器,生成器,装饰器
列表和字典都可以被修改,不安全,建议使用obj.copy传递,你可以忘掉不可以更改的元组。
数据常用操作:增删改查
Dict中重复的key只保留最后的
常用操作中不可忽略大小写问题
通常使用isnumeric, isempty判断(none、空格、什么都没有“”)
加(格式化,忘记%,强烈建议format,乘、截取)
# Unity
## 基本模块
1、 Inspector查看场景中的物体都挂了哪些脚本
2、 可以将文件夹直接拖拽进Unity
## 基本语法
1、 Start() 场景运行初始执行 // Use this for initialization、Update() 每帧执行一次、OnGUI() 每帧执行一次(用户图形界面,写按钮)
2、 SendMessage用法
[图片上传失败...(image-2c600b-1542284534287)]
找到这个物体,调用挂到该物体上的脚本中Test类,并实例化、传递参数以对该物体进行某种操作。
3、 Transform可用于查询物体的坐标,名称等基本信息
4、 Mouse
5、 Debug.Log("Start"); //在屏幕上输出文字
6、 public GameObject cube; //Private 修饰符会将操作封装起来
public GameObject sphere; //😀Public 修饰符会将操作显示在inspector里面
在场景中新建Object
7、 public & private之间的区别:public代表其参数可以在Inspector窗口里面进行调节,而Private代表可以在脚本里面进行调节。
8、 [图片上传失败...(image-37834c-1542284534287)] 可以直接在Hierachy窗口中新建对象,拖拽到对应脚本上(脚本中的对象为public)
9、 Render 渲染器是使物体显示在屏幕上。对于任何游戏物体或组件它的渲染器可以通过渲染器属性来访问
10、 GameObject是Unity场景里面所有实体的基类
11、 Input.GetMouseButtonDown 获取鼠标按钮按下, 在用户按下指定鼠标按键的那一帧返回true。你需要在Update方法中调用这个方法,此后每一帧重置状态时,它将不会返回true除非用户释放这个鼠标按钮然后重新按下它。按钮值设定为 0对应左键 ,1对应右键 ,2对应中键。
12、 鼠标在屏幕点击,并发射射线,变相的获取
''' Ray ray = camera.GetComponent<Camera>(). ScreenPointToRay(Input.mousePosition); '''
13、 Input.GetPosition 获取位置,static function GetPosition (deviceID : int) : Vector3
14、 Input 输入: Interface into the Input system(输入系统的接口)。
15、 <u>gameobject</u> <u>:当前游戏对象的实例,</u><u>transform:</u><u>当前游戏对象的</u><u>transform</u><u>组件。</u>从概念可以看出,两者是不同的两个东东,在unity中每个游戏对象都是一个gameobject,而每个gameobject都包含各种各样的组件,但从这点可以看出transform是gameobject的一个组件,控制着gameobject的位置,缩放,和旋转,而且每个gameobject都有而且必有一个transform组件。
16、
17、
## 有关套路
【选中物体】在屏幕上画点,从该点沿摄像头前方散发射线,若射线与物体有交点则可以选中物体并对物体进行操作
# 剖切
划线→传参数→剖切
自己划线(选点)→传参数→剖切
## FAQ
1、 当编辑器编辑Unity脚本无法自动弹出智能提示【解决办法】edit→Unity Preference→external tools→External Scrip Editor重新选中并链接编辑器devenv.exe
2、 有的时候看不见对象,可能是对象在另外一个对象内部
3、 gameobject和transform的区别和关联:
4、
5、
常见报错解决方法
错误代码:并非所有的代码路径都返回值
解决办法:
1)在返回值的函数中,一定要保证无论程序走哪个分支都会正常的用return来返回一个值,即 不要置入if语句中
2)不要置入for循环语句中,因为循环有可能会一次都不执行,直接跳过所以将return写在循环里面不能保证任何逻辑下都有返回值,而且即使你用传入的参数控制,让逻辑能够完美的运行,但是编译器可不知道你运行的时候究竟会传进什么东西来,这种 for 循环永远不可能结束的代码,也是报相同的错误。
附注:所以编译器有时候也跟“你的技术主管”一样,看一下你这个人做事是否在关键地方显得有规矩,不管你有什么理由,只要形式上不规矩就不行。
小结:return后面的代码不会执行,可利用return控制后面语句的执行。
网友评论