首页 > 编程知识 正文

unity 坐标轴,解析几何向量与坐标

时间:2023-05-05 05:26:42 阅读:191844 作者:200

Unity复习

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Question : MonoBehaviour { int a = 100; Transform target; #region Question // 1、有哪些事件函数 // Awake Start Update FixedUpdate LateUpdate OnEnable OnDisable OnDestroy OnGUI // OnCollisionEnter(Collision col) OnCollisionStay(Collision col) OnCollisionExit(Collision col) // OnTriggerEnter(Collider o) OnTriggerStay(Collider o) OnTriggerExit(Collider o) // 2、如何查找场景中游戏物体 // GameObject obj = GameObject.Find("ObjName/ChildObjName") // 3、将自己设置为 找到的那个游戏物体的 父物体 // obj.transform.parent = transform; // 4、挂载脚本的必要条件 // 继承MonoBehaviour 、所有的代码无错误、文件名和类名一致、不能是抽象类 // 5、物体的移动、旋转 // 改变位置的移动 // 1)、往世界的前方移动 // transform.position += Vector3.forward; // 2)、往自身的前方移动 // transform.position += transform.forward; // API移动 // 1)、往世界的前方移动 // transform.Translate(Vector3.forward, Space.World); // 2)、往自身的前方移动 // transform.Translate(transform.forward, Space.World); // transform.Translate(Vector3.forward, Space.Self); // 使物体旋转 (自身) // 改变欧拉角的形式 来旋转 // 世界的Y轴转 // transform.eulerAngles += Vector3.up; // 自身的Y轴转 // transform.eulerAngles += transform.up; // API // 世界的Y轴转 // transform.Rotate(Vector3.up, Space.World) // 自身的Y轴转 // transform.Rotate(transform.up, Space.World) // transform.Rotate(Vector3.up) // 使物体旋转 (绕其他物体) // GameObjet obj; (被绕的游戏物体) // 绕Y轴转(世界的) // transform.RotateAround(obj.transform.position, Vector3.up, 1); // 绕Y轴转(被绕的游戏物体) // transform.RotateAround(obj.transform.position, obj.transform.up, 1); // 6、如何生成、销毁游戏物体? // 生成(需要有预制体) BulletPrefab // public GameObject bulletPrefab; // 引用资源中的预制体 // Transform spawnTrans; // 生成的位置及方位 // Instantiate(bulletPrefab, spawnTrans.position /*位置 Vector3*/, Quaternion.identity /*spawnTrans.rotation*/ /*方位 Quaternion*/) // 销毁 // 不要循环调用 // 销毁当前的脚本组件 // 销毁的时机: 在 Update 之后,渲染之前 // Destroy(this); // 销毁当前的游戏物体 // Destroy(gameObject); // 5秒以后销毁 当前脚本组件 // Destroy(this, 5); // 7、物体之间发生碰撞的必要条件 // 1)、双方都必须有碰撞器 2)、至少有一个非休眠的刚体 3)、如果一方是运动学刚体,另一个必须是非运动学刚体 // 触发的事件函数 双方的 // OnCollisionEnter(Collision col) OnCollisionStay(Collision col) OnCollisionExit(Collision col) // 如果勾选了 IsTrigger 会? 在所有的 Collider上 // 会变成触发器,不会再有碰撞效果了 // 什么情况下会触发 触发器 // 1)双方都有碰撞器,至少有一方勾选了IsTrigger 2)、至少有一个有刚体 // 触发的事件函数 双方的 // OnTriggerEnter(Collider o) OnTriggerStay(Collider o) OnTriggerExit(Collider o) #endregion // Use this for initialization void Start () { Destroy(this); a = 200; } // Update is called once per frame void Update () { }}

发生碰撞(触发)的必要条件

  3D数学 3D数学:利用数学的方式解决计算机几何的问题。 坐标系: 一维坐标系(线性坐标系):线性变化 二维坐标系(笛卡尔2D坐标系):笛卡尔发明的 坐标点的分量,代表坐标点距离轴的距离(相当于轴的偏移量) 三维坐标系 标量:只有大小 矢量:大小和方向,坐标系(向量),物理学(力)   向量: 概念:有大小有方向的矢量放在坐标系中就可以称之为向量。 特点:没有位置的概念,放在哪都是这个向量(仅表示方向和大小,可以平行移动)。   两个坐标系相加无意义 两个坐标系相减:A(3,1) - B(2,0) = c(3-2,1-0) = c(1,1) 坐标大写,向量小写 数学计算:各分量分别相减 几何意义:得到的是一个新的向量,这个向量由B点指向A点,大小是A点和B点之间的距离。 向量方向:从减数指向被减数   坐标和向量相加:A(1,1) + b(1,1) = C(2,2) 数学计算:各分量分别相加 几何意义:得到的是一个新的坐标位置,由A坐标点,沿着b向量的方向,移动b向量的长度的距离,得到的新坐标。 A坐标,沿着b向量的方向,移动b向量的长度,得到C坐标   向量和向量相加有意义 向量和向量相加:a(1,1) + b(2,1) = c(3,2) 数学计算:各分量分别相加 几何意义:得到的是一个新的向量,让ab向量首尾相连,得到c向量,从a向量的起点指向b向量的终点。 向量相加,平形四边形的对角线 坐标:transform,position 向量:new Vector3(0,0,1)或Vector3.forward   向量和向量相减:a(1,1) - b(1,-1) = c(0,2) 数学计算:各分量分别相减 几何意义:得到的是一个新的向量,让ab向量起点重合,得到c向量,从减数向量的终点指向被减数向量的终点。 已知入射光线l,和法向量n,求反射光线r。r = l + 2n   向量和标量相乘:a(1,1) * 2 = c(2,2) 数学计算:标量分别乘以各分量 几何意义:得到的是一个新的向量,让原向量在原有方向的基础上,让原向量进行了标量倍数的缩放。   勾股定理:直角三角形中,斜边的平方等于两条直角边的平方和。 向量的各分量有什么几何意义:描述这个向量在各个轴向上的投影的长度 向量的模(模长):向量的长度,向量的各分量的平方和再开方 零向量(0,0,0):长度为0,方向任意(模长为零,没有方向) 单位向量:模长为1的向量叫单位向量。 用单位向量表示方向,用标量表示速度,用标量的缩放可以控制速度。   向量的标准化:把一个非单位向量变成一个单位向量 让这个向量的各分量分别除以模长(根号2=1.414 根号3=1.732 根号5=2.236) 不是单位向量的向量让各分量分别除以这个向量的模长,就变成了原有方向不变的单位向量。 我们把不是单位向量的向量变成单位向量的过程叫向量的标准化。 向量的标准化后的模长为1 复杂写法

简单写法,用normalized函数

  作业1:Normalized和normalized区别 共同点:实现规范化,让一个向量保持相同的方向,但它的长度为1.0,如果这个向量太小而不能被规范化,一个零向量将会被返回。 不同点: Vector3.normalized的特点是改变当前向量,也就是当前向量长度是1 Vector3.Normalized的特点是当前向量是不改变的并且返回一个新的规范化的向量; magnitude:取标准化后的模长   负向量:让一个向量* -1,得到一个新的向量,新的向量和原向量互为负向量(成对出现)。   向量和向量的乘法: 点乘(内积) 叉乘(外积) transform.Translate(Vector3 dir , Space space):同理适用于transform.Rotate() 1、当第一个参数是Vector3.forward的时候,第二个参数如果不填或者填self,结果是沿着自身的前方移动;如果填world,结果是沿着世界的前方移动 2、当第一个参数是Transform算出来的时候,第二个参数必须填world,否则就乱了 这样写会转两次方向   作业2:做一个第一人称视角漫游,加个摄像机   Unity场景切换 同步加载(当前场景会卡主)和异步加载(加载新的场景,不阻塞当前场景的运行) 新建两个场景 1、把需要切换的场景全部添加到Build Setting 2、添加命名空间using UnityEngine.SceneManagement; using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement; // 场景管理public class MenuControl : MonoBehaviour { public float w = 100; public float h = 50; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI() { // w h Sceen.Width Sceen.Height x = (Screen.width - w)/2 y = (Screen.height - h)/2 float x = (Screen.width - w) / 2; float y = (Screen.height - h) / 2; if (GUI.Button(new Rect(x, y, w, h), "开 始 游 戏")) { // 切换到 游戏场景 同步加载(当前场景会卡主) 异步加载(不会阻塞当前场景的运行) SceneManager.LoadScene("GameScene");//可以添加Build Setting里的字符串 } if(GUI.Button(new Rect(x, y + 2 * h, w, h), "退 出 游 戏")) { Application.Quit(); // 退出游戏 发布以后才有作用 编辑器状态无效 } }}

 

转载于:https://www.cnblogs.com/cnwuchao/p/10362800.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。