Unity3D第三视觉角色相机控制

经过一段时间的学习,学得以下第三视觉相机控制方法,当设置相机初始高度较高的状态下,相机有由高到低的效果,适合做为外景相机,如果是做室内相机,需要另外设计。将这个分享给大家,同时希望得到阅读者宝贵的意见,废话不多说,贴代码:

/// <summary>
/// Created by Hong Youwei
/// Created in 2015.3.25
/// </summary>

using UnityEngine;
using System.Collections;

public class CameraControl : MonoBehaviour {
	// 高度移动变化速度和旋转变化速度
	public float HeDamping = 2f;
	public float RoDamping = 3f;
	//相对主角的位置
	public float distance = 5f;
	public float height = 5f;

	//游戏对象和对象位置
	public GameObject target;
	Transform target_tf;

	// 游戏结束,相机围绕角色旋转的速度
	public float rotateSpeed = 20;

	void Start()
	{
		// 获取角色对象
		if (!target) {
			target = GameObject.FindGameObjectWithTag ("Player");
		}
	}

	void LateUpdate() {
		// 获取角色对象当前位置
		target_tf = target.transform;

		float wantRotationAngle = target_tf.eulerAngles.y;//想要旋转的角度 Y
		float wantHeight = target_tf.position.y + height; //想要的高度

		float currentRotationAngle = transform.eulerAngles.y;//当前旋转角度Y
		float currentHeight = transform.position.y;//当前高度

		currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantRotationAngle, Time.deltaTime * RoDamping);//当前旋转角度差值
		currentHeight = Mathf.Lerp (currentHeight, wantHeight, Time.deltaTime * HeDamping);//当前高度差值

		Quaternion currentRotation = Quaternion.Euler (new Vector3 (0, currentRotationAngle, 0));//当前旋转只Y
		transform.position = target_tf.position;
		transform.position -= currentRotation * Vector3.forward * distance;//与主角的相对位置
		transform.position = new Vector3 (transform.position.x, currentHeight, transform.position.z);//设置位置,关键高度

		Quaternion mR;
		mR = Quaternion.LookRotation (target_tf.position - transform.position);//创建一个旋转
		transform.rotation = Quaternion.Slerp (transform.rotation, mR, Time.deltaTime * RoDamping);//控制跟随人物旋转
		transform.LookAt (target_tf);
	}

}
时间: 2024-10-01 00:55:52

Unity3D第三视觉角色相机控制的相关文章

RPG角色相机控制

using UnityEngine;using System.Collections; public class RPG_Camera : MonoBehaviour { public static RPG_Camera instance; public Transform cameraPivot;//相对人物的位置参考点,可以在任务头顶上 public float distance = 5f; public float distanceMax = 30f; public float mouse

Unity 2D游戏相机控制(水平,竖直,角色居中三种模式)

做2D游戏的时候,无非有三种模式,一种是只有竖直向上,一种是只有水平方向,一种是有水平又有竖直方向,我最近做游戏多关卡模式,不同模式就有着不一样的相机控制,按照平时的写法,也许有很多人就一下子写了三个相机脚本,现在我用了一个枚举类型来控制三个不一样的相机,贴代码: /// <summary> ///CameraCtrl ///Created by Wang YuTing /// </summary> using UnityEngine; using System.Collectio

unity3d 第三人称视角的人物移动以及相机控制

何谓第三人称?就像这样: 用wasd控制人物移动,同时保持在相机的中心.用鼠标右键与滚轮控制相机的角度和距离. 先说一下人物的移动: 首先给作为主角的单位加上 Charactor Controller组件,并调整胶囊型的碰撞体刚好包裹住主角(有其是脚底,除非你想看到你的主角能遁地,或飞行) 然后给你的人物加上控制的脚本~ using UnityEngine; using System.Collections; public class move_controll : MonoBehaviour

Unity之2D游戏界面相机控制

之前写的关于2D游戏界面相机的水平.竖直.以人为中心三种模式的相机控制,我写着写着,总感觉相机适配有点繁琐,而且适配得不怎么好,多平台的时候因为资源有限我也不知道有没有完全适配,今天给大家分享一下我今天写的一个2D游戏场景相机适配,感觉挺好的,有需要的可以用着试试看,接下来我贴上代码: using UnityEngine; using System.Collections; public class CameraControl_2D : MonoBehaviour { // 默认屏幕大小 flo

Unity3D的三种坐标系

来自:http://blog.csdn.net/luxiaoyu_sdc/article/details/13168497 1, World Space(世界坐标): 我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. 2, Screen Space(屏幕坐标): 以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的. 注:鼠

机器人视觉测量与控制

机器人视觉的基本概念 1.摄像机标定(Camera Calibration):对摄像机的内部参数.外部参数进行求取的过程. 2.视觉系统标定(Vision System Calibration):对摄像机和机器人之间关系的确定. 3.手眼系统(Hand-Eye System):又摄像机和机械手构成的机器人视觉系统. 4.Eye-in-Hand:摄像机安装在机械手末端并随机械手一起运动的视觉系统. 5.Eye-to-Hand:摄像机不安装在机械手末端,不随机械手运动的视觉系统. 6.视觉测量(Vi

OpenGL教程翻译 第十四课 相机控制(一)

OpenGL教程翻译 第十四课 相机控制(一) 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) Background 在之前的教程中我们学习了如何在三维场景中的任何地方放置相机.那么我们下一步就应该学着去控制这个相机.相机可以向任何方向自由移动.我们可以用鼠标和键盘控制相机--鼠标控制视口方向,键盘控制我们的位置.这些都和第一人称视角相似.这一章我们主要来学习鼠标和键盘的控制. 我们仍然使用上下左右四个方向键.记住,我们的相机的变换取决于位置.targ

Java编程思想(三) —— 访问权限的控制

之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的. (1)首先是包名 使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类.如: package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } } 自定义的包,通过引入自己的包,以后你就可以使用自己写的方法进行字符串的打

漫话Unity3D(三)

八.预制(Prefab) 这个单独提出来,是因为它太常用了.也是Unity 的核心要素之一.原本Unity中的一个物体是你拖拽一个模型到场景中,或者创建一个几何体,或者灯光地形等,然后设置这个物体的偏移.旋转和缩放.然后绑定好脚本,设置好参数.如果想要第二个相同物体的话,复制一份.但是问题来了,如果有一个问题需要这n个物体都进行修改,那么就要操作n遍.这个时候预制就体现出威力了,你可以拖拽场景中的物体到下方的资源浏览窗口中,这样一个新的预制居创建出来了.场景中的n个物体都是通过预制创建的,那么直