方法一:把脚本挂到主角上,实现主角前后左右移动和跳跃
注意:主角需要加Rigidbody 来实现物理特性。并锁定X和Z轴的旋转,防止模型的轴错乱。
using UnityEngine;
public class JumpAndGravity : MonoBehaviour
{
public float moveSpeed = 1f;
public float jumpForce = 1f;
private bool isGrounded;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(horizontal, 0.0f, vertical) * moveSpeed * Time.deltaTime;
transform.Translate(movement);
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
}
void OnCollisionEnter(Collision collision)
{
isGrounded = true;
}
void OnCollisionExit(Collision collision)
{
isGrounded = false;
}
}
方法二:AD控制左右旋转,WS控制前后移动,不考虑跳跃的移动代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class tankrun : MonoBehaviour
{
Rigidbody rb = null;
float moveSpeed = 10;
float angularSpeed = 10;
void Start()
{
rb = transform.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
rb.velocity = transform.forward * verticalInput * moveSpeed;
rb.angularVelocity = new Vector3(0,1,0) * horizontalInput * angularSpeed;
}
}
-----------------------------更新了摄像头跟随和shift键加速功能----------------------------
using UnityEngine;
public class JumpAndGravity : MonoBehaviour
{
public float moveSpeed = 1f;
public float jumpForce = 1f;
private bool isGrounded;
private Rigidbody rb;
public GameObject Camera;
Vector3 v3 = Vector3.zero;
void Start()
{
rb = GetComponent<Rigidbody>();
v3 = Camera.transform.position - transform.position;
}
void Update()
{
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
if (Input.GetKeyDown(KeyCode.LeftShift)){ moveSpeed = moveSpeed * 2; }
if (Input.GetKeyUp(KeyCode.LeftShift)){ moveSpeed = moveSpeed / 2; }
Vector3 movement = new Vector3(horizontal, 0.0f, vertical) * moveSpeed * Time.deltaTime;
transform.Translate(movement);
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{ rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); }
Camera.transform.position = transform.position + v3;
}
void OnCollisionEnter(Collision collision)
{
isGrounded = true;
}
void OnCollisionExit(Collision collision)
{
isGrounded = false;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class tankrun : MonoBehaviour
{
Rigidbody rb = null;
public float moveSpeed = 10;
public float angularSpeed = 10;
public GameObject Camera;
Vector3 v3= Vector3.zero;
void Start()
{
rb = transform.GetComponent<Rigidbody>();
v3 =Camera.transform.position - transform.position;
}
// Update is called once per frame
void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
if (Input.GetKeyDown(KeyCode.LeftShift)){ moveSpeed = moveSpeed * 2; }
if (Input.GetKeyUp(KeyCode.LeftShift)){ moveSpeed = moveSpeed / 2; }
rb.velocity = transform.forward * verticalInput * moveSpeed;
rb.angularVelocity = new Vector3(0,1,0) * horizontalInput * angularSpeed;
Camera.transform.position = transform.position + v3;
}
}