C# 如何在无休止的跑步者游戏中随火箭移动相机
目前,我在unity中通过c#脚本更改主摄像头的位置时遇到问题。我正试图随着火箭改变相机的位置。因此,理想情况下,火箭应该在屏幕左侧有一点偏移。它应该在玩游戏的过程中跟随 这是我的相机脚本,当我按play时,它应该跟随unity内部的目标“TheRocket”C# 如何在无休止的跑步者游戏中随火箭移动相机,c#,unity3d,C#,Unity3d,目前,我在unity中通过c#脚本更改主摄像头的位置时遇到问题。我正试图随着火箭改变相机的位置。因此,理想情况下,火箭应该在屏幕左侧有一点偏移。它应该在玩游戏的过程中跟随 这是我的相机脚本,当我按play时,它应该跟随unity内部的目标“TheRocket” using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraScript : MonoBehavio
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraScript : MonoBehaviour {
Camera mainCam;
public Transform target;
public float distance = 15.0f;
public float cameraY = 1.0f;
// Update is called once per frame
void Update () {
Vector3 pos = transform.position;
pos.z = target.position.z - distance;
pos.x = target.position.x + 18;
}
void LateUpdate () {
mainCam = Camera.main;
Vector3 temp = mainCam.transform.position;
temp.y = cameraY;
}
}
我的控件类如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controls : MonoBehaviour {
public float speed = 8.0f;
public float jumpspeed = 20.5f;
public float gravity = 20.0f;
Vector3 moveDirection = Vector3.zero;
// Update is called once per frame
void Update () {
CharacterController controller = GetComponent<CharacterController>();
if(controller.isGrounded) {
moveDirection = new Vector3(0, 0, Input.GetAxis("Horizontal") + 3);
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
}
if(Input.GetButtonDown("Jump")) {
moveDirection.y += jumpspeed;
}else{
if(Input.GetButtonDown("Jump")){
moveDirection.y += jumpspeed;
}
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类控制:单一行为{
公共浮子速度=8.0f;
公共浮子跳跃速度=20.5f;
公共浮子重力=20.0f;
Vector3移动方向=Vector3.0;
//每帧调用一次更新
无效更新(){
CharacterController=GetComponent();
if(controller.isground){
moveDirection=新矢量3(0,0,Input.GetAxis(“水平”)+3);
moveDirection=transform.TransformDirection(moveDirection);
移动方向*=速度;
}
if(Input.GetButtonDown(“跳转”)){
移动方向。y+=跳跃速度;
}否则{
if(Input.GetButtonDown(“跳转”)){
移动方向。y+=跳跃速度;
}
}
moveDirection.y-=重力*时间增量;
控制器移动(移动方向*时间增量);
}
}
我真的不知道我做错了什么。我将本教程用作参考:
希望有人能发现问题隐藏在哪里
截图
场景
场景播放(应跟随火箭并被放大
主摄像头检查器视图
TheRocket
根据这些信息很难判断。但我的第一个猜测是,您没有将摄像头连接到火箭上,也没有适当地分配变量
在Unity中,您可以将相机拖动到火箭上,使相机成为火箭的子对象。您没有在脚本中的任何位置设置相机位置,您只创建了相机位置的副本,并将其放置到
pos
变量中。然后需要将相机位置设置为与您的变量相等
这应该是您所需要的全部:
void LateUpdate()
{
Vector3 pos = target.transform.position;
pos.z = target.position.z - distance;
pos.x = target.position.x + 18;
Camera.main.transform.position = pos;
}
以下是要遵循的步骤: 1-将火箭拖到场景中 2-创建一个摄影机并将其拖动为火箭的子对象 3-将相机放置在你想面对火箭的任何位置(如屏幕截图中的位置) 4-将火箭保存为预制件,并在每次要发射火箭时实例化它,相机将连接到火箭
上周我在一个火箭发射器上做了这件事,火箭发射后,一个摄像头一直跟踪它直到它爆炸我先描述一下你遇到的实际问题…@Robii当然。我添加了一些Boilet你需要给出正确答案吗?我已经将火箭连接到unity inspector中的目标变量上。解释一下问题是。相机根本不移动吗?你经历了什么行为?可能包括unity层次结构的屏幕截图。还要确保你已将脚本附加到适当的对象。请参阅更新的问题。它不移动。它应该与火箭一起移动。你还必须在func中进行类似的更正谢谢你,巴德。更新功能有什么错误?你可以删除更新中的东西。我的意思是你不需要更新和最新更新。你所需要的就是我上面的东西