我需要快速修改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#语言的新手,但我计划在我生命中的某个时刻熟练使用它。

谢谢

我需要快速修改2d平台(占位符)代码的技巧,以满足我对unity的需求.我觉得这些不合适

问题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);
   }