unity3d学习笔记(一) 第一人称视角实现和倒计时实现

1. 第一人称视角

(1)让mainCamera和player(视角对象)同步在一起

因为我们的player是生成的,所以不能把mainCamera直接放到预支对象里,所以我们实现的方法就是让player和camera的相对位置不变

创建脚本 CameraFlow.cs用于控制mainCamera移动,把此脚本挂到mainCamera中, 同时设置mainCamera为刚体,重力为零(不然mainCamera会掉), 而且把mainCamera和人物的头部放在一起(这里可以点击暂停,然后慢慢调整mainCamera位置)

下一步就是利用CameraFlow.cs使得mainCamera和人物相对位置不变

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class CameraFlow : MonoBehaviour
{
public GameObject follow; //跟随的物体
public float smothing = 5f; //相机跟随的速度
Vector3 offset; //相机与物体相对偏移位置 void Start()
{ offset = new Vector3(0,1.9f,0.15f); } void FixedUpdate()
{
Vector3 target = follow.transform.position + offset;
//摄像机自身位置到目标位置平滑过渡
//transform.position = Vector3.Lerp(transform.position, target, smothing * Time.deltaTime);
this.transform.position = target;
}
}

(2)使鼠标控制方向

在mainCamera挂载mouseLook.cs脚本

using UnityEngine;
using System.Collections; public class mouseLook : MonoBehaviour
{
private IUserAction action;
//方向灵敏度
public float sensitivityX = 0F;
public float sensitivityY =0F;
public float sensitive = 0.5f; //上下最大视角(Y视角)
public float minimumY = -60F;
public float maximumY = 60F; float rotationY = 0F; void Update()
{
//根据鼠标移动的快慢(增量), 获得相机左右旋转的角度(处理X)
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX; //根据鼠标移动的快慢(增量), 获得相机上下旋转的角度(处理Y)
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
//角度限制. rotationY小于min,返回min. 大于max,返回max. 否则返回value
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY); //总体设置一下相机角度
transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); action.rotation(new Vector3(-rotationY, rotationX , 0) );
//旋转player } void Start()
{ action = SSDirector.GetInstance().CurrentScenceController as IUserAction;
// Make the rigid body not change rotation
//if (rigidbody)
// rigidbody.freezeRotation = true;
}
}

这样就实现了第一人称, 同时你可以加入移动脚本

2.倒计时系统实现

首先加入一个定时器类Timer.cs

“`

public class Timer

{

bool _isTicking;//是否在计时中

public float _currentTime;//当前时间

public float _endTime;//结束时间

public delegate void EventHander();

public Timer(float second)

{

    _currentTime = 0;

    _endTime = second;

}

/// <summary>

/// 开始计时

/// </summary>

public void StartTimer()

{

    _isTicking = true;

}

/// <summary>

/// 更新中

/// </summary>

public void UpdateTimer(float deltaTime)

{

    if (_isTicking)

    {

        _currentTime += deltaTime;

        if (_currentTime > _endTime)

        {

            _isTicking = false;

        }

    }

}

/// <summary>

/// 停止计时

/// </summary>

public void StopTimer()

{

    _isTicking = false;

}

/// <summary>

/// 持续计时

/// </summary>

public void ContinueTimer()

{

    _isTicking = true;

}

/// <summary>

/// 重新计时

/// </summary>

public void ReStartTimer()

{

    _isTicking = true;

    _currentTime = 0;

}

/// <summary>

/// 重新设定计时器

/// </summary>

public void ResetEndTimer(float second)

{

    _endTime = second;

}

}

“`

然后就可以调用类 来进行倒计时处理了

以下为测试代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class UserGUI : MonoBehaviour { private Timer time; void Start ()
{ time = new Timer(60);
time.StartTimer(); } void Update()
{ time.UpdateTimer(Time.deltaTime); }
private void OnGUI()
{ GUI.Label(new Rect(10, Screen.height - 50, 200, 50), "倒计时:")
GUI.Label(new Rect(75, Screen.height - 50, 200, 50), (time._endTime - time._currentTime).ToString(), score_style); }
}

unity3d学习笔记(一) 第一人称视角实现和倒计时实现的更多相关文章

  1. 如何使用threejs实现第一人称视角的移动

    在数据可视化领域利用webgl来创建三维场景或VR已经越来越普遍,各种开发框架也应运而生.今天我们就通过最基本的threejs来完成第一人称视角的场景巡检功能.如果你是一位threejs的初学者或正打 ...

  2. Stealth视频教程学习笔记(第一章)

    Stealth视频教程学习笔记(第一章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  3. Unity3D学习笔记3——Unity Shader的初步使用

    目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. 渲染 ...

  4. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  5. D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建

    说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...

  6. Unity3D学习笔记——选择Enemy

    一.步骤: 1.创建三个Cube,并将这三个Cube的Cube的Tag设为Enemy 2.导入第一人称视角的资源 3.创建名为Targeting的C#脚本 4.编写Targeting脚本,并将它附到第 ...

  7. ThingJS平台制作第一人称视角下的巡更效果

    今天想要做一个类似巡更的过程,就像是在学校保安巡更,小区保安巡更一样.巡更需要用到相应的场景,比如说:园区.学校.超市以及工厂等等,然后需要规划好路线也就是巡更的路线,并且视角要跟随路线来变换,从而达 ...

  8. unity中自制模拟第一人称视角

    public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...

  9. Unity3D学习笔记(九):摄像机

    3D数学复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class w ...

随机推荐

  1. 010.Nginx正反代理

    一 Nginx代理 1.1 Nginx代理概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器.同时也是一个IMAP.POP3.SMTP代理服务器.nginx可以作为一个HTT ...

  2. 集训作业 洛谷P1866 编号

    这个题是个数学题啊. 总体思路不是很难,每个兔子有一个编号,只要不停的看下一个兔子有多少可选编号,再乘上之前的所有可能性就可以算出一共的编号方法. #include<iostream> # ...

  3. scratch编程——画笔模块画各种同心图案

    我们今天是要用画笔来画出不同的同心图案,在画之前,我们先来了解一下画笔模块: 1.画笔模块的用法 画笔模块的用法就是在舞台上留下不同颜色粗细的线条,它的默认是情况是抬笔,我们在使用的时候要让角色移动到 ...

  4. STL源码剖析:关联式容器

    AVL树 AVL树定义:红黑树是一颗二叉搜索树,特别的是一棵保持高度平衡的二叉搜索树 AVL树特点: 每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1 AVL树插入: 说明:新增节点的平衡因子 ...

  5. 设计模式:proxy模式

    目的:为其他对象提供一种代理以控制对这个对象的访问 理解:尽管Decorator的实现部分与代理相似,但Decorator的目的不一样.Decorator为对象添加一个或多个功能,而代理则控制对对象的 ...

  6. [jvm] -- 类文件结构篇

    类文件结构 结构图  魔数 头四个字节,作用是确定这个文件是否为一个能被虚拟机接收的 Class 文件. Class 文件版本 第五和第六是次版本号,第七和第八是主版本号. 高版本的 Java 虚拟机 ...

  7. 手把手教你基于C#开发WinCC语音报警插件「附源代码」

    写在前面 众所周知,WinCC本身是可以利用C脚本或者VBS脚本来做语音报警,但是这种方式的本质是调用已存在的音频文件,想要实现实时播报报警信息是不行的,灵活性还不够,本文主要介绍基于C#/.NET开 ...

  8. 3.pandas的简单查询

    知道了基本的pandas的数据结构,就可以进行查询相应的数据了 DataFrame可以看成是一个个的Series组成的一个二维结构,既然如此,就会有从DataFrame里查询Series的方法 从Da ...

  9. HTML骨架

    本文只是复习HTML笔记 html 骨架: DTD:文档类型定义,规定了使用哪个版本的html规范 html 标签:双标签,表示整个网页 head 标签: 配置HTML页面 title: 网页标题 m ...

  10. Zabbix添加监控主机

    一.监控server本机 1.查看主机列表 2.启动server主机的zabbix-agent服务 [root@zabbix ~]# systemctl start zabbix-agent.serv ...