昨天的文章已把场景与平面侦测做好,今天要继续说明角色蛇的移动
目录
移动机制说明
变数宣告
介面按钮设定
前进
旋转
介面中会有上、下、左、右四个按纽,触控哪个按钮,角色肥遗就会往那个方向旋转然後前进。
在开始写肥遗的一切移动之前,要先写按钮如何控制肥遗。因为会有4个方向,所以这边写了一个class来为方向方向,这样在之後要判别方向比较方便。
static class Dir
{
public const int Top = 0;
public const int Right = 1;
public const int Down = 2;
public const int Left = 3;
public const int no = -1;
}
再来是宣告几个变数在之後会用到的变数
储存按钮按下的方向
int inputDir = Dir.no;
储存目前的方向
int Direction = Dir.Right;
用来储存不同按钮前进的方向
Vector3 movement;
是否要旋转
bool rotating = false;
用来判断顺时钟逆时钟
bool turntoright = false;
累积旋转度数
float rotateangle = 0;
用来储存原本的角度
float oriAngle = 90;
先为按钮增加Trigger Event,PointDown跟PointUp,决定当按钮压下以及放开时,物件要发生的动作。根据按下的按钮更改inputDir变数。
以向上按钮来说,需要注意的是在按下这颗按钮之前,原方向可能是向右或向左,用if else去判断之前可能的方向,来决定要顺时钟还是逆时钟旋转,并且把rotating变数设为true(准备旋转)。
在不同按钮按下的函式中,改变movement变数,例如按下向上按钮,movement.z = 1f ,根据座标以此类推。
在FixedUpdate中,判断如果有输入方向,就用rigibody的MovePosition函式来移动肥遗。
void FixedUpdate(){
if(inputDir != Dir.no) {
rb.MovePosition(rb.position + movement * movespeed * Time.fixedDeltaTime);
}
}
也是在FixedUpdate()中进行:
if (rotating){//判断有没有旋转
rotateangle += rotatespeed * Time.deltaTime;
if (rotateangle < 90f){ //还没转玩90度
if (turntoright)
{
transform.localRotation = Quaternion.Euler(0, transform.localEulerAngles.y + rotatespeed * Time.deltaTime, transform.localEulerAngles.z);
}
else
{
transform.localRotation = Quaternion.Euler(0, transform.localEulerAngles.y - rotatespeed * Time.deltaTime, transform.localEulerAngles.z);
}
}
else
{
if (turntoright)
{
transform.localRotation = Quaternion.Euler(0, oriAngle - 90f, transform.localEulerAngles.z);
oriAngle = oriAngle + 90f;
}
else
{
transform.localRotation = Quaternion.Euler(0, oriAngle + 90f, transform.localEulerAngles.z);
oriAngle = oriAngle - 90f;
}
rotating = false;
rotateangle = 0;
}
}
以上就是比较简单的旋转以及移动罗,那肥移走迷宫的这个系列就到这边,我们明天下一个系列见~
<<: Day 25 CSS3 < 2D转换 transform>
>>: Python GUI - 要如何在画面上显示右键选单呢?
前言 昨天看了落落长的一大串~看得目睛花花 怎麽感觉他没有一开始的grid-template-are...
开始Hello Vue前先插播一个错误调试工具- Vue.js devtools 这个chrome浏...
Vivy几个着名事件中,与IoT最为相关的事件即是 研究员达也因为无法忘怀自己小时候的护理师AI葛蕾...
工程师太师了: 第7话 杂记: 这次的COVID-19 疫情, 究竟对我们产生了什麽影响? 很多人会...
Golang 错误处理 首先要引入 errors 套件,大致上的用法是使用 errors.New(&...