unity学习,希望我的博客能给喜欢unity的朋友带来帮助


       今天学习了摄像机的应用,具体用途就是在游戏中,主角在行走时是远距离的跟随照射,当打怪物是近距离的照射,这样的切换有利于我们更好的观察游戏中的场景,下面我们就来看看这个是怎么完成的吧!


       先来示意图(没有在游戏场景中尝试,而是用立方体和球体来试验的,画面不是很漂亮,希望朋友们可以理解哦)

           

         来看看具体是怎么实现的吧:

                 先在场景中添加地面和立方体和球体,想要让画面漂亮一点也可以给地面,立方体和球体分别添加不同的材质球;

                 然后手动添加一个摄像机,并把手动添加的摄像机和主摄像机分别拖给立方体和球体;

                 再就是给立方体和球体分别添加控件Character Controller;

                    

                  最后就是编写代码来实现我们的效果了;

         添加给立方体的代码如下:

1. using UnityEngine;
2. using System.Collections;
3. 
4. public class CubeCamera : MonoBehaviour {
5.     //声明CharacterController组件
6.     private CharacterController cube;
7.     //定义立方体运动时的速度
8.     float speed = 5f;
9.     //定义标志位,声明为静态的
10.     public static bool flag = false;
11. 
12.     void Start()
13.     {
14.          //在Start方法中获取CharacterController组件
15.          cube = GetComponent<CharacterController>();
16.     }
17. 
18.     void Update()
19.     {
20.         if (flag)
21.         {
22.             //立方体可以上下左右的运动
23.             float x = Input.GetAxis("Horizontal") * speed;
24.             float z = Input.GetAxis("Vertical") * speed;
25.             cube.SimpleMove(new Vector3(x, 0, z));
26.         }
27. 
28.     }
29. }
30. 
        添加给球体的代码如下:
 
1. using UnityEngine;
2. using System.Collections;
3. 
4. public class SphereCamera : MonoBehaviour {
5.     //声明CharacterController组件
6.     private CharacterController sphere;
7.     //定义球体运动时的速度
8.     float speed = 5f;
9.     //定义游戏对象sphereCamera和cubeCamera
10.     public GameObject sphereCamera;
11.     public GameObject cubeCamera;
12.     //定义标志位为true
13.     bool flage = true;
14. 
15.     void Start()
16.     {
17.          //在Start方法中获取CharacterController组件
18.          sphere = GetComponent<CharacterController>();
19.     }
20. 
21.     int y = 0;
22.     void Update()
23.     {
24.         if (flage)
25.         {
26.             //球体可以上下左右的运动
27.             float x = Input.GetAxis("Horizontal") * speed;
28.             float z = Input.GetAxis("Vertical") * speed;
29.             sphere.SimpleMove(new Vector3(x, y, z));
30.         }
31.     }
32.     //触发器
33.     void OnTriggerEnter(Collider other)
34.     {
35.         //当球体通过标签碰到立方体时发生口号内的事件
36.         if (other.tag == "Cube")
37.         {
38.             //标志位为假
39.             flage = false;
40.             //SetActive:控制人物在一定范围内或碰撞盒触发后显示或关闭物体
41.             //当标志位为假时,球体摄像机为关闭,立方体摄像机显示
42.             sphereCamera.SetActive(false);
43.             cubeCamera.SetActive(true);
44.             CubeCamera.flag = true;
45.         }
46.     }
47. }



         最后不要忘记在球体的属性下做设置,把放在立方体和球体下的摄像机分别拖放到相应的位置: