Unity脚本文件(基础)

  • 适配的C#代码编辑器
  • 如何添加一个脚本文件
  • 获取蘑菇当前位置
  • 基础代码
  • 改变物体位置
  • 帧与帧更新


前言

上一篇博文主要围绕Unity Inspector部分,围绕组件,资源文件,父子节点部分做介绍。
链接:

本篇博文将主要开始代码编辑部分,首先介绍Unity适配的C#代码编辑器,需要对Java或者C++有基础理解;然后将介绍帧的概念,将在通过脚本文件移动物体部分结束。

下一篇博文将深入到代码中,研究物体的旋转,欧拉角法以及通过Rotate进行旋转;
正题

适配的C#代码编辑器

推荐使用 Visual Studio,其可以与Unity适配,在输入函数以及名称时会产生联想以方便书写代码。

Windows-Community 版本的下载链接:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false 其他用户自行到官方下载Community免费版。

下载后安装,只需要安装Unity游戏部分即可

unity 在编辑器模式下运行代码 unity自带的代码编辑器_unity 在编辑器模式下运行代码

下载安装完成后打开Unity,在Edit中选择Preference
然后在 External Tools 中选择 Microsoft Visual Studio 2022

unity 在编辑器模式下运行代码 unity自带的代码编辑器_microsoft_02

如此选择后,构建了Unity与VS2022的桥梁,双击代码会自动使用VS打开并可以产生联想。

注意,可能会出现无联想的情况,需要重新执行Edit中Preference步骤以解决。


如何添加一个脚本文件

如我们想让蘑菇在地板上沿着Z轴平移,请问如何做?

unity 在编辑器模式下运行代码 unity自带的代码编辑器_帧率_03

步骤:
首先在Assets中创建Scripts文件夹,用于记录所有代码文件。
然后在Scripts文件夹中新建代码文件 C# Script

unity 在编辑器模式下运行代码 unity自带的代码编辑器_游戏引擎_04

创建完成后,双击会自动通过 Visual Studio 打开,注意C#文件命名建议符合“大驼峰”规则。

打开VS后第一步检查文件名称与类名称是否相同,不相同会出现错误。

unity 在编辑器模式下运行代码 unity自带的代码编辑器_帧率_05

没有问题我们进入下一步,开始代码编辑。


获取蘑菇当前位置

在 void Start() 中加入代码

Debug.Log("蘑菇的名字为:" + this.gameObject.name);
Debug.Log("蘑菇的位置在:" + this.gameObject.transform.position.ToString("F1"));

保存代码后,返回到Unity中,下一步我们将代码文件赋给蘑菇物体:

unity 在编辑器模式下运行代码 unity自带的代码编辑器_unity 在编辑器模式下运行代码_06

执行游戏。单机执行,再次点击 ▶ 取消执行游戏状态。

unity 在编辑器模式下运行代码 unity自带的代码编辑器_unity 在编辑器模式下运行代码_07

执行后效果以及打印结果:
发现其输出名称以及位置坐标信息正确。

unity 在编辑器模式下运行代码 unity自带的代码编辑器_unity 在编辑器模式下运行代码_08

代码解析:

获取当前指定游戏物体的名称;

this.gameObject.name

获取当前指定游戏物体的位置信息并且保留一位小数;

this.gameObject.transform.position.ToString("F1")

基础代码

代码

含义

this

当前脚本组件

this.gameObject

当前物体

this.gameObject.name

当前物体名称

this.gameObject.transform

当前物体下的transform属性

this.gameObject.position

当前物体下的世界坐标

this.gameObject.localPosition

当前物体的本地坐标,或称相对于父物体的坐标


改变物体位置

物体的位置属性为localPosition,修改物体的localPosition属性以实现物体的移动。localPosition 为包含三个值的向量 Vector3(x,y,z);

this.transform.localPosition = new Vector3(0,0,5);

代码保存后,运行发现蘑菇的位置发生变化。


帧与帧更新

Frame:游戏帧
FrameRate:帧率,刷新率
FPS:Frames Per Second:每秒更新多少帧

在 Visual Studio 中,代码主要有两个方法,一个是Start,一个是Update。每更新一帧时,都将调用一次Update方法。

与帧相关的基础代码有:

代码

含义

Time.time

取得当前游戏时间

Time.deltaTime

距上帧的时间差

Application.targetFrameRate=60

设定近似帧率

需要注意的是,帧率是在不断变化的,没有固定值,只能通过上述代码设定近似帧率。为什么帧率是不断变化的???
影响帧率的有很多因素,主要为我们电脑当前执行的所有程序。当我们执行很多程序时,不可避免的处理器繁忙,会导致帧率的变化。


结合上述所有知识,若我们想要让物体匀速运动,该如何办?
上述知识小结:

  1. Update方法每一帧调用一次;
  2. 帧率是在不断变化的,没有固定值,只能设定近似帧率;
  3. 改变物体位置的code以及获取帧时间差的code。
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class MoveToZ : MonoBehaviour
{
    // Start is called before the first frame update

    float speed = 5;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        float distance = speed * Time.deltaTime;
        this.transform.Translate(0, 0, distance);
    }
}

------ End ------