当前位置:   article > 正文

【Unity】P4 脚本文件(基础)_unity获取物体坐标

unity获取物体坐标

前言

上一篇博文主要围绕Unity Inspector部分,围绕组件,资源文件,父子节点部分做介绍。
链接:https://blog.csdn.net/weixin_43098506/article/details/129274582

本篇博文将主要开始代码编辑部分,首先介绍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,在Edit中选择Preference
然后在 External Tools 中选择 Microsoft Visual Studio 2022

在这里插入图片描述

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

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


如何添加一个脚本文件

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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


获取蘑菇当前位置

在 void Start() 中加入代码

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

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

请添加图片描述

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

在这里插入图片描述

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

在这里插入图片描述

代码解析:

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

this.gameObject.name
  • 1

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

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

基础代码

代码含义
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);
  • 1

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


帧与帧更新

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

在 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);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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

上一篇博文主要围绕Unity Inspector部分,围绕组件,资源文件,父子节点部分做介绍。
链接:https://blog.csdn.net/weixin_43098506/article/details/129274582

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/83372
推荐阅读
相关标签
  

闽ICP备14008679号