1. 设置鼠标指针图标

  Build Setting -> Player Setting

  

2. 添加雾的效果

  Window->Lighting->Settings。

  

3. 任意键按下事件

 // Use this for initialization
void Start () {
// 查找 ButtonContainer 实体
buttonContainer = this.transform.parent.Find("ButtonContainer").gameObject;
} // Update is called once per frame
void Update () {
if (!isAnyKeyDown)
{
if (Input.anyKey) // 任意键按下
{
ShowButton(); // 显示按钮界面
}
}
} void ShowButton()
{
buttonContainer.SetActive(true); // 显示按钮界面
this.gameObject.SetActive(false); // 隐藏 pressanykey
isAnyKeyDown = true;
}

4. 添加游戏背景音乐和鼠标点击声音

  Audio Source

    

  NGUI Play Sound

    

5. 点击 OK 按钮保存数据

 public void OnOkButtonClick()
{
PlayerPrefs.SetInt("SelectedCharacterIndex", selectIndex); // 保存数据
PlayerPrefs.SetString("Name", nameInput.value);
// TODO 转到下一场景
}

6. 根据鼠标点击改变人物朝向

 // 射线检测
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
bool isCollider = Physics.Raycast(ray, out hitInfo);
if (isCollider && hitInfo.collider.tag == Tags.ground)
{
LookAtTarget(hitInfo.point); // 朝向目标位置
}
 // 朝向目标位置
void LookAtTarget(Vector3 target)
{
target.y = transform.position.y; // 绕y轴旋转,注意高度要保持一致
transform.LookAt(target); // 朝向目标
}

7. 控制人物移动

  Character Controller。

    

 void Update () {
// 得到当前位置与目标位置的距离
float distance = Vector3.Distance(dir.targetPos, transform.position);
if (distance > 0.1f) // 若没有到达目标位置
{
// 简单移动
controller.SimpleMove(transform.forward * speed);
}
}

8. 人物移动动画的播放

  

 // LateUpdate 运行稍晚于 Update
void LateUpdate () {
if (move.state == CharacterState.Moving) // 移动状态
{
PlayAnimation("Run");
}
else if(move.state == CharacterState.Idle) // 静止状态
{
PlayAnimation("Idle");
}
} // 播放animationName动画
void PlayAnimation(string animationName)
{
animation.CrossFade(animationName, 0.1f);
}

9. 相机随人物移动

 // Use this for initialization
void Start () {
// 获取人物位置
player = GameObject.FindGameObjectWithTag(Tags.player).transform;
offset = transform.position - player.position; // 人物位置与相机偏移
transform.LookAt(player); // 相机看向人物
} // Update is called once per frame
void Update () {
transform.position = player.position + offset; // 相机跟随人物
}

10. 控制视野的远近

 // 鼠标中轴控制视野的远近
void ScrollView()
{
distance = offset.magnitude; // 相机与人物的距离
// 根据中轴控制视野远近
distance += Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
offset = offset.normalized * distance;
}

11. 控制视野的旋转

 // 控制视野旋转
void RotateView()
{
if (Input.GetMouseButtonDown()) // 监听鼠标左键
{
isRotate = true;
}
if (Input.GetMouseButtonUp())
{
isRotate = false;
}
if (isRotate)
{
// 以人物为中心,绕y轴旋转
transform.RotateAround(player.position, Vector3.up, Input.GetAxis("Mouse X")*rotateSpeed);
Vector3 originalPos = transform.position; // 记录当前位置和旋转
Quaternion originalRot = transform.rotation;
// 以人物为中心,绕视野x轴旋转
transform.RotateAround(player.position, transform.right, -Input.GetAxis("Mouse Y")*rotateSpeed);
float x = transform.eulerAngles.x;
if (x < || x > ) // 控制上下旋转范围
{
transform.position = originalPos;
transform.rotation = originalRot;
} offset = transform.position - player.position;
}
}

黑暗之光 Day1的更多相关文章

  1. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  2. day1

    day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...

  3. day1作业--登录入口

    作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...

  4. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  5. Python学习路程day1

    变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...

  6. 团队项目——站立会议 DAY1

    团队项目--站立会议 DAY1        团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱        今日(2016/5/6)为站立会议的第一天,一起对团队项目进行讨论,并对每个人的 ...

  7. Day1 login

    使用流程: 1.程序启动后,显示欢迎信息,提示用户输入用户名: 2.判断用户是否存在,不存在则提示重新输入,或者关闭程序:客户存在则提示客户输入密码: 3.判断密码是否正确,如果不正确则提示用户重新输 ...

  8. contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve

    http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...

  9. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...

随机推荐

  1. 求 LCA 的三种方法

    (YYL: LCA 有三种求法, 你们都知道么?) (众神犇: 这哪里来的傻叉...) 1. 树上倍增 对于求 LCA, 最朴素的方法是"让两个点一起往上爬, 直到相遇", &qu ...

  2. HihoCoder 1044 垃圾清理 (优化:状态压缩)

    状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市— ...

  3. object references an unsaved transient instance【异常】

    [异常提示] TransientObjectException: object references an unsaved transient instance -save the transient ...

  4. Luogu3576 POI2014 MRO-Ant colony 【树形DP】*

    Luogu3576 POI2014 MRO-Ant colony The ants are scavenging an abandoned ant hill in search of food. Th ...

  5. 理解 C# 项目 csproj 文件格式的本质和编译流程

    写了这么多个 C# 项目,是否对项目文件 csproj 有一些了解呢?Visual Studio 是怎么让 csproj 中的内容正确显示出来的呢?更深入的,我能够自己扩展 csproj 的功能吗? ...

  6. css 常用类名

    1.页面结构 容器: container 页头:header 内容:content/container 页面主体:main 页尾:footer 导航:nav 侧栏:sidebar 栏目:column  ...

  7. Google Chrome 调试JS简单教程[更新]

    题外话,刚开始我写这篇内容只是将自己了解的一些知识放上来,不巧的是我分析了我的来访日志,很多朋友都有这个需求,为了大家没有白来,我决定充实下这篇文章.最近更新时间2014-02-14 chrome版本 ...

  8. 【转】Linux动态链接(4)ldd与ldconfig

    原文网址:http://tsecer.blog.163.com/blog/static/15018172012414105551345/ 一.动态链接工具ldd和ldconfig是动态链接的两个重要辅 ...

  9. js事件篇

    javascript和html之间的交互式通过事件来实现的,事件就是文档或浏览器窗口中发生的一些特定的交互. 事件流:描述的是从页面中接收事件的顺序. 不同的是,IE和Netscape开发团队竟然提出 ...

  10. VC编译选项 md /mdd /ml /mt/mtd

    VC编译选项 多线程(/MT)多线程调试(/MTd)多线程 DLL (/MD)多线程调试 DLL (/MDd)C 运行时库                        库文件Single threa ...