![a3de77152dbc32a1273fb62c5706d46e.png](https://img-blog.csdnimg.cn/img_convert/a3de77152dbc32a1273fb62c5706d46e.png)
前言
空洞骑士的项目算是告一段落了,开新坑开新坑。
这里只有一个问题:
不想再肝了。满脑子装的都是摸鱼。
要是有在摸鱼的同时又能填坑的操作就好了。
![4599924b1bdab6065e128b5649a77ce1.png](https://img-blog.csdnimg.cn/img_convert/4599924b1bdab6065e128b5649a77ce1.png)
对了。
以前玩过一个摸鱼必备游戏《黄金矿工》,开这个坑就可以边摸鱼边填坑了。
![90e262c5b88bb2ea09e8cb1587c2b507.png](https://img-blog.csdnimg.cn/img_convert/90e262c5b88bb2ea09e8cb1587c2b507.png)
经过上述不超过5分钟的、大起大落的心理过程后,便有了这期的文章。
虽然黄金矿工比较简单,但其中细枝末节较多。文章只会讲解较为重要的技术点,其余部分欢迎参考后续工程代码食用。
模拟绳子
黄金矿工游戏中,玩家通过按键操作并发射钩子来挖取金矿,钩子与绞盘之间有一条绳子进行连接,这条绳子我们使用Unity提供的LineRenderer组件来进行实现。
由于素材的限制,我们使用钩子的这张图片做为玩家的本体,并在上面添加LineRenderer组件,然后在Materials选项中选择默认的精灵图材质(Sprites-Default),然后将Order in Layer选项修改为1,防止被背景2D物体遮挡。其中,Positions选项是用来设置线段的2点,LineRenderer组件会在游戏运行时自动在2点之间进行连线。而我们也是在代码中动态修改这2点的值,来实现绳子的效果。大致设定如图:
![08ebc4c2595cfb825747192a79c4fb87.png](https://img-blog.csdnimg.cn/img_convert/08ebc4c2595cfb825747192a79c4fb87.png)
接下来,在绞盘的位置新建一个空物体,用于确定线段的起点。然后在代码中更新Positions选项中点的位置即可。代码如下:
public class Player : MonoBehaviour {
public Transform startTrans; //起始点
LineRenderer lineRenderer;
void Start() {
lineRenderer = GetComponent<LineRenderer>();
lineRenderer.startWidth = 0.1f;//修改线条宽度
}
void Update() {
UpdataLine();
}
public void UpdataLine()
{
lineRenderer.SetPosition(0, startTrans.position);
lineRenderer.SetPosition(1, transform.position);//设置线条2点的位置
}
}
完成后效果如下:
![608f7c2c7a234a5a36c0d63a3ed4c0f6.gif](https://img-blog.csdnimg.cn/img_convert/608f7c2c7a234a5a36c0d63a3ed4c0f6.gif)
旋转
游戏中,钩子总是绕着绞盘来进行旋转。使用RotateAround这个函数就可轻松解决,难点是如何限制钩子只在下方进行旋转操作,而不会旋转到上方。此处,我们使用向量之间的夹角来进行判断,钩子是否旋转出边界。由于素材的问题,钩子对应的方向是