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 ...
随机推荐
- java大数据最全课程学习笔记(5)--MapReduce精通(一)
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 MapReduce精通(一) MapReduce入门 MapReduce定义 MapReduce优缺点 优点 缺 ...
- mysqldump导出表结构及数据
问题描述:有需要mysql某几张表的需求,某个数据库某几张表,导出先检查相应的数据库和表是否存在 数据泵用法:默认导出的是表结构以及表中的数据 mysqldump -uroot -p -S /data ...
- 修改ElementUI样式的几种方式
ElementUI是一款非常强大的前端UI组件库,它默认定义了很多美观的样式,但是我们在实际开发过程中不可避免地遇到需要修改ElementUI默认样式.下面总结了几种修改默认样式的方法. 1. 新建全 ...
- 数据库事务与MySQL事务总结
事务特点:ACID 从业务角度出发,对数据库的一组操作要求保持4个特征: Atomicity(原子性):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败 ...
- 看了这篇你就会手写RPC框架了
一.学习本文你能学到什么? RPC的概念及运作流程 RPC协议及RPC框架的概念 Netty的基本使用 Java序列化及反序列化技术 Zookeeper的基本使用(注册中心) 自定义注解实现特殊业务逻 ...
- HTTP的实体数据
数据类型表示实体数据的内容是什么,使用的是MIME type,相关的头字段是Accept和Content-Type: text:即文本格式的可读数据,我们最熟悉的应该就是text/html ...
- python基础--小数据池,代码块的最详细、深入剖析
本文转至太白金星 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存 ...
- DOM事件操作
DOM事件:对事件做出反应 当事件发生时,可以执行 JavaScript,比如:点击时 onClick="" 例:当用户点击时,会改变 <h1> 元素的内容: < ...
- minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析
1. minSdkVersion minSdkVersion限制安装application所需要的系统最低版本,低于该版本的系统都不可以安装该application.同时不能使用该level版本SDK ...
- python学习笔记1 -- 函数式编程之高阶函数 sorted排序
python提供了很强大的内置排序函数,妈妈再也不担心我不会写冒泡排序了呀,sorted函数就是这个排序函数,该函数参数准确的说有四个,sorted(参数1,参数2,参数3,参数4). 参数1 是需要 ...