Unity鏡頭特寫效果
阿新 • • 發佈:2019-01-31
public GameObject[] obj;//觀察物件集合 private int num=0; // public Transform target; public float distance = 3.0f;//攝像機正對物體的距離 public float height = 1.0f;//攝像機正對物體的高度 public float damping = 5.0f;//攝像機位移速度 private bool smppthRotation = true;//是否平滑轉動角度 public float rotationDamping = 10.0f;//攝像機角度轉動的速度 public float x_=0f;//攝像機距離物體x軸的距離 private Vector3 targetLookAtOffset;// public float bumperDistanceCheck = 2.5f; public float bumperCameraHeight = 1.0f; private Vector3 bumperRayOffset; // Update is called once per frame void Update () { lookatobj(obj[num].transform); } void lookatobj(Transform target) { Vector3 wantedPosition = target.TransformPoint(x_, height, -distance); RaycastHit hit; //若攝像機和物體之間有障礙物 則將攝像機拉到障礙物之前 //Vector3 back = target.transform.TransformDirection(-1 * Vector3.forward); //if (Physics.Raycast(target.TransformPoint(bumperRayOffset), back, out hit, bumperDistanceCheck)) //{ // // clamp wanted position to hit position // wantedPosition.x = hit.point.x; // wantedPosition.z = hit.point.z; // // wantedPosition.y = Mathf.Lerp(wantedPosition.y, hit.point.y + bumperCameraHeight, Time.deltaTime * damping); //} transform.position = Vector3.Lerp(transform.position, wantedPosition, Time.deltaTime * damping);//攝像機位移 Vector3 lookPosition = target.position;//target.TransformPoint(targetLookAtOffset); Quaternion wantedRotation = Quaternion.LookRotation(lookPosition - transform.position, target.up); if (smppthRotation) { //平滑轉動攝像機 transform.rotation = Quaternion.Slerp(transform.rotation, wantedRotation, Time.deltaTime * rotationDamping); } else transform.rotation = wantedRotation; //將障礙物隱藏 if (Vector3.Distance(transform.position, wantedPosition) <=2f) { Vector3 dir=transform.TransformDirection(Vector3.forward); if (Physics.Raycast(transform.position, dir, out hit)) { if (hit.collider.gameObject.name != target.name) { hit.collider.gameObject.SetActive(false); } } } if (transform.position == wantedPosition && transform.rotation == wantedRotation)//迴圈觀察 { num++; num %= obj.Length; obj[num].SetActive(true);//顯示物件 } }