子节点相对父节点坐标,以父节点中心点为标准
global和local
-
Global,即世界坐标系
- 以世界中心为坐标 - 6个方向代表:上下 东西 南北
-
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);
}
物体的旋转
-
Quaternion 四元组(x,y,z,w)
transform.rotation=不便操作
-
欧拉角 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
公转:父子关系,子绕父轴心转动文章来源地址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模板网!