![](/img/trans.png)
[英]Unity C# use Transform.RotateAround with touch to move camera around target
[英]Unity3D C#. Using the transform.RotateAround() function while keep the distance between two objects constant
我正在尝试在Unity 3D中练习制作第三人称控制器。 我是一个初学者,我对如何使我的控制器功能完全感到困惑。 我一直在做几个小时的研究,但我找不到任何线索似乎回答了我的问题。 我有两个脚本,一个CameraController和一个CharacterController。 我的代码如下。
CameraController:
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
public GameObject target;
public float rotationSpeed;
Vector3 offset;
Vector3 CameraDestination;
// Use this for initialization
void Start () {
offset = transform.position - target.transform.position;
CameraDestination = offset + transform.position;
rotationSpeed = 50f;
transform.position = CameraDestination;
}
// Update is called once per frame
void Update () {
transform.LookAt (target.transform.position);
float h = Input.GetAxisRaw ("Horizontal");
transform.RotateAround (target.transform.position, Vector3.up, Time.deltaTime * h * rotationSpeed);
target.transform.Rotate (0f, Time.deltaTime * h * rotationSpeed, 0f);
}
}
CharacterController:
using UnityEngine;
using System.Collections;
public class CharController : MonoBehaviour {
public float playerSpeed = 10f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
float Vertical = Input.GetAxis("Vertical");
transform.position += transform.forward * Time.deltaTime * playerSpeed * Vertical;
}
}
按下左箭头键或右箭头键时,播放器和相机都会旋转。 如果我尝试将相机作为儿童安装到播放器上,相机的旋转会变得混乱,但如果我没有将相机连接到播放器,相机会停止跟随播放器。 如果我尝试将相机设置到相对于播放器的特定位置,它将停止围绕播放器旋转,就像它打算做的那样。 我根本无法想出一个有效的方法。谢谢你提前回答我的问题!
当我谈到这个时,我喜欢有一个空的gameObject,它有2个孩子,相机,然后是角色的网格。
> CharacterController
> Camera
> CharacterRig
当你想旋转角色时,旋转角色控制器,然后当你想围绕角色旋转相机时,将你的代码更改为:
transform.RotateAround (CharacterRig.transform.position, Vector3.up, Time.deltaTime * h * rotationSpeed);
这将允许您的相机旋转,无论任何角色动画,并应解决您的问题。 如果您想稍后实现动画,这一点非常重要,因为您不希望将相机设置为动画内容,因为它将随动画一起移动。
Ps你的代码看起来很好。 确定它纯粹是你设置游戏对象的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.