unity3d 第三人称视角的人物移动以及相机控制
何谓第三人称?就像这样:
using UnityEngine;
using System.Collections; public class move_controll : MonoBehaviour {
Transform m_transform,m_camera;//人物自己以及相机的对象
CharacterController controller;//Charactor Controller组件
public float MoveSpeed = 20.0f;//移动的速度
// Use this for initialization
void Start () {
m_transform = this.transform;//尽量不要再update里获取this.transform,而是这样保存起来,这样能节约性能
m_camera = GameObject.FindGameObjectWithTag ("MainCamera").transform;//
controller=GetComponent();
}
// Update is called once per frame
void Update () {
if ((Input.GetKey (KeyCode.W)) || (Input.GetKey (KeyCode.S)) || (Input.GetKey (KeyCode.A)) || (Input.GetKey (KeyCode.D))) {
transform.GetComponent().SetFloat("speed", "run");//将人物的动画改为移动状态,这里有个问题,就是动画组件的获取也要在update里获取,请读者自行修改吧
if (Input.GetKey (KeyCode.W)) {
//根据主相机的朝向决定人物的移动方向,下同
controller.transform.eulerAngles = new Vector3 (, m_camera.transform.eulerAngles.y, );
} if (Input.GetKey (KeyCode.S)) {
controller.transform.eulerAngles = new Vector3 (, m_camera.transform.eulerAngles.y+180f, );
} if (Input.GetKey (KeyCode.A)) {
controller.transform.eulerAngles = new Vector3 (, m_camera.transform.eulerAngles.y+270f, );
} if (Input.GetKey (KeyCode.D)) {
controller.transform.eulerAngles = new Vector3 (, m_camera.transform.eulerAngles.y+90f, );
} controller.Move(m_transform.forward * Time.deltaTime * MoveSpeed);
}
else
//静止状态
transform.GetComponent().SetFloat("speed", "stand");
if (Input.GetKey (KeyCode.Q)) {
transform.Translate (Vector3.up * Time.deltaTime * MoveSpeed);
}
if (!controller.isGrounded) {
//模拟简单重力,每秒下降10米,当然你也可以写成抛物线
controller.Move(new Vector3(,-10f*Time.deltaTime,));
}
}
然后是相机控制的脚本,从别的地方抄的,应该也不难理解,绑定在场景主相机上即可:
using UnityEngine; public class CameraOrbit : MonoBehaviour
{
public Transform pivot; // the object being followed
public Vector3 pivotOffset = Vector3.zero; // offset from target's pivot
public Transform target; // like a selected object (used with checking if objects between cam and target) public float distance = 10.0f; // distance from target (used with zoom)
public float minDistance = 2f;
public float maxDistance = 15f;
public float zoomSpeed = 1f; public float xSpeed = 250.0f;
public float ySpeed = 120.0f; public bool allowYTilt = true;
public float yMinLimit = 30f;
public float yMaxLimit = 80f; private float x = 0.0f;
private float y = 0.0f; private float targetX = 0f;
private float targetY = 0f;
private float targetDistance = 0f;
private float xVelocity = 1f;
private float yVelocity = 1f;
private float zoomVelocity = 1f; void Start()
{
var angles = transform.eulerAngles;
targetX = x = angles.x;
targetY = y = ClampAngle(angles.y, yMinLimit, yMaxLimit);
targetDistance = distance;
} void LateUpdate()
{
if (pivot)
{
float scroll = Input.GetAxis("Mouse ScrollWheel"); if (scroll > 0.0f) targetDistance -= zoomSpeed;
else if (scroll < 0.0f) targetDistance += zoomSpeed;
targetDistance = Mathf.Clamp(targetDistance, minDistance, maxDistance); // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// right mouse button must be held down to tilt/rotate cam
// or player can use the left mouse button while holding Ctr
if (Input.GetMouseButton() || (Input.GetMouseButton() && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) ))
{
targetX += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
if (allowYTilt)
{
targetY -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
targetY = ClampAngle(targetY, yMinLimit, yMaxLimit);
}
}
x = Mathf.SmoothDampAngle(x, targetX, ref xVelocity, 0.3f);
if (allowYTilt) y = Mathf.SmoothDampAngle(y, targetY, ref yVelocity, 0.3f);
else y = targetY;
Quaternion rotation = Quaternion.Euler(y, x, );
distance = Mathf.SmoothDamp(distance, targetDistance, ref zoomVelocity, 0.5f); // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// apply
Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + pivot.position + pivotOffset;
transform.rotation = rotation;
transform.position = position; }
} private float ClampAngle(float angle, float min, float max)
{
if (angle < -) angle += ;
if (angle > ) angle -= ;
return Mathf.Clamp(angle, min, max);
}
}
unity3d 第三人称视角的人物移动以及相机控制的更多相关文章
- Unity3D第三人称摄像机控制脚本
好久没有敲Blog该.感谢您的留言.注意.私人信件和其他支持,但我似乎没有办法继续自己曾经写了一篇博客系列,因为我在网上找到有关unity3D太少的内容,U3D相关的文章!.. 第三人称视角 第三人称 ...
- Unity 3D还原Scene场景、市面多数游戏视角高度自定义、第三人称视角分离功能:平移、拖动、看向中心等
Unity视角的高度自定义 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- Unity 3D第三人称视角、用途广泛限定角度(视角不能360度翻转)
Unity第三人称相机视角控制 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- Unity3D中的第三人称镜头的脚本控制
原地址:http://blog.csdn.net/mobanchengshuang/article/details/27591271 好久没有敲Blog了,谢谢大家的留言.关注.私信等支持,但是我好像 ...
- 【Unity】第11章 第三人称角色控制器和碰撞体
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 第三人称视角控制器涉及的相关概念有: 1.刚体(Rigidbody). 2.碰撞体(Collider).包括球体碰撞体( ...
- UE4中创建第一、第三人称角色,并进行角色间的切换
在游戏中经常会出现第一人称和第三人称的视角切换场景,笔者在这里简单介绍如何进行这步操作. 1.创建角色 在内容浏览器中添加2个Character蓝图,分别命名为FirstPersonalCharact ...
- Opengl绘制我们的小屋(四)第三人称漫游
本节内容是在第一人称漫游上完成的,请先了解上文中第一人称漫游的实现. 这一节讲下第三人称漫游是如何实现,第三人称,简单来说,就是在你后面会跟着一台摄像机顺着你拍摄. 先看一下失败的尝试.这个方法是把人 ...
- [UE4]使用Is Locally Controlled解决第一人称和第三人称武器位置问题
一.在第一人称网络游戏中,自己看到的是第一人称,其他玩家看到的自己是第三人称. 二.由于第一人称和第三人称是不同的模型,所以枪在模型上面的插槽位置也会不一样. 三.在武器挂载在人物模型的使用,使用“I ...
- Unity小知识---第三人称中设置摄像机的简单跟随
第三人称中设置摄像机的简单跟随 private Transform player; private Vector3 offect; private float smooothing = 3f; //插 ...
随机推荐
- hibernate学习(5)——一对多关系表达
一对多实现 1. 实现类 package com.alice.hibernate02.vo; import java.util.HashSet; import java.util.Set; publi ...
- logoff remote desktop sessions via command line tools
This trick I learned from my one of ex-college. In Windows servers, only two remote desktop session ...
- RSA+DES动态加密
RSA可以用于加密,其加密强度很高,被人攻克的可能性极小.但是其加密速度很慢,如果对一段长数据进行加密是不现实的.因为无论加密还是解密都需要很长时间.所以通常是先用对称加密算法(DES, AES等)对 ...
- Linux图形&命令行界面切换
1.实时切换 1.1 命令行->图形 startx 1.2 图形->命令行 Ctrl+Alt+F1--F6 2.启动默认 2.1 启动进入命令行 修改/etc/inittab文件 &quo ...
- django--一对多,多对多查询
假设有表的关系如下: class Classes(models.Model): name = models.CharField(max_length=32) institute = models.Ch ...
- 用户引导页--- ScrollView的使用
一.首先第一步,写好用户轮播页的viewController,比如叫做LVUserGuideVC,关键代码是配置和scrollView和pageControl. (1)scrollView的设置 se ...
- 【爬虫】BeautifulSoup之爬取百度贴吧的帖子
在网上看到爬百度贴吧的例子,仿照写了一个用BeautifulSoup实现的,直接上代码吧 #coding:gbk import urllib2 from bs4 import BeautifulSou ...
- highcharts 插件问题
Uncaught TypeError: $(...).highcharts is not a function 解决方法: $('#container').highcharts({ colors: [ ...
- 使用MaskFilter
使用MaskFilter MaskFilter类可以为Paint分配边缘效果. 对MaskFilter的扩展可以对一个Paint边缘的alpha通道应用转换.Android包含了下面几种MaskFil ...
- php程序员绝不能违背的安全铁则
作为PHP程序员,特别是新手,对于互联网的险恶总是知道的太少,对于外部的入侵有很多时候是素手无策的,他们根本不知道黑客是如何入侵的.提交入侵.上传漏洞.sql 注入.跨脚本攻击等等.作为最基本的防范你 ...