Unity坦克控制行走程序


实现目标

使用WS键控制坦克前进和后退,AD控制坦克原地旋转


代码详解

分别设置坦克旋转和行进的速度为steer和speed,他们都应该为float类型,我们可以将两个变量公开,以便我们在游戏界面进行微调以达到最佳效果

public float speed = 10;    // 设置移动速度
public float steer = 30;    // 设置坦克旋转速度

接下来就是坦克移动的核心代码,放在update里面

Input.GetKey(KeyCode.A)获取用户按下某个键,因为我们需要使用WSAD作为控制坦克行进的按钮,所以依次执行检测

或者我们还可以使用unity集成好的检测小键盘方向键的代码来代替单一的按钮检测,以提高代码的简洁程度,如下:

  • Input.GetAxis(“Horizontal”)检测水平方向键(小键盘上的左右箭头)按下,按下<-返回-1,按下->返回1

  • Input.GetAxis(“Vertical”)检测垂直方向键,按下上返回1,按下下返回-1


关于unity中物体方向

以一个物体中心作为坐标原点,物体前后对应Z轴正负;物体左右对应Y轴负正;物体垂直上下运动对应X轴正负

而我们常见的vector3向量设置的轴顺序就是XYZ


基本了解了物体轴向后,我们就可以继续写下判断条件内代码

因为我们想要按下A实现向左转,所以使用rotate函数,他接受三个参数分别是XYZ轴向的旋转角度,可知我们需要在Y轴给予一个负角度(因为坐标系中右边为正)

这里的Time.deltaTime表示两个update运行间隔时间,一般涉及到物体移动时都需要乘上这段代码,可以使移动更加顺滑而不僵硬突兀

至于坦克如何前后移动,我们只需要照葫芦画瓢即可,这里使用vector3存储好坦克下一步行进位置,然后通过transform.transform.position获取坦克位置并重新设置来达到移动的目的

void Update()
    {
        
        if(Input.GetKey(KeyCode.A)){
            transform.Rotate(0,-1*steer*Time.deltaTime,0);
        }else if(Input.GetKey(KeyCode.D)){
            transform.Rotate(0,steer*Time.deltaTime,0);
        }
        
        if(Input.GetKey(KeyCode.W)){
            Vector3 s = transform.forward*speed*Time.deltaTime;
            transform.transform.position += s;
        }else if(Input.GetKey(KeyCode.S)){
            Vector3 s = -1*transform.forward*speed*Time.deltaTime;
            transform.transform.position += s;
        }

    }

最后工序

将代码赋予到坦克上面(注意坦克此时的朝向是否和案件对应朝向一致),再给我们的坦克添加一个刚体好让其能在地面上行走

TIPS:由于我们将坦克的旋转速度和移动速度都设置为了public,所以我们可以在游戏运行期间点击坦克并进入其属性面板,找到该脚本位置,就可以随意修改这两个变量的值了!(但注意不要溢出了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhillery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值