unity06 脚本 世界物理坐标体系与脚本基础应用

这篇具有很好参考价值的文章主要介绍了unity06 脚本 世界物理坐标体系与脚本基础应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

子节点相对父节点坐标,以父节点中心点为标准

global和local

  1. Global,即世界坐标系

     	- 以世界中心为坐标
     	- 6个方向代表:上下 东西 南北
    
  2. Local,即本地坐标系

    • 以物体自身为轴

    • 6个方向代表:上下 前后 左右


pivot与center

 pivot,轴心

 center,几何中心

 一般来说,物体的轴心并不在几何中心处

 简单来说,选中多个物体,如果是在pivot模式下,多个物体各自绕自己轴心旋转。

 如果是在center模式下,则会绕两个物体共同的几何中心旋转

 

 # 组件

 一个空的对象,通过添加不同组件可实例化出一个某种存在意义的物体

 一个component代表一个功能

 例如,

 - light,光源 
 - mesh filter,网格过滤器,实际上就是网格加载器,不同的mesh filter代表不同的形状
 - mesh render  网格渲染器

 - 音乐组件:添加audio source,将音乐文件拖到audio clip
 - transform:变换组件,position坐标,scale缩放,rotation旋转

 - 摄像机:添加了camera组件的对象,ctrl+shift+F  摄像机视角与观察者视角完全相同

 

 

 # 脚本

 挂载的形式挂载在对象上。

 参考unity中的VS环境配置。

 edit->preference->external tools->visual studio

 学习c#或者java都可以。

 # 帧更新

 frame	一个游戏帧

 framerate	帧率、刷新率

 FPS	FRAMES per sencond  	每秒更新多少帧

 

 update()更新方法

 Time.time	游戏时间

 Time.deltaTime	距上次更新的时间差

 ```
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class samplescripts : MonoBehaviour
 {
     // Start is called before the first frame update
     void Start()
     {
         Debug.Log("第一个脚本");
         GameObject gameObject = this.gameObject;
         String name = gameObject.name;
         Debug.Log(name);
         Transform transform1
             = gameObject.transform;
         Vector3 position = transform1.position;
         Debug.Log(transform1);
     }
 
     // Update is called once per frame
     void Update()
     {
         Debug.Log("我一直在更新");
         //Time.deltaTime代表的是上一次刷新与本次刷新的时间间隔
         Debug.Log(Time.deltaTime);
         //Time.time代表的是游戏从开始到现在经历的时间
         Debug.Log(Time.deltaTime);
        
     }
 }
 
 ```

 

 ![image][tmp]

移动物体

 Vector3 localPosition = this.transform.localPosition;
        localPosition.x += 0.01f;
        this.transform.localPosition = localPosition;

移动物体并不是匀速的

每次运动0.01米,但是间隔的deltaTime不固定

每秒移动3米就是3个格子

 float speed = 3;
        float distance = Time.deltaTime * speed;
        Vector3 localPosition = this.transform.localPosition;
        localPosition.x += distance;
        this.transform.localPosition = localPosition;

相对运动

transform.Translate() 可实现物体的运动

transform.Translate(dx,dy,dz,space)

其中,第三个参数

Space.World 相对于世界坐标系

Space.Self 相当于自身坐标系(本地坐标系)

   this.transform.localPosition = localPosition;

        transform.Translate(0,0,distance,Space.World);

向指定目标移动

//向指定目标移动
//根据节点名称查找对象
        GameObject gameObject1 = GameObject.Find("正方块");
        //当前挂载对象通过lookat方法查找对象方位
        this.transform.LookAt(gameObject1.transform);
        //通过translate移动,偏移量分别为x,y,z,相对自身坐标系
        this.transform.Translate(0, 0, distance,Space.Self);

优化代码,到达目标后停止移动

float speed = 3;
        float distance = Time.deltaTime * speed;
        Vector3 localPosition = this.transform.localPosition;
        //移动
        /* localPosition.x += distance;
         this.transform.localPosition = localPosition;

         transform.Translate(0,0,distance,Space.World);*/

        //向指定目标移动
        GameObject gameObject1 = GameObject.Find("正方块");
        Vector3 p1 = this.transform.position;
        Vector3 p2 = gameObject1.transform.position;
        Vector3 p3 = p2 - p1;
        //magnitude:向量的长度,也就是平常所说的x^2+y^2+z^2的平方根
        float p4 = p3.magnitude;
        if (p4 > 0.3f)
        {
            this.transform.LookAt(gameObject1.transform);
            this.transform.Translate(0, 0, distance, Space.Self);
        }

物体的旋转

  1. Quaternion 四元组(x,y,z,w)

    transform.rotation=不便操作

  2. 欧拉角 euler angle

    transform.eulerangles = new vectore3(0,45,0)

    transform.localEulerAngles = new vector3(0,45,0)

以下几个角度效果相同:

transform.eulerAngles = new Vector3(0,45,0)

transform.eulerAngles = new Vector3(0,405,0)

transform.eulerAngles = new Vector3(0,-315,0)

旋转代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class xuanzhuan : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Application.targetFrameRate = 60;
    }

    // Update is called once per frame
    void Update()
    {
        float dushu = 30;
        Vector3 angles = this.transform.localEulerAngles;
        angles.y+=dushu*Time.deltaTime;
        this.transform.localEulerAngles = angles;
        
    }
}

旋转角度

  float dushu = 30;
        Vector3 angles = this.transform.localEulerAngles;
        // angles.y+=dushu*Time.deltaTime;
        this.transform.localEulerAngles = angles;
        
        this.transform.Rotate(0,dushu*Time.deltaTime,0,Space.Self);

自转与公转

自转:绕自己轴心转动

公转:父子关系,子绕父轴心转动文章来源地址https://www.toymoban.com/news/detail-601386.html

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class qiuti : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       Application.targetFrameRate = 60; 
    }

    // Update is called once per frame
    void Update()
    {
        float angles = 100;
        Transform parent = this.transform.parent;
        
        parent.Rotate(0,angles*Time.deltaTime,0,Space.Self);
    }
}

到了这里,关于unity06 脚本 世界物理坐标体系与脚本基础应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity解决:GIS(GPS的经纬度坐标)定位系统坐标转unity坐标(世界坐标)

    目录 一、前言 二、功能实现 三、测试 四、备注  如果要实现该效果的demo,请联系作者 最近项目中用到了第三方的定位系统,有的是使用GPS定位、有的是使用UWB定位。第三方的定位系统把他们的定位信息通过网络发送给Unity,在Unity内实时显示人/设备的移动。因为第三方可

    2024年02月11日
    浏览(115)
  • 初识Unity——基本模型、场景操作、世界坐标系和局部坐标系

    目录 基本模型 创建基本模型 基本模型的复制  复杂模型 场景操作 聚焦 旋转 移动 场景视野  世界坐标系 基本介绍 原点 局部坐标系    创建基本模型之后,会在我们视野中心生成这个模型;当我们需要复制模型的时候,可以使用 “Duplicate”来进行复制,随后拖出来,不使

    2024年02月08日
    浏览(77)
  • Unity编辑器拓展——Editor模式下屏幕坐标转换为世界坐标

    发会牢骚,最近一直在做Unity的编辑器拓展,其中难的地方不少,但不至于到看不懂的地步,可一做到关于坐标转换的内容时把我弄不会了。 这个不查不知道,一查吓一跳,Unity的坐标系非常多,有世界坐标,屏幕坐标,局部坐标,视窗坐标等等,而且每一个都是不一样的坐

    2024年02月03日
    浏览(47)
  • Unity获取物体网格(mesh)顶点(vertex)的世界坐标

    ​​​​ 1、获取物体的所有顶点 注意使用:sharedMesh,而不是mesh 2、顶点的坐标转变成世界坐标 注意: 必须用myGameObject.transform.TransformPoint(v1) 而不是transform.TransformPoint(v1),这一句起始等价于:this.gameobject.transform.TransformPoint(v1) 3、剩下的比较简单了,就在是坐标处安放物体

    2024年02月11日
    浏览(53)
  • Unity物理系统脚本编程(上)

    当一个物体挂载了刚体时,即可在脚本中获取该物体的刚体组件,代码如下 Rigidbody rigid; void Start() { rigid=GetComponentRigidbody(); } 一般将刚体变量命名为rigid并定义为一个字段,方便复用. 最常用的施加作用力的方法是AddForce(),参数为Vector3类型。代码如下 rigid.AddForce(new Vector

    2024年02月04日
    浏览(96)
  • Unity中实现世界坐标到GPS经纬度的转换解决方案

    在Unity3D中,将世界坐标转换为GPS经纬度是一个常见的需求,特别是在开发基于地理位置的应用程序时。本文将提供一种详细的解决方案,包括相应的源代码,以帮助您实现这一转换。 步骤1:获取参考点的GPS经纬度 首先,您需要获取一个已知GPS经纬度坐标和对应的Unity世界坐

    2024年02月03日
    浏览(45)
  • Unity将模型的世界坐标下的中心点归到模型中心

    效果对比: 调整前: 调整后: 需求:由于建模时的疏忽或者网上找的一些测试模型不规范,会出现导入unity中,模型的世界坐标下的中心点与模型实际的位置差出很多。 注意:物体中心点和父物体中心点的设置代码隐忍而异,看模型结构需求 注意:这里模型的位置必须Re

    2024年02月03日
    浏览(55)
  • Unity基础5——物理检测

    ​ Unity 中设置了共 32 层 Layer,如图,可以点击 Add Layer 添加自定义的 Layer ​ 通过名字得到层级编号  LayerMask.NameToLayer(string layer) ​ 我们需要通过编号左移构建二进制数,这样每一个编号的层级都是对应位为 1 的 2 进制数 ​ 我们通过位运算可以选择想要检测层级,使用一

    2024年02月10日
    浏览(33)
  • Unity基础课程之物理引擎6-关于物理材质的使用和理解

     每个物体都有着不同的摩擦力。光滑的冰面摩擦力很小,而地毯表面的摩擦力则很大。另外每种材料也有着不同的弹性,橡皮表面的弹性大,硬质地面的弹性小。在Unity中这些现象都符合日常的理念。虽然从原理上讲,物体的摩擦力和弹性有着更复杂的内涵,例如普通的钢板

    2024年02月07日
    浏览(46)
  • 【Unity基础概念--坐标系】

    对于我这个Unity初学者来说,在学习过一段时间的Unity相关知识后,对于Unity中坐标系的概念不是很明确清楚,是时候做一下坐标系相关知识的总结了。 世界坐标是按照笛卡尔坐标系定义出来的绝对坐标系,下面的各种坐标系都建立在世界坐标的基础上。我们知道二维平面内任

    2024年01月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包