关键功能:
1、摄影机跟随船体移动
2、船体在水面上晃动
3、摇杆控制方向
摇杆控制方向的话,这里我是简单的使用了一个Unity的插件:EasyTouch,EasyTouch里面的有一个EasyJoyStick(摇杆控制)
当你导入到你的Unity工程的时候,你的窗口选项就会多一个:
然后我们就可以按照这个步骤来创建一个EasyJoyStick的对象:
创建完成之后,我们就可以在Game视图看到一个摇杆
这个摇杆就是只有横竖两个值,x,y值,分别对应3D空间中的x,z轴。
然后我们创建一个脚本,然后将这个脚本挂在我们要控制的人物的身上,
下面是详细的代码分析:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BossMove : MonoBehaviour
{
// 这个是我们刚才创建的 EasyJoyStick的对象,我们使用它来获取 一些简单的数值
public EasyJoystick easyJoystick;
float Speed = 5.0f;
// 假设3秒转一圈,那么一秒就算是转120度 ,这个数值是用来控制转向的
float w_speed = 120f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
ControlMove();
}
void ControlMove()
{
// 我们通过摇杆的x,y的偏移量
float Joystick_x = easyJoystick.JoystickAxis.x;
float Joystick_y = easyJoystick.JoystickAxis.y;
//Vector3 targetDirection;
// 船的移动
//当摇杆摇动超过一定范围的时候,才去移动对象
if (Joystick_y >= 0.5f)
{
// Translate:向某个方向移动多少距离
// 摇杆的Y轴对应的就是3D空间的Z轴,然后当摇杆Y轴有动的时候,就将物体在Z轴方向移动
this.transform.Translate(0, 0, Speed * Time.deltaTime);
}
else if(Joystick_y <= -0.5f)
{
// 上面是摇杆的方向向上(Y轴的正方向),也就是3D向前移动,
// 现在是摇杆方向向下(Y轴的负方向),也就是3D里面向移动
this.transform.Translate(0, 0, -Speed * Time.deltaTime);
}
if (Joystick_x >= 0.5f)
{
// Translate:向某个方向移动多少距离
// 这个是和上面的移动方式同理,只不过摇杆的X轴移动,对应的是3D物体的X轴移动
this.transform.Translate(Speed * Time.deltaTime, 0, 0);
}
else if (Joystick_x <= -0.5f)
{
this.transform.Translate(-Speed * Time.deltaTime, 0, 0);
}
// 船的转向
// 船的转向一定是绕着Y轴旋转,所以当摇杆的X轴有变化的时候,也就是有转向变化的时候
// 当X轴的值大于0,也就是右转向的时候,我们旋转正值
if(Joystick_x > 0.5f)
{
// 这个时候我们让其围绕着Y轴,做正方向的旋转
this.transform.Rotate(0,this.w_speed * Time.deltaTime,0);
}
else if(Joystick_x < -0.5f)
{
// 当摇杆是负方向的时候,就旋转一个负值,这个时候对应的就是相反的方向
this.transform.Rotate(0, -this.w_speed * Time.deltaTime, 0);
}
}
}
Github:https://github.com/YuDang1024/UnityGames/tree/master/MovingBoat