我需要快速修改2d平台(占位符)代码的技巧,以满足我对unity的需求.我觉得这些不合适
本文关键字:unity 满足 需求 不合适 2d 修改 平台 代码 占位符 | 更新日期: 2023-09-27 18:02:42
我目前在学校学习c#,我是一个长期的游戏玩家。我刚刚用Unity完成了一个游戏开发课程,现在我正试图通过试错来制作一款游戏。
目前我对c#有基本的了解,只是不太实用。在我进一步深入课程之前,我需要借用代码作为占位符。
这段代码是作为一个基本的播放器控制器脚本提供给我的。我打算使用它,直到我可以从头开始创建自己的控制器代码,这将只是原型和调试。下面的代码(除了拼写半径错误)有两个主要的问题,我已经尝试修复我喜欢的,但我一直破坏代码。
问题1(关于控制输入)
我不想用方向键控制游戏。我想用方向键左右移动。我想用'z'代替'w'作为我的跳跃键。
问题2(关于跳后速度)
当角色跳跃时,它会一直朝着跳跃前行走的方向浮动。我希望它在空中是静止的,除非方向键在空中被按下。
我希望这个游戏以类似于IWBTB或IWBTG的方式控制,而我创建关卡并完成我的课程。
代码如下:
(我也愿意接受任何具有相同功能但没有动画的新代码。)
using UnityEngine;
using System.Collections;
public class playercontroller : MonoBehaviour {
public float speedForce= 50f;
public Vector2 jumpVector;
public bool isGrounded;
float speed;
public Transform grounder;
public float radiuss;
public LayerMask ground;
Animator anim;
// Use this for initialization
void Start () {
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.A)) {
speed = isGrounded ? speedForce : speedForce*0.7f;
GetComponent<Rigidbody2D>().velocity = new Vector2 (-speed, GetComponent<Rigidbody2D>().velocity.y);
transform.localScale = new Vector3 (-1, 1, 1);
anim.SetInteger ("AnimationState", 1);
} else if (Input.GetKey (KeyCode.D)) {
speed = isGrounded ? speedForce : speedForce*0.7f;
GetComponent<Rigidbody2D>().velocity = new Vector2 (speed, GetComponent<Rigidbody2D>().velocity.y);
transform.localScale = new Vector3 (1, 1, 1);
anim.SetInteger ("AnimationState", 1);
} else if(isGrounded)
{
GetComponent<Rigidbody2D>().velocity = new Vector2 (0, GetComponent<Rigidbody2D>().velocity.y);
anim.SetInteger("AnimationState", 0);
}
isGrounded = Physics2D.OverlapCircle (grounder.transform.position, radiuss, ground);
if (Input.GetKey (KeyCode.W) && isGrounded == true) {
GetComponent<Rigidbody2D>().AddForce (jumpVector, ForceMode2D.Force);
}
}
void OnDrawGizmos()
{
Gizmos.color = Color.white;
Gizmos.DrawWireSphere (grounder.transform.position, radiuss);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "deadly") {
Debug.Log("Dead!");
Application.LoadLevel(0);
}
}
void OnTriggerStay2D(Collider2D other)
{
if (other.tag == "deadly") {
Debug.Log("Dead!");
Application.LoadLevel(0);
}
}
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "deadly") {
Debug.Log("Dead!");
Application.LoadLevel(0);
}
}
}
我不想使用借来的代码。这只能作为关卡设计的占位符。我是c#语言的新手,但我计划在我生命中的某个时刻熟练使用它。
谢谢
问题1
修改下面的代码
if (Input.GetKey (KeyCode.A))
if(Input.GetKey(KeyCode.LeftArrow))
和这个
if (Input.GetKey (KeyCode.D))
if(Input.GetKey(KeyCode.RightArrow))
我想你现在可以自己处理"z"部分了。
问题2
添加以下代码
GetComponent<Rigidbody2D>().velocity = new Vector2 (0, GetComponent<Rigidbody2D>().velocity.y);
anim.SetInteger("AnimationState", 0);
GetComponent<Rigidbody2D>().AddForce (jumpVector, ForceMode2D.Force);
所以你的最终代码片段应该是这样的:
if (Input.GetKey (KeyCode.Z) && isGrounded == true) {
GetComponent<Rigidbody2D>().velocity = new Vector2 (0, GetComponent<Rigidbody2D>().velocity.y);
anim.SetInteger("AnimationState", 0);
GetComponent<Rigidbody2D>().AddForce (jumpVector, ForceMode2D.Force);
}