当前位置: 首页 > news >正文

Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本

本文依然是 Unity3D 的入门篇。作为 Unity3D 的入门读者,你可能希望迅速让你能在游戏中操作你的视角,或者让角色移动。


本文内容

    • 创建脚本
    • 最简代码

创建脚本

作为入门篇,可能需要讲一下如何创建脚本。按下图,在 Unity 编辑器中:

  1. Hierarchy(层级)中选中主摄像机;
  2. Inspector(检查器)中选择最后那个 Add Component(添加组件);
  3. 选择 New Script(新建脚本)输入脚本名称,然后点击 Create and Add(创建并添加)。

创建并添加脚本

接下来,我们需要去 Visual Studio 中编辑这个脚本。

点击菜单中的 Assets -> Open C# Project资源 -> 打开 C# 项目)。于是可以转到 Visual Studio 中编辑你的脚本文件。

最简代码

在 Visual Studio 中找到我们刚刚创建的 PlayerController 脚本。

其实就是脚本名加上 .cs 后缀。Unity 中 C# 脚本要求文件名必须匹配脚本的类名,因此,不要随便尝试改文件名或类名;就算改了,也要同步更新文件名和类名重新匹配,并重新在 Inspector 中添加新名称的脚本。

在脚本中添加如下代码:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private Transform transform;
    public float moveSpeed = 5f;
    public float rotateSpeed = 50f;

    void Start()
    {
        transform = GetComponent<Transform>();
    }

    void Update()
    {
        float adValue = Input.GetAxis("Horizontal");
        float wsValue = Input.GetAxis("Vertical");
        float mValue = Input.GetAxis("Mouse X");

        var moveDirection = (Vector3.forward * wsValue) + (Vector3.right * adValue);
        transform.Translate(moveDirection.normalized * moveSpeed * Time.deltaTime, Space.Self);
        transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime * mValue);
    }
}

Start 消息会在游戏对象(也就是前面我们添加了脚本的那个主摄像机)创建后,第一个 Update 消息执行前调用,可以用来做一些初始化。这里,我们拿到我们需要做变换的 Transform 组件(这里的组件也就是 Unity 编辑器的“检查器”中看到的一个个组件)。

Update 会尽量在每一帧执行一次,我们在这里执行一些需要每帧更新的逻辑。

我们做了这些事情:

  1. 定义了公共的两个字段 moveSpeedrotateSpeed 表示移动速度和转向速度。
  2. 通过 Input.GetAxis 获取不同种类的玩家输入。
  3. 通过玩家的输入计算 Transform 组件的更新差量,然后更新 Transform 组件。

关于在脚本当中公开属性以在编辑器中设置的更多细节,可阅读我的另一篇 Unity3D 入门博客:

  • Unity3D 入门:让 C# 脚本公开可在 Unity 编辑器中设置的属性 - walterlv

可以看以下效果(gif 文件有点大,多等等):

在这里插入图片描述


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 比较 Windows 上四种不同的文件(夹)链接方式(NTFS 的硬链接、目录联接、符号链接,和大家熟知的快捷方式)
  • 了解 Windows Linux 下命令行 Shell 启动程序传参的区别,这下不用再担心 Windows 下启动程序传参到 Linux 下挂掉了
  • 适合 .NET 开发者用的 GitHub Actions(时不时更新)
  • 在 CMD 里根据进程名杀掉进程
  • 在 PowerShell 里根据进程名杀掉进程
  • 在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting TargetFrameworks)
  • 专业团队:推荐一个网站,生成巨幅文字注释
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率
  • 使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景(可以做 Acrylic 亚克力效果、模糊效果、主题色效果等)
  • input 不能为空 js_我用JS刷LeetCode | Day 9 | Implement strStr()
  • 宝塔同时安装苹果cms海洋cms_maccms安装了后接下来做什么?
  • hive 修改表的存储格式_Hive存储格式
  • mac redis 链接_2018 MAC下安装Redis和Redis可视化工具RDM并连接Redis
  • python的lib文件夹在哪_如何导入模块中的lib文件夹
  • C++类的相互关联
  • CEF与代理
  • Effective Java 笔记(一)
  • Git的一些常用操作
  • JAVA之继承和多态
  • Object.assign方法不能实现深复制
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 第十八天-企业应用架构模式-基本模式
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 普通函数和构造函数的区别
  • 问题之ssh中Host key verification failed的解决
  • 我的业余项目总结
  • 小程序 setData 学问多
  • 追踪解析 FutureTask 源码
  • 从如何停掉 Promise 链说起
  • ​Java并发新构件之Exchanger
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #pragma pack(1)
  • (09)Hive——CTE 公共表达式
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (HAL库版)freeRTOS移植STMF103
  • (二)Linux——Linux常用指令
  • (南京观海微电子)——I3C协议介绍
  • (强烈推荐)移动端音视频从零到上手(上)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (三)终结任务
  • (算法二)滑动窗口
  • (学习日记)2024.01.09
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)我也是一只IT小小鸟
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET中winform传递参数至Url并获得返回值或文件
  • .net中的Queue和Stack
  • @Controller和@RestController的区别?
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序