Unity3D学习笔记(八):四元素和书籍推荐
书籍推荐:
3D数学基础:图形与游戏开发——游戏软件开发专家系列(美)邓恩
Unity Shader入门精要 冯乐乐(92年)
数据结构(Python语言描述)
数据结构、算法与应用(C++语言描述)
算法导论 第3版
黑客与画家
程序员生存之道
流体力学:八叉数空间划分
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateVector : MonoBehaviour {
// Use this for initialization
void Start () {
Vector3 dir = new Vector3(,,);
Debug.DrawLine(Vector3.zero,dir,Color.red,);
//单位四元数表示无旋转
Debug.Log(Quaternion.identity);
//四元数的逆
Quaternion q = Quaternion.AngleAxis(, Vector3.up);
Quaternion tempQ = Quaternion.Inverse(q);
Debug.Log(q);
Debug.Log(tempQ);
//旋转四元数
Quaternion rotateQ = Quaternion.AngleAxis(, Vector3.up);
Vector3 newVector = rotateQ * dir;
Debug.DrawLine(Vector3.zero, newVector, Color.green, );
//自己写一个RotationAround
//RotateAround(Vector3 point, Vector3 axis, float angle);
}
// Update is called once per frame
void Update () { }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateAroundScript : MonoBehaviour {
public Transform sphere;
public float rotateSpeed = ;
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
//调用RotateAround
RotateAround(sphere.position, Vector3.up, rotateSpeed);
} public void myRotateAround(Vector3 point, Vector3 axis, float angle)
{
Vector3 A = transform.position - point;
//Vector3 n = Vector3.Project();
//Vector3.Dot(axis, A) = | n | * axis.magnitude;
//| n | = Vector3.Dot(axis, A) / axis.magnitude;
//Vector3 n = axis.normalized * | n |;
Vector3 n = axis.normalized * Vector3.Dot(axis, A) / axis.magnitude;
Vector3 a = A - n;
Quaternion q = Quaternion.AngleAxis(angle, axis);
Vector3 b = q * a;
}
}
复习
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class w06d4 : MonoBehaviour {
public Transform target;
public Vector3 cubeSize;
//欧拉角是如何表示旋转的
//使用x y z来表示旋转 x表示绕x轴旋转多少度 y表示绕y轴旋转多少度 z表示绕z轴旋转多少度
//四元数是如何表示旋转的
//使用x y z w来表示旋转 通过轴角对来表示旋转 n轴转45度 x = n.x * sin<theta/2> , y = n.y * sin<theta/2>, z = n.z * sin<theta/2>, w = cos<theta/2>
//欧拉角和四元数的优缺点
//欧拉角
// 优点: 直观,容易理解
// 缺点: 有万向节锁
// 只能绕固定轴旋转
// 不能实现旋转的平滑差值
//四元数
// 优点: 可以实现任何角度的旋转
// 可以实现旋转叠加
// 没有万向节锁 、
// 可以绕任意轴旋转
// 可以实现旋转的平滑差值
// 缺点: 不直观,不容易理解
//API
//使当前游戏物体的旋转变为 绕x轴旋转90
//1)、使用欧拉角的形式赋值 //transform.eulerAngles = new Vector3(90, 0, 0);
// 使用四元数的形式赋值 //transform.rotation = Quaternion.AngleAxis(90, Vector3.right);
//2)、使当前游戏物体直接看向目标
transform.LookAt(target);
transform.rotation = Quaternion.LookRotation(target.position - transform.position);
//3)、使当前游戏物体缓缓看向目标
transform.rotation = Quaternion.Slerp(transform.rotation,
Quaternion.LookRotation(target.position - transform.position),
/Quaternion.Angle(transform.rotation, Quaternion.LookRotation(target.position - transform.position)));
//4)、把一个欧拉角转换为四元数
transform.rotation = Quaternion.Euler(, , );
//5)、使用鼠标的水平轴值控制当前物体旋转(使用四元数叠加)
float mouseX = Input.GetAxis("Mouse X");
//自身的 绕Y轴转 XX 度
transform.rotation *= Quaternion.Euler(, mouseX, );
//世界的 绕Y轴转 XX 度
transform.rotation = Quaternion.Euler(, mouseX, ) * transform.rotation;
void Start () {
transform.rotation = Quaternion.AngleAxis(, Vector3.right);
transform.eulerAngles = new Vector3(, , );
transform.LookAt(target);
transform.rotation = Quaternion.LookRotation(target.position - transform.position);
transform.rotation = Quaternion.Euler(, , );
} void Update () {
transform.rotation = Quaternion.Slerp(
transform.rotation,
Quaternion.LookRotation(target.position - transform.position),
/ Quaternion.Angle(transform.rotation, Quaternion.LookRotation(target.position - transform.position)));
float mouseX = Input.GetAxis("Mouse X");
// 自身的 绕Y轴转 XX 度
transform.rotation *= Quaternion.Euler(, mouseX, );
// 世界的 绕Y轴转 XX 度
transform.rotation = Quaternion.Euler(, mouseX, ) * transform.rotation;
}
private void OnDrawGizmos()
{
Gizmos.color = new Color(, , , 0.2f);
Gizmos.DrawSphere(transform.position, );
}
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawCube(transform.position, cubeSize);
} }
Unity3D学习笔记(八):四元素和书籍推荐的更多相关文章
- Unity3D学习笔记(四)Unity的网络基础(C#)
一 网络下载可以使用WWW类下载资源用法:以下载图片为例WWW date = new WWW("<url>");yield return date;texture = ...
- [转]Unity3D学习笔记(四)天空、光晕和迷雾
原文地址:http://bbs.9ria.com/thread-186942-1-1.html 作者:江湖风云 六年前第一次接触<魔兽世界>的时候,被其绚丽的画面所折服,一个叫做贫瘠之地的 ...
- Unity3D学习笔记(四):物理系统碰撞和预制体
Rigidbody(刚体组件):加了此组件游戏物体就变成刚体了 ----Mass(质量,单位kg):重力G = 质量m * 重力加速度g(g=9.81 m/s^2) --------冲量守恒定理 动量 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- C++Primer第5版学习笔记(四)
C++Primer第5版学习笔记(四) 第六章的重难点内容 你可以点击这里回顾第四/五章的内容 第六章是和函数有关的知识,函数就是命名了的代码块,可以处理不同的情况,本章内 ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
随机推荐
- Python3学习之路~2.3 字符串操作
字符串操作 特性:不可修改 name="my \tname is alex" print(name.capitalize()) #首字母变大写 print('Alex LI'.ca ...
- 发现XMind一个超级牛逼的功能
本来想要自己手动建立下文件夹的结构图,一不小心发现了一个大惊喜. 比如想要看一下360Downloads文件夹下的文件结构,可以先创建一个名叫360Downloads的主节点,然后把其文件夹下的文件直 ...
- python中operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...
- [py][mx]django form验证-给db减压
django form认证-解压db压力 一般系统都需要前后端都验证 前端验证容器逃逸破解,如通过js console口去发 试想如果后端只有db验证,那么前端无论发什么后端都查询一次db,对db压力 ...
- spring的bean容器加载
1.在单独使用的时候可以通过ClassPathXmlApplicationContext(“配置文件.xml”);来启动容器. 2.在MVC下是通过启动servlet容器,初始化DispatcherS ...
- 浅谈远程登录时,ssh的加密原理
SSH:Secure Shell,是一种网络安全协议,主要用于登录远程计算机的加密过程. 登录方式主要有两种: 1.基于用户密码的登录方式: 加密原理: 当服务器知道用户请求登录时,服务器会把 ...
- .Net Core 使用依赖注入
ASP.NET Core 源码阅读笔记(1) ---Microsoft.Extensions.DependencyInjection 在asp .net中使用依赖注入很简单,只需要在Startup类的 ...
- ajax提交form(文本数据以及文件上传)
$.ajax({ url: 'xxxx.do', type: 'POST', cache: false, data: new FormData($('.layui-form')[0]), proces ...
- 【转】Linux进程绑CPU核
1. 什么是绑核? 所谓绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity).设定以后,Linux调度器就会让这个进程/线程只在所绑定的核上面去运行.但并不是说该进程/线程就独占 ...
- Linux基础命令---mv
mv 将文件或者目录移动到另一个地方,或者重命名. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 mv [选项 ...