MiNiJson SMS-SDK和ShareSDK 都有,因此删掉一个就行了
libs 下有几个Jar包重复了,删除一个就行了

两个android manifest文件有冲突
<uses-sdk
android:miniSdkVersion="16"
android:targetSdkVersion="26"/>
把两个有冲突的属性给去掉一个保留一个
MiNiJson SMS-SDK和ShareSDK 都有,因此删掉一个就行了
libs 下有几个Jar包重复了,删除一个就行了

两个android manifest文件有冲突
<uses-sdk
android:miniSdkVersion="16"
android:targetSdkVersion="26"/>
把两个有冲突的属性给去掉一个保留一个
视口坐标系就是屏幕坐标系的单位化,固定左下角原点为(0,0),右上角为(1,1)
屏幕坐标系没有Z轴,世界坐标转换为屏幕坐标,z轴数值来源于相机的Z轴负值
屏幕坐标转换为世界坐标z轴数值等于投射距离+相机Z轴数值,点的位置是影投射,所以z轴数值直接影响x、y的值
屏幕坐标就是像素点,宽高是screen.Width
Screen.height
面板显示永远是局部坐标
如果没有父物体,Inspector面板显示position是局部坐标,也就是世界坐标
如果有父物体,局部坐标系不会发生变化
z轴方向可能随着左手坐标和右手坐标系正方不一致,但是xy轴都是一致的
如果cmd提示: keytool 错误: java.io.FileNotFoundException: xxx.keystore (拒绝访问。) c盘没有写的权限,修改下路径就行了 keytool -genkey -alias xxx -keyalg RSA -validity 20000 -keystore /<MY_PATH>/android.keystore(修改keystore的路径)
在脚本Model里添加IsGameOver()方法
在脚本GameManager里调用
transform.position 是全局坐标
transform.localPosition 是局部坐标
UnitEditor显示的是局部标
局部坐标 -> 全局坐标
Transform.TransformPoint(Vector3 pos)
全局坐标 -> 局部坐标
Transform.InverseTransformPoint(Vector3 pos)
CheckMap(),CheckRowIsFull(),DeleteRow(),MoveDownRow(),MoveDownRowsAbove()
提醒一下大家当前的shareSDK中,ssdk.ShowPlatformList()中的platformTypes参数是有效的了。
另外title,text,url,imageUrl,shareType这几个是必要参数一个都不能少,不然无法分享。
还有,建议在ShareSDk.cs和DevInfo中修改app id和appsecret,方便切换ios和Android平台或者使用cloud build。如果是在iOS平台使用一键打包功能,需要将所使用的目标平台拥有的所有分享方式的appid及app secret都进行修改,否则添加白名单可能会出现问题(比如目标平台是微信朋友圈,那么不只是修改WeChat moment中的appid和app secret,WeChat、WeChatFavorite、WechatSeries这几个地方不管你用不用的到,都要进行修改)。
顺便一提微信如果不使用登陆功能仅仅使用分享功能的话,是不收门槛费的,流程上除了需要7个工作日审核之外跟新浪差不多。
Public Const int MAX_ROWS=23;
public const int MAX_COLUMNS=10;
Private Transform [,] map=New Transform[MAX_COLUMNS,MAX_ROWS];
public bool IsValidMapPosition(Transform t){}
(注意旋转之后取整)
可另外设计一个工具类Vector3Extension
private bool IsInsideMap(Vector2 pos){}
最高分数的的显示为什么是得到分数之后才显示
public override void DoBeforeEntering()
{
ctrl.view.ShowGameUI(ctrl.model.Score,ctrl.model.HighScore);
1.在Shape脚本中定义变量isPause(bool),timer(float),stepTime(float);
2.Void Update(){
if(isPause) return;
timer+=time.deltaTime
if(timer>stepTime)
{
timer=0;
fall();
}
}
3.定义Fall()方法;
Shoot
() =>这个表达示在其他课程里也没有找到,他到底是做什么用的?
1.定义一个Shape,currentShape=null,来判断方块是否落下,如果为null,调用SpawnShape。
2.给Shape脚本添加函数InitColor,用于初始化方块的颜色。
3.gamemanager脚本添加放StartGame和PauseGame函数,控制bool变量isPause。
4.在Ctrl脚本添加gamemanager引用。
5.在PlayState脚本中的函数DoBeforeEntering和DoBeforeLeaving添加StartGame和PauseGame调用。
6.拖放赋值颜色和形状。
1.创建GameManager脚本挂载在ctrl下,定义bool变量isPause标记游戏是否暂停,定义public数组shapes【】和colors【】,分别用来存储7种形状和7种颜色;
2.创建函数SpawnShape来生成方块图形,定义int indexShape和indexColor索引,用Random函数随机生成;再实例化生成shape;
3.创建Shape脚本,挂载在7种形状预制体上,在Shape脚本中创建函数InitColor(Color color),给生成图形时调用。
1.打开PlayState脚本,override函数DoBeforeEntering;
2.打开View脚本,添加ShowGameUI和HideGameUI函数(设计gameui显示和隐藏动画);
3.注册OnPauseButtonClick按键,view脚本添加ShowRestartButton函数(离开PlayState状态时调用)。