Unity3D 相机控制
来源:互联网 发布:id for mac中文破解版 编辑:程序博客网 时间:2024/04/30 06:08
/// <summary>/// Created by Hong Youwei/// Created in 2015.1/// </summary>using UnityEngine;using System.Collections;public class CameraControl : MonoBehaviour {public float distanceAway = 3.0f;// 相机和人的水平距离public float distanceUp = 1.0f;// 相机和人的高度差public float smooth = 1f;// 相机移动速度 float distanceAwayR = 3.0f;// 距离调整float distanceUpR = 1.0f;// 距离调整private GameObject player;// 获取角色对象private Vector3 targetPosition;// the position the camera is trying to be in private float playerHieght; // 角色高度private Vector3 playerPositionByHalf; // 角色的一半高RaycastHit hit; // 获取射线信息Vector3 curColliderPoint;// 当前遮挡物体float distance;// 相机和人的固定距离Transform follow;// 跟随的对象Transformbool isFollow = true;// 是否跟随角色void Start (){// 初始化数据distanceAwayR = distanceAway;distanceUpR = distanceUp;player = GameObject.FindGameObjectWithTag("Player");playerHieght = player.collider.bounds.size.y * player.transform.localScale.y;}// Use this for initializationvoid Update () {}// Update is called once per framevoid LateUpdate () {playerPositionByHalf = new Vector3(player.transform.position.x, player.transform.position.y + playerHieght / 2, player.transform.position.z);// 当被墙挡住时不执行这个方法if(isFollow) {follow = player.transform;// setting the target position to be the correct offset from the hovercraft targetPosition = follow.position + Vector3.up * distanceUpR - follow.forward * distanceAwayR;// making a smooth transition between it's current position and the position it wants to be in transform.position = Vector3.Lerp(transform.position, targetPosition, smooth * Time.deltaTime);// make sure the camera is looking the right way! transform.LookAt(playerPositionByHalf);distance = Vector3.Distance(targetPosition, playerPositionByHalf);}// 获取是否被遮挡Vector3 direction = (transform.position - playerPositionByHalf).normalized;if(Physics.Raycast (playerPositionByHalf, direction, out hit, 100)) {// 输出和碰撞体和射线Debug.Log(hit.collider.name);Debug.DrawLine(playerPositionByHalf, hit.point, Color.red);Debug.DrawLine(transform.position, hit.point, Color.blue);// CameraMesh 是在相机上设置的一个sherepher collider,用于接受来自角色身上发射出的射线检测是否被遮挡 if(hit.collider.name != "CameraMesh") {curColliderPoint = hit.point;} }// 当相机被挡住时,移到人物头顶if (Vector3.Distance(curColliderPoint, playerPositionByHalf) < distance * 3 / 4) {distanceAwayR = 0.5f;distanceUpR = distanceUp * 3 / 2;} else {distanceAwayR = distanceAway;distanceUpR = distanceUp;}}}
0 0
- Unity3D 相机控制
- 关于Unity3d代码控制相机的cullingmask
- Unity3D第三视觉角色相机控制
- unity3d实现LOL中的相机控制功能
- Unity3D-FingerGestures控制相机 Pinch Drag Click Swip等
- Unity3D控制物体前后左右移动、旋转及相机跟随
- 【unity3d学习笔记】RPG 中控制相机距离拉近拉远以及旋转相机视角
- Unity3D-相机跟随抖动
- Unity3D相机切换效果
- Unity3D 相机跟随算法
- unity3d实现多个相机控制场景呈现的一些记录。。
- Unity3D游戏场景之控制模型移动、旋转和相机跟随
- 3D相机控制
- Unity 相机控制集合。。。。
- vtk相机控制
- 相机视野控制效果
- 控制相机拍照
- OpenGL相机控制
- poj 1934 Trip (LCS)
- 内核相关网站——TMP
- Android中实现文件下载
- C/C++指针
- iOS 学习资料整理
- Unity3D 相机控制
- 【Android Tips】Timestamp在Android上的转换
- 堆排序(c实现)
- 滚动条
- python程序界面
- 文本框
- java 实现word 转PDF (采用第三方技术 IText、Poi、Jsoup)
- 高速高精度低资源占用单精度浮点算法verilog实现
- 框体 Toplevel 主窗体