IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]unity3d随笔-6

    u010255642发表于 2017-03-27 16:27:08
    love 0
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraFollow : MonoBehaviour {
        public float distance = 18;//距离
        public float rot = 0;//横向弧度
        private float roll=	30f* Mathf.PI / 180;//纵向弧度,与地面成30度角的相机
        private GameObject target;//目标物体
        public float rotSpeed = 0.2f;
        public float rollSpeed = 0.2f;
        private float maxRoll = 70f * Mathf.PI / 180;
        private float minRoll = 10f * Mathf.PI / 180;
        public float maxDistance = 22f;
        public float minDistance = 5f;
        public float zoomSpeed = 0.2f;
    
    
    	// Use this for initialization
    	void Start () {
            target = GameObject.Find("tank");
    
    	}
    
        void Rotate()
        {//鼠标旋转
            //横向旋转
            float w1 = Input.GetAxis("Mouse X") * rotSpeed;
            rot -= w1;
            //纵向旋转
            float w2 = Input.GetAxis("Mouse Y") * rollSpeed * 0.5f;
            roll -= w2;
            if (roll > maxRoll)
            {
                roll = maxRoll;
            }
            else if(roll<minRoll)
            {
                roll = minRoll;
            }
            //调整距离
            float w3 = Input.GetAxis("Mouse ScrollWheel");
            if (w3 > 0)//向下滚动
            {
                if (distance > minDistance) distance -= zoomSpeed;
            }
            else if (w3 < 0)
            {
                if (distance < maxDistance) distance += zoomSpeed;
            }
        }
    	
    
    	void LateUpdate () {
    
            if (target == null)
            {//找不到目标物体
                return;
            }
            if (Camera.main == null)
            {//找不到主摄像机
                return;
            }
            Rotate();
            //目标位置
            Vector3 targetPos = target.transform.position;
            //相机位置
            Vector3 cameraPos;
            float yz_d = distance * Mathf.Cos(roll);
            float height = distance * Mathf.Sin(roll);
            cameraPos.y = targetPos.y + height;
            cameraPos.z = targetPos.z + yz_d * Mathf.Sin(rot);
            cameraPos.x = targetPos.x + yz_d * Mathf.Cos(rot);
            Camera.main.transform.position = cameraPos;
            //对准目标
            Camera.main.transform.LookAt(target.transform);
    
    		
    	}
        public void SetTarget(GameObject target)
        {
            if (target.transform.FindChild("cameraPoint"))
            {
                this.target = target.transform.FindChild("cameraPoint").gameObject;
            }
            else
            {
                this.target = target;
            }
    
        }
    }
    



沪ICP备19023445号-2号
友情链接