框架视图
关键代码
AnimaController
public class AnimaController : MonoBehaviour {
//为了获取自身的动画的变量
protected Animator welcomeAnim;
//为了获取摄像机的动画公开的变量;
public Animator cameraAnim;
//定义一个开关是否启动开始播放动画;
private bool isWelcomeStart=false;
// Use this for initialization
void Start () {
//自身动画赋值;
welcomeAnim=gameObject.transform.GetComponent();
//一开始都不要播放;
welcomeAnim.enabled=false;
cameraAnim.enabled = false;
}
// Update is called once per frame
void Update () {
//时间过了2秒后 并且开关是处于关闭的状态下 开始播放动画
if (Time.time>2&&!isWelcomeStart) {
isWelcomeStart = true;
welcomeAnim.enabled = true;
}
}
///
///播放放文字动画后 启动播放摄像机动画的事件;
///
public void enableCameraAnim(){
cameraAnim.enabled = true;
}
}
GalleryData
public class GalleryData {
//此脚本主要是用来显示关键值得;
private string image;
private string description;
private string title;
//设置set 和 get属性;
public void setImage(string image){
this.image = image;
}
public string getImage(){
return image;
}
public void setDescription(string description){
this.description = description;
}
public string getDescription(){
return description;
}
public void setTitle(string title){
this.title = title;
}
public string getTitle(){
return title;
}
}
gameController
public class gameController : MonoBehaviour {
//声明一个公开的变量持有相机的应用;
public CharacterController controller;
//定义向前移动或向后移动的开关;
private bool isforward;
private bool isbackward;
//定义一个初始化位置;
private Vector3 initialPosition;
//UI界面
//定义点击油画的游戏对象 菜单节点
public GameObject descriptionMenu;
//定义公开的相片
public Image image;
//公开标题的属性
public Text title;
//定义公开描述的文本;
public Text description;
//播放完表示是否恩能够移动
private bool canMove;
//摄像机动画
private Animator cameraAnim;
//文本动画;
private Animator welcomeAnim;
void Awake(){
//开启协程
StartCoroutine (JsonLoader.LoadPaints ());
}
void Start () {
//油画介绍UI一开始隐藏界面
descriptionMenu.SetActive(false);
//初始化时候设置为false;
isforward = false;
isbackward = false;
//开始时游戏不能控制 播放完毕后可以控制
controller.enabled=false;
canMove = false;
//对两个动画进行赋值;
cameraAnim=GameObject.Find("Main Camera").GetComponent();
welcomeAnim = GameObject.Find ("WelcomeGreeting").GetComponent ();
}
void Update () {
//如果可移动且可以控制,擦能作一下操作;
if (canMove&&controller==true) {
detectMoving ();
//初始化位置为0;
Vector3 axis = Vector3.zero;
//输入向上的箭头
if (Input.GetKey(KeyCode.UpArrow)||isforward) {
//向前移动
axis = Camera.main.transform.forward;
}else if (Input.GetKey(KeyCode.DownArrow)||isbackward) {
axis = -Camera.main.transform.forward;
}else if (Input.GetKey(KeyCode.LeftArrow)) {
//定义旋转的变量
Vector3 rotation = this.transform.rotation.eulerAngles;
rotation.y-=1;
rotation.y = rotation.y %360;
//重新赋值;
this.transform.rotation = Quaternion.Euler (rotation);
}else if (Input.GetKey(KeyCode.RightArrow)) {
Vector3 rotation = this.transform.rotation.eulerAngles;
rotation.y += 1;
rotation.y = rotation.y % 360;
this.transform.rotation = Quaternion.Euler (rotation);
}
//角色移动控制;
controller.SimpleMove (axis*3.0f);
}
//在update函数中,如果点击鼠标 就把介绍油画的Ui显示出来;
if (Input.GetMouseButtonDown(0)) {
//如果是显示状态,就把介绍UI隐藏起来;
if (descriptionMenu.activeSelf==true) {
descriptionMenu.SetActive(false);
return;
}
//否则点击油画即显示UI介绍的界面
//定义一个从摄像机向前的方向;
Vector3 direction = Camera.main.transform.forward;
//定义存贮的碰撞信息
RaycastHit hit;
//定义一条射线
Ray cameraRay=new Ray(Camera.main.transform.position,direction);
//发出射线;
Physics.Raycast(cameraRay,out hit,100);//参数1:射线 参数2:射线方向 参数3:射进去100;
//如果射线碰撞到的是frame,就显示UI油画介绍界面;
if (hit.collider.gameObject.tag=="frame") {
//通过json类下的方法查找(利用碰撞到的名字去查)
GalleryData gdata=JsonLoader.FindGalleryinJson(hit.collider.gameObject.name);
//图片进行赋值;
image.sprite=Resources.Load("Sprites/"+gdata.getTitle(),typeof(Sprite)) as Sprite;
//标题的名字;
title.text=gdata.getTitle();
//描述
description.text = gdata.getDescription();
//把菜单显示出来;
descriptionMenu.SetActive(true);
}
}
}
///
/// 移动的方法
///
public void detectMoving(){
//鼠标按下;
if (Input.GetMouseButtonDown(0)) {
initialPosition = Input.mousePosition;
} else if (Input.GetMouseButton (0)) {//持续按下鼠标
//判断鼠标移动的位置;
//当前鼠标的值减去初始化的值小于-40 判断不是向后走就是向前走
if ((Input.mousePosition - initialPosition).x < -40) {
//判断不是向前就是向后
if (!isbackward) {
isforward = true;
}
}
//当前鼠标位置-初始化位置的值大于40,判断不是向前走就是向后走
if ((Input.mousePosition-initialPosition).x>40) {
if (!isforward) {
isbackward = true;
}
}
}//判断鼠标抬起的时候
else if (Input.GetMouseButtonUp(0)){
//重新将开关 关闭
isforward=false;
isbackward = false;
}
}
///
/// 播放完动画后 动画就不能使用,游戏开始可以控制;
///
public void EnableMovement(){
//动画停止;
welcomeAnim.enabled = false;
cameraAnim.enabled = false;
//游戏开始可以控制;
controller.enabled = true;
canMove = true;
}
}
JsonLoader
public class JsonLoader : MonoBehaviour {
//定义一个静态的json对象
private static JSONObject gallerydata;
//协程
public static IEnumerator LoadPaints(){//载入油画
//关键文件夹 载入 文件名 转化成 textasset 对象
TextAsset asset = Resources.Load ("nanogallerydata") as TextAsset;
//静态的,实例化对象
gallerydata = new JSONObject(asset.text);
//便利键值对;
foreach (string key in gallerydata.keys) {
//标题
string title = (gallerydata [key] ["title"]).str;
//材料
Material mat = Resources.Load ("Materials/"+title, typeof(Material)) as Material;
//通过“Find”方法查找键赋值给 新对象
GameObject frame = GameObject.Find (key);
//获取相关组件下的材质属性 进行赋值;
frame.GetComponent ().material = mat;
//获取子组件下第一个组件的文本属性进行赋值;
frame.transform.GetChild (0).GetComponentInChildren ().text = title;
}
//协程关键语句 返回空;
yield return null;
}
//定义一个公开的静态的函数 通过key查找的方法
public static GalleryData FindGalleryinJson(string key){
//实例化该类
GalleryData gdata = new GalleryData ();
//获取key下面的游戏对象;
JSONObject galleryJson = gallerydata [key];
//如果不是空 进行赋值;
if (galleryJson != null) {
gdata.setImage (galleryJson ["image"].str);
gdata.setDescription (galleryJson ["description"].str);
gdata.setTitle (galleryJson ["title"].str);
}
//把获取的值进行返回
return gdata;
}
}