unity3d学习笔记(一) 第一人称视角实现和倒计时实现
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学习笔记(一) 第一人称视角实现和倒计时实现的更多相关文章
- 如何使用threejs实现第一人称视角的移动
在数据可视化领域利用webgl来创建三维场景或VR已经越来越普遍,各种开发框架也应运而生.今天我们就通过最基本的threejs来完成第一人称视角的场景巡检功能.如果你是一位threejs的初学者或正打 ...
- Stealth视频教程学习笔记(第一章)
Stealth视频教程学习笔记(第一章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- 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. 渲染 ...
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...
- Unity3D学习笔记——选择Enemy
一.步骤: 1.创建三个Cube,并将这三个Cube的Cube的Tag设为Enemy 2.导入第一人称视角的资源 3.创建名为Targeting的C#脚本 4.编写Targeting脚本,并将它附到第 ...
- ThingJS平台制作第一人称视角下的巡更效果
今天想要做一个类似巡更的过程,就像是在学校保安巡更,小区保安巡更一样.巡更需要用到相应的场景,比如说:园区.学校.超市以及工厂等等,然后需要规划好路线也就是巡更的路线,并且视角要跟随路线来变换,从而达 ...
- unity中自制模拟第一人称视角
public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...
- Unity3D学习笔记(九):摄像机
3D数学复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class w ...
随机推荐
- onehot编码检测
‘’16bits位宽寄存器,用五(六也行)级逻辑判断其中有15个0和1个1‘’,这么道题目,面试无数,几乎没有人能答出来,连给我衍生‘’14个0和2个1‘’的机会都没有. 今天的问题来源于知乎,某大牛 ...
- 新款iPad Pro4的电池续航和充电速度对比
3月18日晚苹果官网上架了两款新iPad Pro,两款iPad Pro 2020外观大小分别为11英寸和12.9英寸,搭载苹果A12Z仿生芯片,起售价分别为6288元和7899元.那么两款iPad P ...
- web自动化 -- Keys(键盘操作)
Keys没啥好讲的 语法:Keys.CONTRAL 等等类似. 下方就是可以 Keys. 跟的键 那些 \ue000 就是对应的 Windows系统中的键盘码,pywin32 也一样的 ...
- raw目录的位置是D:\android_projects\qrscan\app\src\main\res\raw
D:\android_projects\qrscan\app\src\main\res\raw 这里可以放数据库文件和音频文件 文件名为sp.mp3 引用方法: MediaPlayer mp = Me ...
- 小书MybatisPlus第9篇-常用字段默认值自动填充
本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...
- Maven中出现Could not find artifact ...:pom:0.0.1-SNAPSHOT
参考链接:https://blog.csdn.net/zpwggi123/article/details/87189959 多模块项目构建时,先将总项目install,之后子项目分别install,注 ...
- postman~界面介绍
本文摘抄自https://www.jianshu.com/p/b8b02afa74b1 官方文档:https://learning.getpostman.com/docs/postman/launch ...
- 巩固复习(Hany驿站原创)_python的礼物
Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https://www ...
- PHP set_file_buffer() 函数
定义和用法 set_file_buffer() 函数设置打开文件的缓冲大小. 使用 fwrite() 函数输出结果,缓冲的大小通常为 8K.因此,如果要将两个进程写入同一个文件,那么每个文件一次最多只 ...
- PHP min() 函数
实例 通过 min() 函数查找最小值: <?php高佣联盟 www.cgewang.comecho(min(2,4,6,8,10) . "<br>");echo ...