關鍵功能:
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