unity3d 移动与旋转 2

这次的代码示例是配合动画系统使用的

4.3新的动画系统允许动画带有位置偏移,只需要在Animator组件中勾选Apply Root Motion我们就可以使用它了。


using UnityEngine;
using System.Collections;

public class DonePlayerMovement : MonoBehaviour
{
public AudioClip shoutingClip; // Audio clip of the player shouting.
public float turnSmoothing = 15f; // A smoothing value for turning the player.
public float speedDampTime = 0.1f; // The damping for the speed parameter

private Animator anim; // Reference to the animator component.
private DoneHashIDs hash; // Reference to the HashIDs.

void Awake ()
{
// Setting up the references.
anim = GetComponent<Animator>();
hash = GameObject.FindGameObjectWithTag(DoneTags.gameController).GetComponent<DoneHashIDs>();

// Set the weight of the shouting layer to 1.
anim.SetLayerWeight(1, 1f);
}

void FixedUpdate ()
{
// Cache the inputs.
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
bool sneak = Input.GetButton("Sneak");

MovementManagement(h, v, sneak);
}

void Update ()
{
// Cache the attention attracting input.
bool shout = Input.GetButtonDown("Attract");

// Set the animator shouting parameter.
anim.SetBool(hash.shoutingBool, shout);

AudioManagement(shout);
}

void MovementManagement (float horizontal, float vertical, bool sneaking)
{
// Set the sneaking parameter to the sneak input.
anim.SetBool(hash.sneakingBool, sneaking);

// If there is some axis input...
if(horizontal != 0f || vertical != 0f)
{
// ... set the players rotation and set the speed parameter to 5.5f.
Rotating(horizontal, vertical);
anim.SetFloat(hash.speedFloat, 5.5f, speedDampTime, Time.deltaTime);
}
else
// Otherwise set the speed parameter to 0.
anim.SetFloat(hash.speedFloat, 0);
}

void Rotating (float horizontal, float vertical)
{
// Create a new vector of the horizontal and vertical inputs.
Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);

// Create a rotation based on this new vector assuming that up is the global y axis.
Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up);

// Create a rotation that is an increment closer to the target rotation from the player‘s rotation.
Quaternion newRotation = Quaternion.Lerp(rigidbody.rotation, targetRotation, turnSmoothing * Time.deltaTime);

// Change the players rotation to this new rotation.
rigidbody.MoveRotation(newRotation);
}

void AudioManagement (bool shout)
{
// If the player is currently in the run state...
if(anim.GetCurrentAnimatorStateInfo(0).nameHash == hash.locomotionState)
{
// ... and if the footsteps are not playing...
if(!audio.isPlaying)
// ... play them.
audio.Play();
}
else
// Otherwise stop the footsteps.
audio.Stop();

// If the shout input has been pressed...
if(shout)
// ... play the shouting clip where we are.
AudioSource.PlayClipAtPoint(shoutingClip, transform.position);
}
}

unity3d 移动与旋转 2

时间: 2024-10-06 02:37:12

unity3d 移动与旋转 2的相关文章

Unity3D 移动和旋转

移动和旋转 using UnityEngine; using System.Collections; /* * Adminer:sun2955 * http:www.yinghy.com * */ public class Move : MonoBehaviour { private float moveSpeed = 7; private float rotateSpeed = 150; // 使用进行初始化 void Start () { } //每一帧都会调用该函数 void Update

Unity3D 控制物体旋转详解 —— 自身绕轴旋转、缓慢旋转、鼠标控制旋转、欧拉数和四元数的关系

问题描述:昨天需要实现一个功能是根据指令左转90度或者右转90度,当时脑汁可能是有浆糊吧,居然要用直接赋值rotation,这样一来就要牵扯到eulerAngles和四元数的Euler函数了,结果忙活了好久没解决,bug层出,今天经过详细了解,解决了相关问题,一并把其他关于角度和旋转的知识点整理出来. 一.问题的解决:如何让物体绕自身轴旋转 直接上关键代码: player_cube.Rotate(-90, 0, 0); player_cube是获取的需要旋转的物体的Transform,其中-90

Unity3D 如何图形问题修正旋转模型已导入?

 如何纠正旋转模型被导入? 一些立体艺术资源包导出其模式,以便 Z 轴向上.Unity 大多数标准的脚本中假定的三维世界 Y 轴代表了.在 Unity 比改动脚本使其契合easy得多. Z 轴朝上的模型 假设可能的话,建议导入前在三维建模应用程序中修正模型,使 Y 轴朝上. 假设不可行,能够多加入一个父变换在 Unity 中进行修正: 使用游戏对象 (GameObject)->创建空对象 (Create Empty) 菜单来创建一个空游戏对象. 定位新游戏对象.确保其位于网格中心或是不论什么

【转载】Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放

前几篇文章介绍了很多Unity3D引擎自身的一些问题, 今天我们在回到IOS设备上讨论一些触摸屏幕手势,本章的目标是通过触摸iPhone屏幕手势 实现模型左右的旋转,与模型的缩放. 大家想一想模型的旋转,实际上是镜头的旋转.模型的缩放实际上是镜头Z轴方向的坐标.那么实现本章的内容只需要控制镜头的位置方可实现. 我们创建一个简单的游戏平面, 然后平面中放一个箱子做为旋转缩放的参照物.如下图所示,选中摄像机,给摄像机添加一个脚本名称为Move. 脚本中有一个参数 Target,它的作用是设置摄像头旋

Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会

在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj + zk + w ) = (x,y,z,w) 1.  http://en.wikipedia.org/wiki/Quaternion  有四元数的定义     2.  http://en.wikipedia.org/wiki/Quaternions_%26_spatial_rotation   有

unity3d模型旋转和模型导出obj

本文好多内容,来自互联网. 环境:unity3d 4.1, unity3d中写脚本实现模型的颜色变化和旋转,注意如果模型设置为static是旋转不了的. 功能描述:鼠标落到模型,模型颜色变化,按下鼠标模型开始旋转. 脚本代码如下: using UnityEngine; using System.Collections; public class test : MonoBehaviour { bool tri1=false; bool tri2=false; Color orgColor; //

unity3d 触屏多点触控(旋转与缩放)

unity3d 触屏多点触控(旋转与缩放) /*Touch OrbitProgrammed by: Randal J. Phillips (Caliber Mengsk)Original Creation Date: 12/16/2011Last Updated:                   12/16/2011Desctiption: Simple orbit by one touch and drag, as well as pinch to zoom with two finger

unity3d旋转摄像机脚本

void Update () { if(Input.GetMouseButton(1)) { if (axes == RotationAxes.MouseXAndY) { // Read the mouse input axis rotationX += Input.GetAxis("Mouse X") * sensitivityX; rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationX =

Unity3d修炼之路:对一个简单对象Cube的移动 旋转和缩放

#pragma strict private var m_nFrameCount : int = 0; private var m_isSubCount : int = 0;//false function Update () { var fSpeed : float = 1.0f; var fAngle : float = 50.0f; var pCurrentPoint : Vector3 = transform.position; var pAxis : Vector3 = new Vec