C#构造函数的特殊写法
例如 class Person { Stirng name; int age; public Person() { } public Person(int age) { this.age = age; } public Person(String name) { } public Person(String name, int age):this() { }} 这段代码中一共有四个构造函数,其中最后一个构造函数中:this()表示调用自身的无参构造函数,如果想调用其他有参构造函数,可以在其中直接传入参数的值,如public Person(String name, int age):this(age),其调用顺序为先调用this所指定的构造函数,再调用当前构造函数。
Unity API之Physics2D.Raycast
Unity API之Physics2D.Raycast 描述 射线可以用于角色的环境检测,使用射线检测,首先要给被检测的物体挂上Collider。 从概念上说,射线投射类似于从空间的某个点朝特定方向发射一条光束,在该过程中,可以检测并报告与光束接触的任何对象。 参数解释 origin:射线投射的原点 direction:射线投射的方向 distance:射线的最大长度 layerMask:射线只会投射到layerMask层的碰撞体 contactFilter:接触筛选器,用于不同方式筛选结果,例如按照遮罩层、Z轴深度或者法线角度 minDepth:仅包括Z轴坐标大于等于该值的对象 maxDepth:仅包括Z轴坐标小于等于该值的对象 result:用于接收结果的数组。该数组的大小决定可返回的结果的最大数量 返回值 函数会返回一个RaycastHit2D对象,该对象引用了射线命中的碰撞体,如果射线未命中任何对象,则结果的属性将为NULL。 函数也可以返回一个bool型的值,如果射线碰撞到了物体,则返回true,否则返回false。 如...
2D游戏GroundCheck
采用三射线的方法,即在角色的左右和中间添加三个射线,判断是否接触到地面 三条射线只要有一条返回true即isGround = true public Transform[] groundChecks = new Transform[3]; private void GroundCheck() { for (int i = 0; i < 3; ++i) { RaycastHit2D checkResult = Physics2D.Linecast(transform.position, groundChecks[i].position , groundLayer); isOnGround = checkResult; if (isOnGround) break; } } 需要在player上添加三个空object以获取射线的终点,接着分别判断从transform.posi...
Rule Tile使用
作用:在画地图的时候可以按照预设的规则自动调节所画的tile,不用花费多余的时间去切换各种tile 在project settings-Package Manager中打开Enable Preview Packages 在Package Manager中搜索2D TileMAP Extras安装 在tilemap中创建一个Rule Tile 根据规则将tile填入Rule Tile 的Tiling Rules中
u3d基础学习
Sorting Layers 排序越靠下,越在镜头前面显示,越在上面,越在镜头后面显示。在其中还能设置Order in Layer,相同的图层,Order in Layer的值越大,越会显示在镜头前面。 Tilemap Collider 使用Tilemap Collider时会出现每格都是一个方块Collider的情况,可以创建一个Composite Collider 2D来合并Tilemap的Collider。在创建Composite Collider 2D时会附带一个Rigidbody 2D,需要将Body Type修改为static,否则地图会受到重力影响而从屏幕掉落。
json数据如何保存到room中
例如在LoginInfo类中有一个Data数据需要保存到room数据库中。 public static class Data implements Serializable { @PrimaryKey(autoGenerate = true) private int rowId; /** * 认证令牌 */ private String token; /** * 用户角色 */ private Role[] roles; /** * 用户属性 */ private User user; public int getRowId() { return rowId; } public void setRowId(int rowId) { this....
Room使用例
因实例化room消耗极大,因此调用room时应使用单例模式。 首先创建一个抽象类继承与RoomDatabase,并在其中指定model文件及数据库版本。 在java中需要加入exportSchema = false,而在kotlin中不用添加 @Database(entities = {LoginInfo.Data.class}, version = 1, exportSchema = false)public abstract class LoginInfoDatabase extends RoomDatabase { public abstract LoginInfoDao loginInfoDao();} 创建一个接口就可以在其中实现增删改查方法,在此接口前需添加@Dao以指定其为数据库的Dao @Daopublic interface LoginInfoDao { // 登录时插入保存登录数据 @Insert void insertLoginInfo(Log...
android获取屏幕当前显示的activity完整路径
android获取屏幕当前显示的activity完整路径 cmd中输入adb shell "dumpsys window | grep mCurrentFocus"
activity在后台被杀死后恢复,fragment空指针导致崩溃的问题
activity在后台被杀死后恢复,fragment空指针导致崩溃的问题 出现原因 在activity被回收后恢复时,activity被重新实例化了,但是附属在该activity中的fragment并没有被销毁,在activity的onSaveInstanceState里会将fragment的状态保存起来,当activity重新创建时,其中的fragment还是之前的,而父activity已经被回收了,此时调用getActivity会返回null导致崩溃。 解决方法 只需要在fragmentactivity被系统回收的时候不保存fragment的状态即可,即重写fragmentactivity的onSaveInstanceState并注释掉super.onSaveInstanceState方法,代码如下: @SuppressLint("MissingSuperCall")@Overrideprotected void onSaveInstanceState(@NotNull Bundle outState) { // super...
实例化ViewModel的简单方法
实例化ViewModel 新建一个ViewModel为MainViewModel,旧的实例化ViewModel方法为 val mainViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactort()).get(MainViewModel::class.java) 新方法需要导入一个fragment-ktx扩展,在dependencies下添加implementation("androidx.fragment:fragment-ktx:$version")即可 在实例化ViewModel时的代码为 val myViewModel by viewModels<MainViewModel>() 创建能在后台被杀死时仍保存数据的ViewModel 在viewModel中添加savedStateHandle参数即可 class MainViewModel(private val savedStateHandler: SavedState...
