学习unity有一段时间了,自己准备做一个cs的项目来巩固并且提升自己。

第一步:搭建场景

因为这个游戏只针对游戏逻辑为重点,所以搭建场景和人物素材我都从unity asset store中的免费资源下载:所以先找一个场景。

就用这个unity提供的免费的场景把

场景大概是这个样子的

上面的场景我将一些特效给禁用掉了。

接下来再去找一把枪

将这个枪的素材导入,在预制件中选择一把。

注意把场景中的摄像机去掉,我们自己加一个摄像机并且调整摄像机和枪的位置。大概是下图的位置

将摄像机拖拽到枪的中形成子物体和父物体。目的是为了摄像机跟随枪移动而移动。

注意将枪放入一个空物体中,否则由于素材的自身坐标会导致移动和旋转出问题。

接下来先写移动脚本。

新建一个c#类,MovePlayer.cs

用Input类实现鼠标左右移动,枪旋转,键盘的awsd或者↑↓←→控制人物移动。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
///
///</summary>
public class MovePlayer : MonoBehaviour
{
    //键盘左右移动
    private float Horizontal;
    //键盘上下键移动
    private float Vertical;
    //鼠标x轴移动(相对屏幕而言)
    private  float MouseX;
    //鼠标y轴移动(相对屏幕而言)   注:屏幕没有z轴所以没有鼠标z轴移动的input
       private float MouseY;
    //移动速度
    public float moveSpeed = 10;
    //旋转速度
    public float rotateSpeed = 50;
    // Start is called before the first frame update
    void Start()
    {
        
    }

// Update is called once per frame
    void Update()
    {
        //键盘的ad键和←→键左右移动    左:-1    右:1
        Horizontal=Input.GetAxis("Horizontal");
        //键盘的ws键和↑↓键上下移动
        Vertical= Input.GetAxis("Vertical");
        //鼠标移动来控制旋转
        MouseX = Input.GetAxis("Mouse X");
        MouseY = Input.GetAxis("Mouse Y");
        //移动  键盘ad键相对于三维坐标系的x轴,ws相对于z轴
        this.transform.Translate(Horizontal * Time.deltaTime*moveSpeed,0, Vertical * Time.deltaTime * moveSpeed);
        //旋转 鼠标的左右移相对于三位坐标的沿y轴旋转,鼠标的上下相对于沿着x轴旋转(注意鼠标向上是一个正值但是旋转是逆时针旋转所以x轴旋转要旋转负方向)
        //y轴要沿着世界坐标
        this.transform.Rotate(0* Time.deltaTime, MouseX*rotateSpeed*Time.deltaTime, 0,Space.World);
        //x轴要沿着自身
        this.transform.Rotate(-MouseY * rotateSpeed * Time.deltaTime, 0, 0);

print("Horizontal" + Horizontal);
        print("Vertical" + Vertical);
    }
}
以上代码就是控制物体旋转,由于做人物比较复杂,所以就单纯做一把枪。

控制枪移动 需要注意2点

1 枪旋转要注意 沿y轴旋转要沿着世界旋转,x轴旋转要沿着自身(自己用身体转一下就明白了,如果都沿着同一的话你需要固定主脖子,旋转会很晕)

2 沿着x轴旋转 input获取的是正值向上旋转是x轴逆时针旋转,所以需要负方向旋转。

好了本章就写道这里,下一章给枪添加碰撞组件和刚体防止枪冲出地图。

unity3d实现第一人称射击游戏之CS反恐精英(一)(第一人称移动)相关推荐

  1. unity3d实现第一人称射击游戏之CS反恐精英(二)(人物的移动和场景的碰撞关系)

    上一节我们简单的实现了第一人称的移动,但是只是让枪有了漫游的效果,本章来实现它的物理效果. 1 先给枪添加一个碰撞器组件,为了简单我们添加一个box collider来模拟碰撞 调整下碰撞器大小,将它 ...

  2. unity3d实现第一人称射击游戏之CS反恐精英(四)(子弹模块,音效特效)

    实现思想 由于子弹的速度非常快,直接让子弹像现实中那样移动很容易发生'穿模'现象,所以我们用unity中的射线来实现,当用户点击鼠标左键的时候,播放开枪动画,火花特效,开火音效,枪口发射一条射线,检测 ...

  3. unity3d实现第一人称射击游戏之CS反恐精英(六)(朝准星位置发射子弹,更换弹夹 )

    上一节将UI简单的布置了一下,下面来实现UI中当前子弹数和总子弹数和脚本的数据绑定,并且发射子弹要朝着准星的位置发射 1:子弹和显示UI的子弹数的实现思路:在枪攻击的脚本里添加当前子弹数和背包子弹数两 ...

  4. unity3d实现第一人称射击游戏之CS反恐精英(三)(人物旋转限制和跳跃功能(消除连跳,碰撞消除,高度稳定))

    1旋转限制 上文实现的代码,我们的人物可以后空翻和前空翻,这不是我们想要的,所以我们需要对视角进行限定. 先分析一下,人物抬头不能让他超过某个角度,也就是抬头的时候我们人物的z轴和世界的y轴的夹角不能 ...

  5. unity3d实现第一人称射击游戏之CS反恐精英(五)(第一视角UI搭建,血量,金钱,子弹,准心,倒计时)

    这一节内容比较简单,就是构建UI在摄像机屏幕上,让玩家可以看到人物的状态,血量,防弹衣,倒计时,金钱,子弹,准心 下面看一下效果图 最终效果是这样的,所有的布局全是用UGUI的TEXT组件添加的,需要 ...

  6. 【UE4 第一人称射击游戏】01-真实的第一人称相机

    步骤: 1.首先在虚幻商城中下载动画初学者内容包 2.创建一个工程,命名为"FPSTutorial",然后将内容包添加到该工程中 大约20M 3.双击打开"ThirdPe ...

  7. 【UE4 第一人称射击游戏】02-玩家健康和护甲

    上一篇: [UE4 第一人称射击游戏]01-真实的第一人称相机 步骤: 1.在"ThirdPersonCharacter"中添加两个浮点变量"Health"和& ...

  8. Unity3D FPS Game:第一人称射击游戏(一)

    耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...

  9. Unity3D FPS Game:第一人称射击游戏(二)

    耗时一周制作的第一人称射击游戏,希望能帮助到大家! 由于代码较多,分为三篇展示,感兴趣的朋友们可以点击查看! Unity3D FPS Game:第一人称射击游戏(一) Unity3D FPS Game ...

最新文章

  1. Java连接数据库 JDBC
  2. 图像亮度、对比度调节(伽马校正)
  3. 目标检测:Yolov5集百家之长
  4. AtCoder Grand Contest 013 题解
  5. fast-rcnn win10 tensorflow部署
  6. 01.最简单的helloworld
  7. Objective-C 点语法 成员变量的作用域 @property和@synthesize关键字 id类型
  8. Unity3d之HashSlash学习笔记(一)--角色属性类的构架
  9. lwip协议栈源码分析之pbuf
  10. 运维工作5年简历写成这样,谁敢要你
  11. 如何将离线DAT卫星影像解压为瓦片?
  12. 2020第三届微软Project用户大会暨年终项目管理专业化与信息化论坛
  13. 计算机excel中行高在哪里,电脑Excel表格怎么对行高和列宽进行调整
  14. c语言10B,C++程序语言10B_C.ppt
  15. 程序实例python_程是什么意思 带程字的男孩名字 用程字起名的寓意
  16. DMOZ重新接受登录申请(转)
  17. IMS/SIP - GCF IMS相关认证测试如何通过看case procedure来得知哪些field/IE必须带?
  18. 关于素数定理的一个延拓
  19. 从挖矿、分叉到聚合器,一文了解DeFi演化史
  20. AES加密算法原理及java android实现

热门文章

  1. 误删WinSock和WinSock2导致无法上网解决办法
  2. 普通qq客服,不加好友临时会话
  3. GNU/Linux 正则表达式与三剑侠(grep,sed,awk)(精)
  4. Python练习题:1 用Python判断闰年
  5. Anaconda点开 一直停留在 loading applications。。。
  6. [VB.NET]想做一个小界面,不知用什么做
  7. java adb命令_从Java程序执行ADB命令
  8. 【Linux驱动开发】Linux 自带按键驱动
  9. 明解C语言第九章部分答案和头歌部分答案
  10. Romberg算法(Matlab实现)