检测方式:碰撞检测、触发检测、射线检测
检测方式:碰撞检测、触发检测、射线检测
视野操作:
视野分类-透视视野,正交视野(平行视野)
聚焦:双击F
放大缩小视野:滑轮
透视视野:
以自身为原点旋转视野-鼠标右键
围绕焦点旋转-alt+鼠标左键
漫游模式 鼠标右键+wasd/qe(上下)/滑轮控制速度
OncollisionEnter2D 可以检测碰撞
collison.relativeVelocity.magnitude 碰撞力度
A B 物体相对移动速度
绘制线段
LineRenderer.SetPosition(0,V3)
LineRenderer.SetPosition(1,v3)
绘制一条线段 从0.v3到1.v3
获得鼠标所在位置的坐标
Vector3 v3= Camera.main.ScreenToWorldPoint(Input.mousePosition);
关于
fixed halfLambert = dot(worldLightDir,i.worldNormal)*0.5+0.5; fixed3 rampRgb = tex2D(_RampTex, fixed2(halfLambert,halfLambert)).rgb;
这两句代码理解:
1、当光源与法线夹角为0时(光线垂直照射),采样的纹理VU为(1,1),也就是获取纹理最右上角的颜色;当光源与法线夹角为90度时(光线平行照射),采样的纹理VU为(0.5,0.5)也就是中心点
2、也就是说当前渐变纹理的采样为从(0.5,0.5)到(1,1)的直线uv坐标的进行采样
3、本人尝试将
fixed halfLambert = dot(worldLightDir,i.worldNormal)*0.5+0.5;
改为
fixed halfLambert = dot(worldLightDir,i.worldNormal);
然而会使其颜色过渡较大导致不自然

详情见409
渲染顺序:

//高光遮罩 fixed3 specularMask = tex2D(_SpecularMask,i.maskUv).g*_MaskScale;
老师在高光中使用的遮罩贴图所显示的效果并不明显
个人使用贴图如下(在贴图中我将四周涂黑,使其rgb值都为0):
并且将其使用为遮罩纹理效果如下:

与未使用遮罩贴图对比:
其实这里
UnpackNormal()函数可以使用
UnpackNormalWithScale()进行代替
下面一句
tangentNormal.xy *= _BumpScale;就可以去掉了,将_BumpScal参数传进去就行
本人unity版本2020.3.30
gamePanel 负责显示 text 成绩,
AddListener 添加监听。。
gameManage 负责 计数
发送广播
EventCenter.Broadcast(EventType.UpdateScoreText,gameScore);
22.当新功能的游戏逻辑好像可以使用之前的功能体系设置出来的属性的时候,我倾向于新创建一个属性,而不是使用之前的属性。为了减低两个功能之间的耦合性。因为使用共同的属性,可能会出现一个属性影响两个不相干的功能的情况,改起来比较麻烦。
例如这个代码里面的IsJumping,和isMove
(已解决)跳跃一次加三分,是射线位置和平台collider大小的问题。
这一部分的游戏逻辑就是利用玩家的射线检测,检测平台的collider。
在游戏运行过程中,我观察collider的边框和射线的交点,和我们期待的”只有脚下的射线和平台交接“不太一样。
可以改变rayDown/Left/Right的位置,也可以改变collider的大小。我选择改变collider的大小。
(已解决)更改射线长度检测到障碍物
//左右射线检测
RaycastHit2D leftHit = Physics2D.Raycast(rayLeft.position, Vector2.left, 0.2f, obstacleLayer);
RaycastHit2D rightHit = Physics2D.Raycast(rayRight.position, Vector2.right, 0.2f, obstacleLayer);
(已解决)代码正确,但是角色一跳就是判定游戏失败。
把平台的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,但是没有其他地方使用。导致生成的平台每次各个方向只有一个。
显示canvas,运行游戏,平台和人物仍会自己生成
我找到了解决办法:
1.找到装有MainPanel和GamePanel的Canvas,看上面的Canvas组件
2.把他的Sorting Layer从Default改成GUI
完毕
想不到啊,第二次做这个项目,我还是在这里出问题上。提供一下我的思路:
激活画布,运行游戏,角色和平台仍然会显示出来。
问题可能存在于:1.层级
2.代码
3.面板参数