Unity koşma oyunu yapma

  • Konuyu başlatan eqNd
  • Başlangıç Tarihi
  • Mesaj 13
  • Görüntüleme 2B

eqNd

Hectopat
Katılım
19 Ekim 2019
Mesajlar
233
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar oyun yapacağım, running oyunu. Düğmeye basınca koşmasını istiyorum sadece. Nasıl yapabilirim?
 
Böyle bu şekilde olmaz. Kodlama tarafını mı soruyorsun? Animasyonu mu soruyorsun? Grafik tasarımını mı soruyorsun yoksa oyun motorunu mu soruyorsun? Neyi sual edersin o belli değil. Bunlar bir anlık hevesle hemen 2 dk da yapılacak işler değil heves etmişsin belli. Şimdi oturup düzgünce ilmini alıp sabrın varsa biraz da vaktini vererek yapabileceğin kaynağı atıyorum;

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Bu hızlandırılmış derslerin hepsini izliyorsun ondan sonra yapmaya başlıyorsun.
 
Yazılım kısmı tabii ki ekrana basınca koşmasını istiyorum. Çok fazla kaynak bulamadım
 
Düğme ekleyeceksin, basılı tutulduğunda koşma fonksiyonu çalışacak. Saldığında bırakacak. Örnek olarak yapabilirim isterseniz.
 
2 ya da 3 boyutlu olup olmayacağını belirtmemişsiniz. Şuraya son yaptığım hareket kontrolcüsünü ekliyorum 3B için:

[CODE lang="csharp" title="SimpleMovement"]using UnityEngine;

public class SimpleMovement : MonoBehaviour
{
private static SimpleMovement _instance;
private Rigidbody rb;
private Transform cam;
private Vector3 initialScale;

[SerializeField]public bool Can_jump = false;
[SerializeField]public bool Is_Moving = false;
[SerializeField]public bool Is_Running = false;

[SerializeField]private float jumpForce = 1000f;
[SerializeField]private float speed = 15f;
[SerializeField]private float run_speed = 30f;
[SerializeField]private float temp_speed = 15f;
[SerializeField]private float sensitivity = 150;
[SerializeField]private float headRotation = 90f;
[SerializeField]private float headRotationLimit = 90f;

private static SimpleMovement Instance
{
get { return _instance; }
}
private void Awake()
{
rb = gameObject.GetComponent<Rigidbody>();
cam = Camera.main.transform;
}
private void Start()
{
initialScale = transform.localScale;
cam.position = gameObject.transform.position + new Vector3(0, initialScale.y/2, 0);
cam.transform.parent = gameObject.transform;
temp_speed = speed;
run_speed = speed * 2;
}
private void OnCollisionStay(Collision collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
Can_jump = true;
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
Can_jump = false;
}
}
private void Jump()
{
if(Input.GetKeyDown(KeyCode.Space))
{
if(Can_jump)
{
rb.AddForce(transform.up * jumpForce * rb.mass, ForceMode.Force);
Can_jump = false;
}
}
}
private void Crouch()
{
if (Input.GetKey(KeyCode.LeftControl))
{
transform.localScale = Vector3.Lerp(transform.localScale, initialScale / 2, Time.fixedDeltaTime * 2);
}
else
{
transform.localScale = Vector3.Lerp(transform.localScale, initialScale, Time.fixedDeltaTime * 2);
}
}
private void MouseLook()
{
float x = Input.GetAxis("Mouse X") * sensitivity * Time.fixedDeltaTime;
float y = Input.GetAxis("Mouse Y") * sensitivity * Time.fixedDeltaTime * -1f;
transform.Rotate(0f, x, 0f);
headRotation += y;
headRotation = Mathf.Clamp(headRotation, -headRotationLimit, headRotationLimit);
cam.localEulerAngles = new Vector3(headRotation, 0f, 0f);
}

private void Run()
{
if(Is_Moving && Input.GetKey(KeyCode.LeftShift))
{
speed = run_speed;
Is_Running = true;
}
else
{
speed = temp_speed;
Is_Running = false;
}
}
private void Movement()
{
float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");
Vector3 moveBy = transform.right * x + transform.forward * z;
float mag = moveBy.sqrMagnitude;

if (mag != 0)
{
Is_Moving = true;
}
else
{
Is_Moving = false;
}

if (Can_jump)
{
rb.MovePosition(transform.position + moveBy.normalized * speed * Time.fixedDeltaTime);
}
else
{
rb.MovePosition(transform.position + moveBy.normalized * speed * Time.fixedDeltaTime / 1.4f);
Is_Moving = true;
}
}
private void FixedUpdate()
{
Movement();
}
private void Update()
{
MouseLook();
Jump();
Crouch();
Run();
}
}[/CODE]
 
2 ya da 3 boyutlu olup olmayacağını belirtmemişsiniz. Şuraya son yaptığım hareket kontrolcüsünü ekliyorum 3B için:

[CODE lang="csharp" title="SimpleMovement"]using UnityEngine;

public class SimpleMovement : MonoBehaviour.
{
private static SimpleMovement _instance;
private Rigidbody rb;
private Transform cam;
private Vector3 initialScale;

[SerializeField]public bool Can_jump = false;
[SerializeField]public bool Is_Moving = false;
[SerializeField]public bool Is_Running = false;

[SerializeField]private float jumpForce = 1000f;
[SerializeField]private float speed = 15f;
[SerializeField]private float run_speed = 30f;
[SerializeField]private float temp_speed = 15f;
[SerializeField]private float sensitivity = 150;
[SerializeField]private float headRotation = 90f;
[SerializeField]private float headRotationLimit = 90f;

private static SimpleMovement Instance.
{
get { return _instance; }
}
private void Awake()
{
rb = gameObject.GetComponent<Rigidbody>();
cam = Camera.main.transform;
}
private void Start()
{
initialScale = transform.localScale;
cam.position = gameObject.transform.position + new Vector3(0, initialScale.y/2, 0);
cam.transform.parent = gameObject.transform;
temp_speed = speed;
run_speed = speed * 2;
}
private void OnCollisionStay(Collision collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
Can_jump = true;
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
Can_jump = false;
}
}
private void Jump()
{
if(Input.GetKeyDown(KeyCode.Space))
{
if(Can_jump)
{
rb.AddForce(transform.up * jumpForce * rb.mass, ForceMode.Force);
Can_jump = false;
}
}
}
private void Crouch()
{
if (Input.GetKey(KeyCode.LeftControl))
{
transform.localScale = Vector3.Lerp(transform.localScale, initialScale / 2, Time.fixedDeltaTime * 2);
}
else.
{
transform.localScale = Vector3.Lerp(transform.localScale, initialScale, Time.fixedDeltaTime * 2);
}
}
private void MouseLook()
{
float x = Input.GetAxis("Mouse X") * sensitivity * Time.fixedDeltaTime;
float y = Input.GetAxis("Mouse Y") * sensitivity * Time.fixedDeltaTime * -1f;
transform.Rotate(0f, x, 0f);
headRotation += y;
headRotation = Mathf.Clamp(headRotation, -headRotationLimit, headRotationLimit);
cam.localEulerAngles = new Vector3(headRotation, 0f, 0f);
}

private void Run()
{
if(Is_Moving && Input.GetKey(KeyCode.LeftShift))
{
speed = run_speed;
Is_Running = true;
}
else.
{
speed = temp_speed;
Is_Running = false;
}
}
private void Movement()
{
float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");
Vector3 moveBy = transform.right * x + transform.forward * z;
float mag = moveBy.sqrMagnitude;

if (mag != 0)
{
Is_Moving = true;
}
else.
{
Is_Moving = false;
}

if (Can_jump)
{
rb.MovePosition(transform.position + moveBy.normalized * speed * Time.fixedDeltaTime);
}
else.
{
rb.MovePosition(transform.position + moveBy.normalized * speed * Time.fixedDeltaTime / 1.4f);
Is_Moving = true;
}
}
private void FixedUpdate()
{
Movement();
}
private void Update()
{
MouseLook();
Jump();
Crouch();
Run();
}
}[/CODE]

Bu Mobile için mi peki?
 
Son düzenleyen: Moderatör:
[CODE lang="csharp" title="En Basit Yöntem" highlight="8"] float speed = 3f;

private void Update()
{
if(Input.GetMouseButton(0))

{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}[/CODE]


Yeni bir kod dosyası açıp bunu yazdığınızda ve bunu karakterinize attığınızda çalışacaktır. Çok basit yaptım. Mouse ile tıklandığında ilerliyor.
 
[CODE lang="csharp" title="En Basit Yöntem" highlight="8"] float speed = 3f;

private void Update()
{
if(Input.GetMouseButton(0))

{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}[/CODE]

Yeni bir kod dosyası açıp bunu yazdığınızda ve bunu karakterinize attığınızda çalışacaktır. Çok basit yaptım. Mouse ile tıklandığında ilerliyor.

Mobil de çalışacaktır büyük ihtimalle o zaman
 

Yeni konular

Geri
Yukarı