自由视角开放自由交易系统手游手游

您的位置:
&›&&›&
《风云》360度可旋转视角手游 自由操控新体验
佚名|20962
当乐玩家交流总群5:
  闯荡宏大武侠江湖,与二十六年经典港漫再续前缘。全球首款电影级武侠MMO手游《》,创新采用360度可旋转视角,为玩家带来媲美端游的自由操控体验。    玩家进入游戏后,手指滑动屏幕可圆周旋转    要让玩家看到360度的全景,首先要有充足的美术资源。《风云》手游美术团队由精英团队《天龙八部3D》原班人马全力制作,角色、场景、角色3D、场景3D、3D动作、特效UI等总共70余人,分工细致明确,高质高效的完成了每一个场景空间的精细绘制。    360度场景细节精细绘制    其次,要解决高低端机的兼容问题。对于高端机来说,开放360度无锁定视角并不难,但若想高、低端机使用同一套美术资源和同一套操作方式,就需要解决低端机的兼容问题。为此,《风云》手游团队从未停过对Unity3D引擎的优化,并竭力提升引擎表现力,凭借丰富的经验和制作水准,最终使高低端机都能够流畅展示出360度的全景。    引擎极致优化 低端机也可流畅展示360度全景。《风云》手游360度可旋转视角,打造MMO手游巅峰体验。&&&&&&&&更多相关游戏信息请关注:《》当乐官网&&&&&&&&看手游新闻,就在当乐网!
全文终 当乐小编:玖枢
类型:角色&仙侠&
平台:安卓,苹果
状态:不删档内测
大小:169.84M
扫描二维码下载
享受更多游戏乐趣!
风云叱咤,相约盛夏,我与你同行
《风云》武林集宝,全民寻宝藏
《风云》5.19版本大更新,社稷鼎神兽争夺战
《风云》经典依旧,激发本质
《风云》强大星宿,魅力召唤绝世高手
《风云》绝世无双,神兵天降
参与评论0条
您还能留下2000个脚印
(送绝世好剑实物)
类型:角色&仙侠&
平台:安卓,苹果
状态:不删档内测
版本号:0.304.0.0
游戏以马荣成经典漫画《风云》为背景,采用“主城+野外+副本”世界架构方式,围绕聂风、步惊云、第二梦、楚楚、雄霸等主角人物...
网游排行榜
类型:角色&横版&动作&
6个礼包查看您的位置:>>3D视角魔幻手游《曙光Online》大世界全揭秘
扫一扫直接下载
热度:99841
微信二维码
互联网出版许可证13651人阅读
[Unity引擎](86)
[游戏开发](79)
& & & &各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是。在上一篇文章一文中,博主与大家分享自己在角色控制方面的一些感悟。今天呢,我们继续来探讨Unity3D角色控制的内容,今天博主将解决在上一篇文章中没有解决的问题,即自由视角下的角色控制。如图是博主非常喜欢的《古剑奇谭》游戏截图,在这款游戏中就使用了博主今天要讲解的自由视角,所谓自由视角是指玩家可以按照自身坐标系向着四个不同的方向移动,当玩家按下鼠标右键时,可以绕轴按照一定的角度旋转摄像机,在旋转的过程中,角色将旋转相应的角度。在移动的过程中,摄像机会保持与玩家间的一定距离,然后跟随角色进行移动。好了,下面我们正式开始今天的内容吧!& & && & &在开始今天的内容前,首先让我们来学习下Unity3D中较为重要的一部分知识,理解这些知识是我们开始学习今天内容的基础。& & &1、Input.GetAxis():该方法用于在Unity3D中根据坐标轴名称返回虚拟坐标系中的值,通常情况下,使用控制器和键盘输入时此值范围在-1到1之间。这段话怎么理解呢?我们来看下面这段脚本:using UnityE
using System.C
public class example : MonoBehaviour {
//水平速度
public float HorizontalSpeed = 2.0F;
//垂直速度
public float VerticalSpeed = 2.0F;
void Update()
//水平方向
float h = HorizontalSpeed * Input.GetAxis(&Mouse X&);
//垂直方向
float v = VerticalSpeed * Input.GetAxis(&Mouse Y&);
transform.Rotate(v, h, 0);
}这段脚本呢是根据鼠标的位置来旋转物体从而实现对物体的观察,从这段脚本中我们可以看出,通过获取输入轴的办法,我们可以获得鼠标移动的方向进而实现对于物体的旋转控制。在Unity3D中我们可以通过Edit-&Project Setting-&Input来查看项目中的坐标轴名称:在后面,我们还将使用这种方式,大家可以对这个方法有进一步的了解。& & &2、欧拉角eulerAngles:该值是Vector3类型的值,x、y、z分别代表绕x轴旋转x度,绕y轴旋转y度,绕z轴旋转z度。因此,该值最为直观的形式是可以允许我们直接以一个三维向量的形式来修改一个物体的角度,例如下面的脚本:float mY = 5.0;
void Update ()
mY += Input.GetAxis(&Horizontal&);
transform.eulerAngles =new Vector3(0,mY, 0);
}& & &如果你已经理解了上面的话,那么不出意外的,这段脚本会如你所愿的,按照鼠标在水平方向上移动的方向绕Y轴旋转。通常情况下,我们不会单独设置欧拉角其中一个轴,例如eulerAngles.x = 10,因为这将导致偏移和不希望的旋转。当设置它们一个新的值时,要同时设置全部。好在我们可以通过Quaternion.Euler()方法将一个Vector3类型的值转化为一个四元数,进而通过修改Transform.Rotation来实现相同的目的。& &&& & &3、插值:所谓插值是指在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。在某些情况下,如果我们希望过程中处理得较为平滑,此时我们就可以使用插值的方法来实现对中间过程的模拟。在Unity3D中我们可以使用两种插值方法,即线性插值Lerp,球形插值SLerp。我们来看下面的脚本:void Rotating (float horizontal, float vertical)
// Create a new vector of the horizontal and vertical inputs.
Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);
// Create a rotation based on this new vector assuming that up is the global y axis.
Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up);
// Create a rotation that is an increment closer to the target rotation from the player's rotation.
Quaternion newRotation = Quaternion.Lerp(rigidbody.rotation, targetRotation, turnSmoothing * Time.deltaTime);
// Change the players rotation to this new rotation.
rigidbody.MoveRotation(newRotation);
插值的方法很简单,只要我们给出初始和结束的状态、时间就可以了,大家可以自己看API。& & & 好了,有了这三部分的基础,我们就可以开始今天的内容了,今天的脚本分为两个部分,第一部分是角色控制的部分,主要负责的角色在场景中的移动、转身和动画处理。第二部分是相机控制的部分,主要涉及相机旋转、相机缩放的相关内容。下面,我们分别来讲这两个部分,场景依然是博主自己在做的小游戏:本次的主角呢,是博主非常喜欢的角色谢沧行,好了,我们回到今天的内容里吧!在第一部分,主要的是完成角色向各个方向的转身,这里博主定义四个方向(其实八个方向是一样的!),脚本如下:using UnityE
using System.C
public class NoLockiVew_Player : MonoBehaviour {
/*自由视角下的角色控制*/
/*作者:秦元培*/
//玩家的行走速度
public float WalkSpeed=1.5F;
public float Gravity=20;
//角色控制器
private CharacterController mC
//动画组件
private Animation mA
//玩家方向,默认向前
private DirectionType mType=DirectionType.Direction_F
[HideInInspector]
//玩家状态,默认为Idle
public PlayerState State=PlayerState.I
//定义玩家的状态枚举
public enum PlayerState
//定义四个方向的枚举值,按照逆时针方向计算
protected enum DirectionType
Direction_Forward=90,
Direction_Backward=270,
Direction_Left=180,
Direction_Right=0
void Start ()
//获取角色控制器
mController=GetComponent&CharacterController&();
//获取动画组件
mAnim=GetComponentInChildren&Animation&();
void Update ()
MoveManager();
//MouseEvent();
//玩家移动控制
void MoveManager()
//移动方向
Vector3 mDir=Vector3.
if(mController.isGrounded)
//将角色旋转到对应的方向
if(Input.GetAxis(&Vertical&)==1)
SetDirection(DirectionType.Direction_Forward);
mDir=Vector3.forward * Time.deltaTime * WalkS
mAnim.CrossFade(&Walk&,0.25F);
State=PlayerState.W
if(Input.GetAxis(&Vertical&)==-1)
SetDirection(DirectionType.Direction_Backward);
mDir=Vector3.forward * Time.deltaTime * WalkS
mAnim.CrossFade(&Walk&,0.25F);
State=PlayerState.W
if(Input.GetAxis(&Horizontal&)==-1)
SetDirection(DirectionType.Direction_Left);
mDir=Vector3.forward * Time.deltaTime * WalkS
mAnim.CrossFade(&Walk&,0.25F);
State=PlayerState.W
if(Input.GetAxis(&Horizontal&)==1)
SetDirection(DirectionType.Direction_Right);
mDir=Vector3.forward * Time.deltaTime * WalkS
mAnim.CrossFade(&Walk&,0.25F);
State=PlayerState.W
//角色的Idle动画
if(Input.GetAxis(&Vertical&)==0 && Input.GetAxis(&Horizontal&)==0)
mAnim.CrossFade(&Idle&,0.25F);
State=PlayerState.I
//考虑重力因素
mDir=transform.TransformDirection(mDir);
float y=mDir.y-Gravity *Time.deltaT
mDir=new Vector3(mDir.x,y,mDir.z);
mController.Move(mDir);
//设置角色的方向,有问题
void SetDirection(DirectionType mDir)
if(mType!=mDir)
transform.Rotate(Vector3.up*(mType-mDir));
这里定义四个方向,是按照逆时针方向转的,相邻的两个方向间相差90度,所以我们只需要将当前的角度和目标角度相减就可以转到目标角度的方向(其实这是以前写的代码,现在回头再看,直接用欧拉角似乎更为简单啊,呵呵)。这里主要的内容就是这样了。下面我们来看相机控制部分的代码吧,这里的代码参考了MouseOrbit脚本,主要完成了鼠标右键旋转控制,博主在此基础上增加了相机缩放的代码。提到相机缩放,其实就是根据鼠标滚轮滚动的方向和大小重新计算角色与相机的距离,与之类似地还有小地图的放缩,其实同样是通过修改距离来实现的。博主今天的一个体会是官方的代码能自己写一遍的最好自己写一遍,这样好多东西就能在这个过程中给理解了。我们一起来看脚本using UnityE
using System.C
public class NoLockView_Camera : MonoBehaviour
//观察目标
public Transform T
//观察距离
public float Distance = 5F;
//旋转速度
private float SpeedX=240;
private float SpeedY=120;
//角度限制
private float
MinLimitY = 5;
private float
MaxLimitY = 180;
//旋转角度
private float mX = 0.0F;
private float mY = 0.0F;
//鼠标缩放距离最值
private float MaxDistance=10;
private float MinDistance=1.5F;
//鼠标缩放速率
private float ZoomSpeed=2F;
//是否启用差值
public bool isNeedDamping=
public float Damping=2.5F;
void Start ()
//初始化旋转角度
mX=transform.eulerAngles.x;
mY=transform.eulerAngles.y;
void LateUpdate ()
//鼠标右键旋转
if(Target!=null && Input.GetMouseButton(1))
//获取鼠标输入
mX += Input.GetAxis(&Mouse X&) * SpeedX * 0.02F;
mY -= Input.GetAxis(&Mouse Y&) * SpeedY * 0.02F;
//范围限制
mY = ClampAngle(mY,MinLimitY,MaxLimitY);
//鼠标滚轮缩放
Distance-=Input.GetAxis(&Mouse ScrollWheel&) * ZoomS
Distance=Mathf.Clamp(Distance,MinDistance,MaxDistance);
//重新计算位置和角度
Quaternion mRotation = Quaternion.Euler(mY, mX, 0);
Vector3 mPosition = mRotation * new Vector3(0.0F, 0.0F, -Distance) + Target.
//设置相机的角度和位置
if(isNeedDamping){
//球形插值
transform.rotation = Quaternion.Lerp(transform.rotation,mRotation, Time.deltaTime*Damping);
//线性插值
transform.position = Vector3.Lerp(transform.position,mPosition, Time.deltaTime*Damping);
transform.rotation = mR
transform.position = mP
//将玩家转到和相机对应的位置上
if(Target.GetComponent&NoLockiVew_Player&().State==NoLockiVew_Player.PlayerState.Walk)
Target.eulerAngles=new Vector3(0,mX,0);
private float
ClampAngle (float angle,float min,float max)
if (angle & -360) angle += 360;
if (angle &
360) angle -= 360;
return Mathf.Clamp (angle, min, max);
这里很多朋友可能对我设置一个状态很不理解吧,这其实是为了让玩家有一个自由查看角色的机会,否则当玩家按下鼠标右键的话,角色就会转向相机正对着的位置,这样玩家就看不到角色的正面了。当然,这里用到了插值,这样能使角色在转身的时候平滑一点,效果会更好。唉,不知不觉已经这个时候了,开学已经一周了,这学期我们只上九周课,然后就是实习、毕设、找工作一大堆事情在等着我们。可是不知道为什么博主宿舍的同学居然还能每天什么事情都不做,从早上一直看电视剧到晚上十点,虽然这件事情和博主没有什么关系吧,可是整个宿舍的人都安安静静地做着自己的事情,就有这么一个人整天声音开得很大在那里外放,这样真的好吗?以前和这个人闹过一次,因为他聚了一帮人在宿舍打麻将,我觉得吵就说了他一顿,结果就和我僵上了。说真的,博主对目前的专业真的没有什么情感,大学四年里最让博主开心的事情就是博主学会了好多自己想要学的东西,认识了几个不错的老师和朋友,仅此而已。或许我们注定要越走越远吧,因为我们根本就不是同一种人。前几天网上有人通过博客联系到博主,希望博主能到他哪里工作,可惜博主目前仍然有一大堆的琐事缠身,不然离开这喧嚣吵闹的宿舍,去做博主喜欢的事情,去寻找博主自己的梦想,博主相信,博主一定可以做得更好吧。人生或许就是这样,你越是在乎的可能越让你得不到,你无心插柳可能会得到一片绿荫。对于未来,不管怎么样,坦然面对就好了,博主改变不了周围的这群人,只能努力地去改变自己。好了,晚安吧!效果演示(2M的限制让很多展示都无可奈何)每日箴言:所有的悲伤,总会留下一丝欢乐的线索。所有的遗憾,总会留下一处完美的角落。我在冰封的深海,找寻希望的缺口。却在午夜惊醒时,蓦然瞥见绝美的月光。——几米& & & &喜欢我的博客请记住我的名字:秦元培,我博客地址是blog.csdn.net/qinyuanpei。& & & &转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/& & &&文章更新:& & & 9月10日,博主在测试这个项目的时候意外地发现了一个Bug。Bug出现在如下位置:
//设置玩家跟随角度
if(Target.GetComponent&NoLockiVew_Player&().State==NoLockiVew_Player.PlayerState.Walk)
Target.rotation=Quaternion.Euler(new Vector3(0,mX,0));
}该方法主要的作用是当玩家同时按下方向控制键和鼠标右键,玩家可以随着鼠标旋转到对应的角度,这主要是为了满足玩家双手操作的需求,不过由于这行代码,导致玩家在向左、向右、向后三个方向上的转身失效,如果除去这行代码,则原来的方向控制没有任何问题,可是没有这行代码,玩家的操作感就会下降。后来博主想到我们对角色的旋转实际上应该是放在鼠标右键事件里的,所以博主将代码修改如下,这样就解决了这个Bug:using UnityE
using System.C
public class NoLockView_Camera : MonoBehaviour
//观察目标
public Transform T
//观察距离
public float Distance = 5F;
//旋转速度
private float SpeedX=240;
private float SpeedY=120;
//角度限制
private float
MinLimitY = 5;
private float
MaxLimitY = 180;
//旋转角度
private float mX = 0.0F;
private float mY = 0.0F;
//鼠标缩放距离最值
private float MaxDistance=10;
private float MinDistance=1.5F;
//鼠标缩放速率
private float ZoomSpeed=2F;
//是否启用差值
public bool isNeedDamping=
public float Damping=10F;
private Quaternion mR
void Start ()
//初始化旋转角度
mX=transform.eulerAngles.x;
mY=transform.eulerAngles.y;
void LateUpdate ()
//鼠标右键旋转
if(Target!=null && Input.GetMouseButton(1))
//获取鼠标输入
mX += Input.GetAxis(&Mouse X&) * SpeedX * 0.02F;
mY -= Input.GetAxis(&Mouse Y&) * SpeedY * 0.02F;
//范围限制
mY = ClampAngle(mY,MinLimitY,MaxLimitY);
//计算旋转
mRotation = Quaternion.Euler(mY, mX, 0);
//根据是否插值采取不同的角度计算方式
if(isNeedDamping){
transform.rotation = Quaternion.Lerp(transform.rotation,mRotation, Time.deltaTime*Damping);
transform.rotation = mR
//处理同时按下鼠标右键和方向控制键
if(Target.GetComponent&NoLockiVew_Player&().State==NoLockiVew_Player.PlayerState.Walk){
Target.rotation=Quaternion.Euler(new Vector3(0,mX,0));
//鼠标滚轮缩放
Distance-=Input.GetAxis(&Mouse ScrollWheel&) * ZoomS
Distance=Mathf.Clamp(Distance,MinDistance,MaxDistance);
//重新计算位置
Vector3 mPosition = mRotation * new Vector3(0.0F, 0.0F, -Distance) + Target.
//设置相机的角度和位置
if(isNeedDamping){
transform.position = Vector3.Lerp(transform.position,mPosition, Time.deltaTime*Damping);
transform.position = mP
//角度限制
private float
ClampAngle (float angle,float min,float max)
if (angle & -360) angle += 360;
if (angle &
360) angle -= 360;
return Mathf.Clamp (angle, min, max);
不过经过博主测试,如果不采用插值的话,似乎效果更为真实啊(为什么会和第一次测试的感觉不一样啊,囧!)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:860998次
积分:10942
积分:10942
排名:第1090名
原创:185篇
评论:1131条
秦元培,程序员、游戏开发者
如果觉得我的我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
(2)(5)(1)(4)(2)(5)(4)(1)(5)(4)(2)(1)(5)(4)(1)(7)(13)(1)(2)(1)(9)(8)(2)(5)(9)(23)(8)(13)(18)(7)(1)(1)(2)(1)(1)(1)(2)(1)(3)(1)作者:九游
来源:九游
发布时间: 18:08:00
《新》采用全3D渲染技术打造全息世界,360°视角任意调节。什么?太高大上了,听不懂?总结起来就一句话:“这游戏没有死角!”天上地下每个角落随便你看,团队打造了一整个3D大世界,同时每张地图都有不同的风光和气候。就冲这画面,即便不玩游戏,来这里旅游都绝对值!
你可以这样看:
也可以这样看:
还可以这样看:
总之,角度怎么样,世界就怎么样!同一个地方有360种不同的角度供你体验,每个角度都有不一样的发现。真3D就是要自由转换视角,想看哪里就看哪里,不错过任何一处风景。
当然,某些时候可以随意转动的视角对于某些小伙伴来说会有影响,但是在《新剑与魔法》,不用担心!除了完全自由的3D视角之外,还有固定的2.5视角供你选择,就是这么贴心!《新剑与魔法》3月17日不删档测试,绝美的风光、自由的视角,等着你来体验!
平台:安卓/苹果
状态:不删档内测
苹果版暂无下载
苹果版暂无下载
我来说两句
正在加载,请稍后...
(阵营战)
这是一款纯正3D且支持千人大世界同时在线的MMORPG手机游戏,以完全
这是一款纯正3D且支持千人大世界同时在线的MMORPG手机游戏,以完全自主原创西方剑与魔法的世界观为背景,融合了东方流行元素。在游戏里,玩家可以体验角色养成,装备打造,技能符文、即时竞技、野外探索、交友结婚、世界BOSS、公会合作及争夺等核心玩法,海量不同外形的技能、装备、坐骑、魔灵、翅膀供收集,更有无数精彩独特的关卡和副本等待玩家的挑战。
开发者:北京中清龙图网络技术有限公司
新服88服 云天之巅
新服S83 风之游侠
新剑与魔法
点击下载按钮,或通过扫描二维码直接下载!
新剑与魔法 1.7.1 安装包安卓安装包
请用手机扫描二维码订阅~
订阅后可及时接受活动,礼包,开测和开放下载的提醒!

我要回帖

更多关于 3d自由视角moba手游 的文章

 

随机推荐