Unity3D 成神之路unityUnity动画相关

摄像机跟随、视野远近、视野环绕、小地图

2017-07-21  本文已影响55人  _凉笙
摄像机跟随人物
  private Transform Player;
    //偏移值
    private Vector3 offsetPosition;
    void Start () {
        //根据Tag值取得游戏对象的transform
        Player = GameObject.FindGameObjectWithTag("Player").transform;
       //摄像机朝向游戏对象 
        transform.LookAt(Player.transform);
      //偏移量
        offsetPosition = transform.position - Player.position;
    }
    
    
    void Update () {
        //摄像机跟随
        transform.position = offsetPosition + Player.position;
  }
1点31分32秒.gif
摄像机视野拉近拉远
 //距离
    public float distance = 0;
    public float scrollSpeed = 10;
 /// <summary>
    /// 处理视野拉近拉远效果
    /// </summary>
    private void scroliView() {
        // Input.GetAxis("Mouse ScrollWheel")//滚轮向前滑动返回正值,向后滑动返回负值
        distance = offsetPosition.magnitude;//得到摄像机与Player的距离
        distance -= Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;// 距离拉近放大,那distance就会减少,所以-=一个正值那滚轮向前就会放大
        distance = Mathf.Clamp(distance,2,18);//距离限制,距离在2到18之间
        offsetPosition = offsetPosition.normalized * distance;//offsetPosition.normalized返回的长度为1,相当于吧偏移量的长度设为distance
    }
33分52秒.gif
控制视野环绕效果
 private bool isRotating = false;
    // 旋转的速度
    public  float rotateSpeed = 2f;
     /// <summary>
    /// 处理视野的旋转
    /// </summary>
    void RotateView() {
        //Input.GetAxis("Mouse X");//得到鼠标在水平方向的滑动
        //Input.GetAxis("Mouse X");//得到鼠标在垂直方向的滑动
        if (Input.GetMouseButtonDown(1))
        {
            isRotating = true;       
        }
        else if (Input.GetMouseButtonUp(1)) {
            isRotating = false;
        }
        if (isRotating) {
            transform.RotateAround(Player.position, Player.up, rotateSpeed * Input.GetAxis("Mouse X"));//围绕游戏对象的X轴进行旋转

            Vector3 originaPos = transform.position;
            Quaternion originalRotation = transform.rotation;

            transform.RotateAround(Player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));//围绕摄像机的Y轴进行旋转
            float x = transform.eulerAngles.x;//eulerAngles为Rotationg
            //限制范围,X旋转到10到80之间
            if (x < 10||x>80) {
                transform.position = originaPos;
                transform.rotation = originalRotation;
            }
        }
        offsetPosition = transform.position - Player.position;
    }
21日12点27分50秒.gif
小地图

小地图如何制作呢,首先我们创建一个小地图的摄像机让人物对象成为其父对象、


Paste_Image.png

随后我们创建一个Render Texture并命名为Minimap,再将Minimap拖入我们小地图摄像机的Target Texture上这样我们的Minimap就取得了摄像机上的图像了.


Paste_Image.png
Paste_Image.png 然后我们再创建一个材质球,并将Shader类型改为Custom/Mask,然后将Render Texture和一个遮罩贴图放上。
Paste_Image.png

然后创建一个Image将Minimap材质进去就OK了。


Paste_Image.png 好吧,效果有点丑,但是我们加上框架就不错了,下面我们去实现小地图放大缩小的功能。
Paste_Image.png
 private Camera minimapCamera;

    void Start() {
        minimapCamera = GameObject.FindGameObjectWithTag(Tags.minimap).GetComponent<Camera>();
    }

    public void OnZoomInClick() {
        //放大
        minimapCamera.orthographicSize--;
    }
    public void OnZoomOutClick() {
        //缩小
        minimapCamera.orthographicSize++;
    }
点27分11秒.gif
上一篇 下一篇

猜你喜欢

热点阅读