Unity官方_第一人称游戏<恶魔射手>----学习笔记一(英雄脚本)
2017-10-31 15:59
656 查看
游戏思路:
1.摄像机跟随的第一人称类型游戏
2.游戏可依靠Unity内置功能去实现
3.游戏主要包含:玩家部分、敌人部分、UI部分、粒子系统、音频管理、敌人AI、敌人生产
4.该游戏属于入门级FPS案例,留下众多可拓展部分,可细细道来
而作为第一人称射击游戏,首先动刀子一定是我们的英雄了
在这里先去完成英雄的移动脚本 MyPlayerMove : MonoBehaviour
此脚本核心业务逻辑部分如下:
定义在Rigidbody下的公共方法MovePosition ,接受3维向量作为参数,移动到此3维向量所在位置
Truning函数负责完成英雄的旋转,具体实现如下:
定义在Rigidbody下的公共方法MoveRotation,接受旋转到目标方向的四元数,得到旋转后新的方向
英雄移动动画实现较为简单,直接贴出代码吧
对英雄移动的代码先写这么多,后面继续贴出英雄生命值、英雄射击,两篇脚本
--------------这个游戏在以前刚刚学习Unity时,总是问题不断,在有一定基础之后我希望可以依据这个官方案例使自己的能力有所提升。
以后该认认真真写好博客了。。。
1.摄像机跟随的第一人称类型游戏
2.游戏可依靠Unity内置功能去实现
3.游戏主要包含:玩家部分、敌人部分、UI部分、粒子系统、音频管理、敌人AI、敌人生产
4.该游戏属于入门级FPS案例,留下众多可拓展部分,可细细道来
而作为第一人称射击游戏,首先动刀子一定是我们的英雄了
在这里先去完成英雄的移动脚本 MyPlayerMove : MonoBehaviour
public float mMoveSpeed = 5f; //移动速度 Vector3 movement; //移动变量 Rigidbody mRigidbody; Animator animator; int layerMask; //射击对象蒙版层 float range = 100; //子弹最大射程 private void Awake() { mRigidbody = GetComponent<Rigidbody>(); animator = GetComponent<Animator>(); layerMask = LayerMask.GetMask("Floor"); //取到Layer标签为Floor层的索引 }
此脚本核心业务逻辑部分如下:
private void FixedUpdate() { var h = Input.GetAxisRaw("Horizontal"); //水平偏移量--映射W、S,Up、Down var v = Input.GetAxisRaw("Vertical"); //垂直偏移量--同理 Move(h, v); //英雄移动 Truning(); //转弯 Animation(h, v); //动画 }Move函数主要负责对英雄移动的控制,具体实现如下:
private void Move(float h, float v) { movement.Set(h, 0, v); //偏移变量设置初始值 movement = movement * mMoveSpeed * Time.deltaTime; //当前位置的偏移量 mRigidbody.MovePosition(transform.position + movement); //更新英雄位置 }
定义在Rigidbody下的公共方法MovePosition ,接受3维向量作为参数,移动到此3维向量所在位置
Truning函数负责完成英雄的旋转,具体实现如下:
private void Truning() { Ray _ray = Camera.main.ScreenPointToRay(Input.mousePosition); //射线检测 RaycastHit _rh; if (Physics.Raycast(_ray, out _rh, range, layerMask)) { var lookView = _rh.point - transform.position; //英雄位置指向碰撞点的向量LV lookView.y = 0f; //忽略y轴间的差值 var newRotation = Quaternion.LookRotation(lookView); //英雄当前方向到向量LV方向需要旋转的四元数 mRigidbody.MoveRotation(newRotation); //转向 } }
定义在Rigidbody下的公共方法MoveRotation,接受旋转到目标方向的四元数,得到旋转后新的方向
英雄移动动画实现较为简单,直接贴出代码吧
private void Animation(float h, float v) { var walking = h != 0 || v != 0; //这是一个简单bool表达式,只有h、v中有一个不为0,表示正在移动,此时设置移动动画 animator.SetBool("IsWalking",walking); }
对英雄移动的代码先写这么多,后面继续贴出英雄生命值、英雄射击,两篇脚本
--------------这个游戏在以前刚刚学习Unity时,总是问题不断,在有一定基础之后我希望可以依据这个官方案例使自己的能力有所提升。
以后该认认真真写好博客了。。。
相关文章推荐
- Unity官方第一人称射击游戏<恶魔射手>_学习笔记三(敌人脚本)
- 官方游戏<恶魔射手>--学习笔记二(英雄脚本)
- Unity官方第一个人称射击游戏<恶魔射手>—学习笔记四(游戏中的管理)
- IOS cocos2d学习笔记-<八>游戏关卡(Objective-C文件读写)
- 【Unity 3D】学习笔记二十五:unity游戏脚本(五)
- rocketmq学习笔记 二 官方实例<分布式事务>
- rocketmq学习笔记 二 官方实例<消费者操作>
- 【Unity3D游戏开发学习笔记】(五)灵魂降临—Unity脚本的简单运用
- 【Unity 3D】学习笔记二十一:unity游戏脚本(一)
- 【Unity 3D】学习笔记二十六:unity游戏脚本(六)
- 【Unity 3D】学习笔记二十二:unity游戏脚本(二)
- Unity官方游戏实例视频中文教程之太空射击学习笔记
- 【Unity 3D】学习笔记二十四:unity游戏脚本(四)
- 【Unity 3D】学习笔记二十三:unity游戏脚本(三)
- rocketmq学习笔记 二 官方实例<广播>
- rocketmq学习笔记 二 官方实例<消息过滤>
- 【Unity 3D】学习笔记二十七:unity游戏脚本(七)
- 深度学习21天实战实战caffe学习笔记<10:Caffe前向传播>
- <C#入门经典>学习笔记2之控制流程
- react-native学习笔记之<TextInput>