unity3D:游戏分解之角色移动和相机跟随



Quaternion.LookRotation 注视旋转
static function LookRotation (forward : Vector3, upwards : Vector3 = Vector3.up) : Quaternion Description描述 Creates a rotation that looks along forward with the the head upwards along upwards 创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视。也就是建立一个旋转,使z轴朝向view y轴朝向up。 Logs an error if the forward direction is zero. 如果forward方向是0,记录一个错误。
光看描述,是不是比较难理解。网上对这个方法的解释也挺多的,但是各说纷纭,没个简单明了的说法,更容易误导人。
//计算当前位置到下一个坐标点的向量
var vector = (posB - posA).normalized;
//取得向量的方向
var rotation = Quaternion.LookRotation(vector).eulerAngles;
//将物体旋转到指向下一个坐标点的方向
transform.rotation = Quaternion.Euler(, rotation.y, );
//设置物体的坐标
transform.position = posB;

//相机的俯仰角和偏航角,Y方向偏航和目标对象一致
Quaternion ro = Quaternion.Euler(Pitch, transform.rotation.eulerAngles.y, );
var vector = Vector3.forward * Distance;
vector = ro * vector;
var pos = transform.position - vector;
CameraGo.transform.position = pos;
CameraGo.transform.rotation = ro;
//相机的俯仰角和偏航角,Y方向偏航和目标对象一致
Quaternion ro = Quaternion.Euler(Pitch, transform.rotation.eulerAngles.y, );
//给向量赋予旋转
var distanceVector = ro * Vector3.forward * Distance;
var pos = transform.position - distanceVector;
CameraGo.transform.position = pos;
CameraGo.transform.rotation = ro;
//delta就是围绕角色旋转的旋转角度0~360.
Quaternion ro = Quaternion.Euler(Pitch, transform.rotation.eulerAngles.y + delta, )

//角色移动
void SmoothMove()
{
Vector3[] vector3s = _transDataList;// CurvePath.PathControlPointGenerator(_transDataList);
int sample = _transDataList.Length * SampleRate; _movePtg += Time.deltaTime * MoveSpeed; //曲线插值
transform.position = CurvePath.Interp(vector3s, _movePtg / sample); //计算当前位置到下一个坐标点的向量
var vector = (transform.position - _prevPos).normalized;
//取得向量的方向
var rotation = Quaternion.LookRotation(vector, Vector3.right).eulerAngles;
//去处x和z方向的影响,仅作用y方向偏转
rotation.x = ;
rotation.z = ; //将物体旋转到指向下一个坐标点的方向
transform.rotation = Quaternion.Euler(rotation); _prevPos = transform.position;
if (_movePtg >= sample)
{
ResetLocalData();
}
} //相机跟随
void FollowCamera()
{
if (CameraGo == null) return; if(UseFollow != )
{
//相机的俯仰角和偏航角,Y方向偏航和目标对象一致
Quaternion ro = Quaternion.Euler(Pitch, transform.rotation.eulerAngles.y + Slider, ); //给向量赋予旋转
var distanceVector = ro * Vector3.forward * Distance;
var pos = transform.position - distanceVector;
CameraGo.transform.position = pos;
CameraGo.transform.rotation = ro;
return;
}
}
unity3D:游戏分解之角色移动和相机跟随的更多相关文章
- [Unity3D]Unity3D游戏开发之角色控制漫谈
各位朋友,大家好.我是秦元培,欢迎大家关注我的博客,我的博客地址blog.csdn.net/qinyuanpei.今天呢,我们来说说Unity3D中的角色控制,这篇文章并非关注于Unity3D中的某项 ...
- unity3D:游戏分解之曲线
一提到曲线,很多新手就头疼了,包括我.查了很多资料,终于有个大概的了解.想深入了解曲线原理的,推荐一个链接http://www.cnblogs.com/jay-dong/archive/2012/09 ...
- Unity3D 游戏开发构架篇 ——角色类的设计与持久化
在游戏开发中,游戏角色占了很大的篇幅,可以说游戏中所有的内容都是由主角所带动.这里就介绍一下角色类的设计和持久化. 一.角色类应用场景和设计思想 游戏中的角色类型不一而足,有不同的技能,有不同的属性等 ...
- [Unity3D]Unity3D游戏开发之跑酷游戏项目解说
大家好,我是秦元培.我參加了CSDN2014博客之星的评选,欢迎大家为我投票,同一时候希望在新的一年里大家能继续支持我的博客. 大家晚上好.我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.c ...
- [Unity3D]Unity3D游戏开发之伤害数值显示
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念 ...
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...
- [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版
大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...
- [Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
大家好,我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 今天我们来一起学习在Unity3D中怎样实现角色攀爬效果. 在RPG游戏中,某些游戏场景经常须要玩家 ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(一)
Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...
随机推荐
- java抽象类和抽象方法之间的关系
抽象类和抽象方法之间的关系有抽象方法的类,一定是抽象类:抽象类不一定有抽象方法当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类因为子类是继承父类全部内容,所 ...
- eclipse中AndroidA工程依赖B工程设置
假设library为B工程,而SlideMenuTest为A工程,且SlideMenuTest需要依赖library工程(减少jar包形式的修改麻烦). 需要简单的设置即可. 1.B工程设置为libr ...
- 【代码学习】GD库中添加图片水印
函数 getimagesize() bool imagecopymerge( resource dst_im, resource src_im, int dst_x, int dst_y, int s ...
- 子集构造法实现NFA的确定化
功能: 采用子集构造算法实现NFA的确定化 输入:读取NFA的文件(文件名test.txt), 文件格式: 第一列表示状态名,第二列和第三列分别表示输入字符a和b到达的状态 输出:确定化后的DFA( ...
- 【lucene系列学习】排序
用lucene3实现搜索多字段并排序功能(设置权重)
- Oracle清除数据库中长时间占用资源的非活动的会话
1.启动资源计划 alter system set resource_limit=true scope=spfile; 2.设置非活动回话十五分钟断开,释放资源 alter profile defau ...
- poj 1056 IMMEDIATE DECODABILITY 字典树
题目链接:http://poj.org/problem?id=1056 思路: 字典树的简单应用,就是判断当前所有的单词中有木有一个是另一个的前缀,直接套用模板再在Tire定义中加一个bool类型的变 ...
- NancyFx 2.0的开源框架的使用-Stateless
同样和前面一样新建一个空的Web项目,都在根目录添加Module,Models,Views文件夹 添加Nuget包 在Models文件夹里面添加UserModel类 public string Use ...
- 全国各省市GeoCoord SQL文件(不包括区县)
/* Navicat MySQL Data Transfer Source Server : 192.168.0.234 Source Server Version : 50543 Source Ho ...
- Python数据类型之变量
变量 在程序设计中,变数(英语:Variable,scalar)是指一个包含部分已知或未知数值或资讯(即一个值)之储存位址,以及相对应之符号名称(识别字).通常使用变数名称参照储存值:将名称和内容分开 ...