黑暗之光 Day1

1. 设置鼠标指针图标

  Build Setting -> Player Setting

  

 

2. 添加雾的效果 

   Window->Lighting->Settings。

  

 

3. 任意键按下事件

 1 // Use this for initialization
 2 void Start () {
 3     // 查找 ButtonContainer 实体
 4     buttonContainer = this.transform.parent.Find("ButtonContainer").gameObject;
 5 }
 6     
 7 // Update is called once per frame
 8 void Update () {
 9     if (!isAnyKeyDown)
10     {
11         if (Input.anyKey)       // 任意键按下
12         {
13             ShowButton();       // 显示按钮界面
14         }
15     }
16 }
17 
18 void ShowButton()
19 {
20     buttonContainer.SetActive(true);    // 显示按钮界面
21     this.gameObject.SetActive(false);   // 隐藏 pressanykey 
22     isAnyKeyDown = true;
23 }

 

 

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

   Audio Source

    

  NGUI Play Sound

    

 

5. 点击 OK 按钮保存数据

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

 

 

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

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

 

 

7. 控制人物移动

   Character Controller。

    

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

 

 

 8. 人物移动动画的播放

  

 1 // LateUpdate 运行稍晚于 Update
 2 void LateUpdate () {
 3     if (move.state == CharacterState.Moving)    // 移动状态
 4     {
 5         PlayAnimation("Run");
 6     }
 7     else if(move.state == CharacterState.Idle)  // 静止状态
 8     {
 9         PlayAnimation("Idle");
10     }
11 }
12 
13 // 播放animationName动画
14 void PlayAnimation(string animationName)
15 {
16     animation.CrossFade(animationName, 0.1f);
17 }

 

 

 9. 相机随人物移动

 1 // Use this for initialization
 2 void Start () {
 3     // 获取人物位置
 4     player = GameObject.FindGameObjectWithTag(Tags.player).transform;
 5     offset = transform.position - player.position;          // 人物位置与相机偏移
 6     transform.LookAt(player);                               // 相机看向人物
 7 }
 8     
 9 // Update is called once per frame
10 void Update () {
11     transform.position = player.position + offset;          // 相机跟随人物
12 }

 

10. 控制视野的远近

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

 

 

11. 控制视野的旋转

 1 // 控制视野旋转
 2 void RotateView()
 3 {
 4     if (Input.GetMouseButtonDown(0))        // 监听鼠标左键
 5     {
 6         isRotate = true;
 7     }
 8     if (Input.GetMouseButtonUp(0))
 9     {
10         isRotate = false;
11     }
12     if (isRotate)
13     {
14         // 以人物为中心,绕y轴旋转
15         transform.RotateAround(player.position, Vector3.up, Input.GetAxis("Mouse X")*rotateSpeed);
16         Vector3 originalPos = transform.position;           // 记录当前位置和旋转
17         Quaternion originalRot = transform.rotation;
18         // 以人物为中心,绕视野x轴旋转
19         transform.RotateAround(player.position, transform.right, -Input.GetAxis("Mouse Y")*rotateSpeed);
20         float x = transform.eulerAngles.x;
21         if (x < 10 || x > 80)                               // 控制上下旋转范围
22         {
23             transform.position = originalPos;
24             transform.rotation = originalRot;
25         }
26 
27         offset = transform.position - player.position;
28     }
29 }

 

posted @ 2018-03-17 22:59  Just_for_Myself  阅读(370)  评论(0编辑  收藏  举报