Unity物体几种简单的移动方法

文章介绍了在Unity3D中四种不同的移动物体的方法:1)使用Transform.Translate直接移动;2)通过给Rigidbody添加力实现移动,受物理影响;3)获取水平轴和垂直轴输入移动;4)结合CharacterController实现带重力的角色移动。每种方法适用于不同的场景需求。
摘要由CSDN通过智能技术生成

第一种,通过transform.Translate移动

public class MoveTest01 : MonoBehaviour {
public GameObject cube;
    
void Update () {
    if (Input.GetKey(KeyCode.W))
    {
        cube.transform.Translate(Vector3.forward * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.S))
    {
        cube.transform.Translate(Vector3.back * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.A))
    {
        cube.transform.Translate(Vector3.left * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.D))
    {
        cube.transform.Translate(Vector3.right * Time.deltaTime);
    }
}

}

第二种,通过给Rigdbody添加一个力来实现移动

public class MoveTest02 : MonoBehaviour {
//这个方法会受到物理因素的影响
public GameObject sphere;
public Rigidbody sphereRigdbody;
void Update () {
    if (Input.GetKey(KeyCode.W))
    {
        sphereRigdbody.AddForce(Vector3.forward*15f*Time.deltaTime, ForceMode.Impulse);
    }
    if (Input.GetKey(KeyCode.S))
    {
        sphereRigdbody.AddForce(Vector3.back*15f * Time.deltaTime, ForceMode.Impulse);
    }
    if (Input.GetKey(KeyCode.A))
    {
        sphereRigdbody.AddForce(Vector3.left*15f * Time.deltaTime, ForceMode.Impulse);
    }
    if (Input.GetKey(KeyCode.D))
    {
        sphereRigdbody.AddForce(Vector3.right*15f * Time.deltaTime, ForceMode.Impulse);
    }
}

}

第三种,通过获取水平轴和垂直轴来移动

public class MoveTest03 : MonoBehaviour {
    public int speed = 5;
    public float H;
    public float V;

    void Update () {
        H = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
        V = Input.GetAxis("Vertical") * Time.deltaTime * speed;
        this.gameObject.transform.Translate(H, 0, V);
    }
}

如果用摇杆:
H = joystick.Horizontal * Time.deltaTime * speed;
V = joystick.Vertical * Time.deltaTime * speed;
this.gameObject.transform.Translate(H, 0, V);

第四种CharacterController带重力,并移动角色脚本

using UnityEngine;
using System.Collections;
 
public class Player : MonoBehaviour {
	CharacterController cc;
	public float gravity=0.5f;
	public float speed=1.0f;
	public float jumpSpeed=8.0f;
 
	private Vector3 moveDirection= Vector3.zero;
	// Use this for initialization
	void Start () {
		cc=GetComponent<CharacterController>();
 
	}
	
	// Update is called once per frame
	void Update () {
		if (cc.isGrounded) {
			// We are grounded, so recalculate
			// move direction directly from axes
			//我们着地了,所以直接通过轴重新计算move direction。
			float h = Input.GetAxis ("Horizontal");
			float v = Input.GetAxis ("Vertical");
			if (Mathf.Abs (JoyStick.h) > 0.1f || Mathf.Abs (JoyStick.v) > 0.1f) {
				h = JoyStick.h;
				v = JoyStick.v;
			}
			if (Mathf.Abs (h) > 0.1f || Mathf.Abs (v) > 0.1f) {
 
				Vector3 targetpos = new Vector3 (h, 0, v);
				//print (targetpos);
				transform.LookAt (targetpos + transform.position);
				cc.SimpleMove (transform.forward * speed);
			}
 
		} else {	
			//先落地
			moveDirection.y -= gravity * Time.deltaTime; 
			cc.Move(moveDirection * Time.deltaTime);
			//print (Time.deltaTime);	
		}
 
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值