gamePanel 负责显示 text 成绩,
AddListener 添加监听。。
gameManage 负责 计数
发送广播
EventCenter.Broadcast(EventType.UpdateScoreText,gameScore);
gamePanel 负责显示 text 成绩,
AddListener 添加监听。。
gameManage 负责 计数
发送广播
EventCenter.Broadcast(EventType.UpdateScoreText,gameScore);
22.当新功能的游戏逻辑好像可以使用之前的功能体系设置出来的属性的时候,我倾向于新创建一个属性,而不是使用之前的属性。为了减低两个功能之间的耦合性。因为使用共同的属性,可能会出现一个属性影响两个不相干的功能的情况,改起来比较麻烦。
例如这个代码里面的IsJumping,和isMove
(已解决)跳跃一次加三分,是射线位置和平台collider大小的问题。
这一部分的游戏逻辑就是利用玩家的射线检测,检测平台的collider。
在游戏运行过程中,我观察collider的边框和射线的交点,和我们期待的”只有脚下的射线和平台交接“不太一样。
可以改变rayDown/Left/Right的位置,也可以改变collider的大小。我选择改变collider的大小。
(已解决)代码正确,但是角色一跳就是判定游戏失败。
把平台的collider的长度调大,比0.554f大就好了。因为玩家左右跳动的距离是0.554f。
(不过细想,之前也没有出现玩家跳不上平台的事情啊)
避坑!在awake中:vars赋值语句应该在Init()前面
private void Awake()
{
Instance = this;
vars = ManagerVars.GetManagerVars(); //我谢谢你,这个vars赋值语句应该在Init()前面!
Init();
}
避坑!在awake中:vars赋值语句应该在Init()前面
private void Awake()
{
Instance = this;
vars = ManagerVars.GetManagerVars(); //我谢谢你,这个vars赋值语句应该在Init()前面!
Init();
}
已解决,钉子平台出现问题。
解决了一个梯子断裂的问题,期间更改了position到local Position还是有问题,对照错误和正常坐标,决定从x坐标思考,并找到了问题所在。是我拖拽预制体时发了错误。
问题原图如下:
对比了正常坐标和错误坐标。
计算了一下数值。发现是“平台生成脚本中,确定X轴坐标”的代码,和“管理平台脚本中,更改障碍物方向,对X轴取负的代码”共同作用。
确定代码无误后,我发现错的并不单单是障碍物的位置,而是一个完整平台的位置,于是我结合自己之前的经历,怀疑是不是我拖拽预制体的时候发生错误了。
发现真的是。
PS:使用的仍然是老师讲的LocalPosition。
表白Carson老师~
找到了平台不变的原因。我的问题在初级平台这里。我把PlatformSprite里面的sprite赋值搞错了。
错误笔记:1.自己定义一个ran,但是没有其他地方使用。导致生成的平台每次各个方向只有一个。
1 根据不同的主题 ,生成 对应的 平台 ,平台障碍物。
父物体 Platfrom 平台 障碍物 Obstacle
中心点还是正常的Platfrom 平台====
随机在左边 或者右边生成 障碍物-------------
脚本的raydown和layer未实现
发生 碰撞 两个物体 都要有 collider组件
有一方必须有一个 Rigidbody
有一方必须勾选 isTreeger 属性
人物添加两个collider
关于 玩家平台 碰撞检测
玩家 平台都有 collider组件
玩家有 Rigidbody 重力作用,实现跳跃
玩家collider 组件
区分左边跳跃 右边跳跃
1 PlayerController 脚本
鼠标点击方法
点击左边 x坐标小于 屏幕宽度的一半
重力感应 添加
Rigidbody 2D
1Btns创建 空物体存放 3个按钮
添加 Horizontal Layout Group 水平布局组件
选项 Midle Center 居中排序
padding 边距
Canvas
Screen Space-Overlay
始终在我们屏幕前面
Screen Space-Camera
始终在我们相机前面
UI Scale Mode ui缩放自适应
Scale with Screens Size
粒子系统
1尺寸 start size
在两个常量里面随机
2 发射方向 shape
3修改材质
4 Color 颜色随着速度而变化
改变最后箭头 设置为0,将start speed 设置为0.
先导入材质包,选一个最简单的台阶,
台阶的Sorting Layer添加一个Platfrom,将Platfrom调至Defult和GUI之间
每一个方块之间Position的值向右相差x = +0.554,y = +0.645。向左相差x = -0.554,y = +0.645
在一个原先的脚本ManagerVars,在后面添加一段代码
public float nextXPos = 0.554f, nextYPos = 0.645f;
在unity创建一个空对象并改名为PlatformSpawner,挂一个脚本PlatformSpawner,并添加一段代码
public Vector3 startSpawnPos;(将void start和void update删除)。
在unity里将空对象里的 start Spawn Pos里的Y值0改为-2.4,、
在unity里新建一个名为Prefabs的文件夹,
try
{
BinaryFormatter bf = new BinaryFormatter();//二进制格式
using(FileStream fs = File.Create(Application.persistentDataPath + "/GameData.data"))
{
data.SetBestScoreArr(bestScoreArr);
data.SetDiamondCount(diamondCount);
data.SetIsFirstGame(isFirstGame);
data.SetIsMusicOn(isMusicOn);
data.SetSelectSkin(selectSkin);
data.SetSkinUnlocked(skinUnlocked);
bf.Serialize(fs, data);//在fs文件夹里面序列化data的内容(将字符变成数字)//利用二进制格式化将data序列化至文件流fs中
}
}
(已解决)更改射线长度检测到障碍物
//左右射线检测
RaycastHit2D leftHit = Physics2D.Raycast(rayLeft.position, Vector2.left, 0.2f, obstacleLayer);
RaycastHit2D rightHit = Physics2D.Raycast(rayRight.position, Vector2.right, 0.2f, obstacleLayer);
显示canvas,运行游戏,平台和人物仍会自己生成
我找到了解决办法:
1.找到装有MainPanel和GamePanel的Canvas,看上面的Canvas组件
2.把他的Sorting Layer从Default改成GUI
完毕
想不到啊,第二次做这个项目,我还是在这里出问题上。提供一下我的思路:
激活画布,运行游戏,角色和平台仍然会显示出来。
问题可能存在于:1.层级
2.代码
3.面板参数