全球优质服务器购买

为用户应用推荐适合的服务器,针对需求定制,将质量做到更好

香港服务器

香港CN2优化带宽,国内访问快

CPU:I3-2120(2核心4线程)

内存:4G DDR3内存

硬盘:1T HDD

带宽:10M优化、10M国际

IP数:1个

价格:699/月

美国服务器

美国洛杉矶高性价比服务器

CPU:I3-2120(2核心4线程)

内存:4G DDR3内存

硬盘:1T HDD

带宽:30M优化/100M普通

IP数:1个(10G防护)

价格:499/月

香港站群服务器

香港多IP站群服务器租用

CPU:E3-1230V2(4核

内存:8G DDR3内存

硬盘:240G SSD/1T SATA

带宽:10M优化

IP数:125个IP(1/2C)

价格:1099/月

美国站群服务器

美国多IP站群服务器租用

CPU:E3-1230V2(4核)

内存:16G DDR3内存

硬盘:1T HDD/240G SSD

带宽:30M优化/100M普通

IP数:125个IP(1/2C)

价格:999/月

一、前言

今天分享一个简单的角色移动脚本,主要用到碰撞器和刚体组件,代码简单易懂,复用性、扩展性较强,跟我一起来看看吧。

二、效果图

【Unity3D】10行代码实现一个简单的角色移动旋转脚本_世界坐标

三、代码

using UnityEngine;

public class RunTest1 : MonoBehaviour
{
    public float forwardSpeed;          //前进的速度
    public float backwardSpeed;         //后退的速度
    public float rotateSpeed;           //旋转速度
    private Vector3 velocity;

    void FixedUpdate()
    {
    	//获取到横轴 前后 的输入 也就是键盘W 和S的输入
        float h = Input.GetAxis("Horizontal");
        //获取到纵轴 左右 的输入 也就是键盘A 和D的输入
        float v = Input.GetAxis("Vertical");
        //从上下键的输入,获取到Z轴的输入量
        velocity = new Vector3(0, 0, v);
        //将世界坐标转化为本地坐标
        velocity = transform.TransformDirection(velocity);
        //判断是前进还是后退
        if (v > 0.1)
        {
            velocity *= forwardSpeed;
        }
        else
        {
            velocity *= backwardSpeed;
        }
        //移动自身坐标
        transform.localPosition += velocity * Time.fixedDeltaTime;
        //旋转角度
        transform.Rotate(0, h * rotateSpeed, 0);
    }
}

四、实现步骤

1.首先我们先设计场景
在场景中新建一个Plane,设置一下宽度和长度
【Unity3D】10行代码实现一个简单的角色移动旋转脚本_unity3d_02
2.新建一个Capsule,假设这个是主角
【Unity3D】10行代码实现一个简单的角色移动旋转脚本_世界坐标_03
添加刚体组件,锁定XYZ的旋转
【Unity3D】10行代码实现一个简单的角色移动旋转脚本_复用_04
3.设置摄像机的跟随
【Unity3D】10行代码实现一个简单的角色移动旋转脚本_世界坐标_05
直接设置成Capsule的子对象,简单粗暴,然后再设置一下位置旋转角度

4.编写RunTest.cs脚本

using UnityEngine;

public class RunTest1 : MonoBehaviour
{
    public float forwardSpeed;          //前进的速度
    public float backwardSpeed;         //后退的速度
    public float rotateSpeed;           //旋转速度
    private Vector3 velocity;

    void FixedUpdate()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        
        velocity = new Vector3(0, 0, v);
        velocity = transform.TransformDirection(velocity);
        if (v > 0.1)
        {
            velocity *= forwardSpeed;
        }
        else
        {
            velocity *= backwardSpeed;
        }
        transform.localPosition += velocity * Time.fixedDeltaTime;
        transform.Rotate(0, h * rotateSpeed, 0);
    }
}

5.将脚本赋给Capsule对象
【Unity3D】10行代码实现一个简单的角色移动旋转脚本_unity3d_06
设置参数
【Unity3D】10行代码实现一个简单的角色移动旋转脚本_旋转角度_07

5.运行
开始快乐的玩耍把
【Unity3D】10行代码实现一个简单的角色移动旋转脚本_世界坐标_08

 

内容来源于网络如有侵权请私信删除

推荐文章