【问题标题】:Trying to switch character unity 2d试图切换字符统一 2d
【发布时间】:2017-06-08 08:19:45
【问题描述】:

我正在制作一个平台游戏,你必须在关卡的不同方面改变角色。每个角色都有不同的属性等。我观看了本教程https://www.youtube.com/watch?v=vD5pW97-050 但这基本上只是更改精灵,因为两个角色都是具有相同刚体和对撞机的同一个游戏对象的一部分。我正在使用 c#,如果有人知道解决方案,我真的很想得到一些帮助。这是我的播放器控制器脚本,其中包括教程中的角色切换脚本。任何帮助将不胜感激谢谢!

using UnityEngine;
using System.Collections;

public class controller : MonoBehaviour
{
public float topSpeed = 15f;
bool facingRight = true;

bool grounded = false;

public Transform groundCheck;

float groundRadius = 0.2f;
GameObject Player, Player2;
int characterselect;

public float jumpForce = 700f;

public LayerMask whatIsGround;
void Start()
{
    characterselect = 1;
    Player = GameObject.Find("Player");
    Player2 = GameObject.Find("Player2");

}

void FixedUpdate()
{
    grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround);


    float move = Input.GetAxis("Horizontal");
    GetComponent<Rigidbody2D>().velocity = new Vector2(move * topSpeed, GetComponent<Rigidbody2D>().velocity.y);
    if (move > 0 && !facingRight)
        flip();
    else if (move < 0 && facingRight)
        flip();


}

void Update()
{
    if(grounded&& Input.GetKeyDown(KeyCode.Space))
    {
        GetComponent<Rigidbody2D>().AddForce(new Vector2(0, jumpForce));
    }
    {
        if (Input.GetKeyDown(KeyCode.E))
        {
            if (characterselect==1)
            {
                characterselect = 2;
            }
            else if (characterselect==2)
            {
                characterselect = 1;
            }
        }
        if (characterselect==1)
        {
            Player.SetActive(true);
            Player2.SetActive(false);
        }
        else if (characterselect==2)
        {
            Player.SetActive(false);
            Player2.SetActive(true);
        }
    }

}

void flip()
{
    facingRight = ! facingRight;

    Vector3 theScale = transform.localScale;

    theScale.x *= -1;

    transform.localScale = theScale;


}

}

【问题讨论】:

    标签: c# character unity2d


    【解决方案1】:

    拥有一个控制器是一个好的开始,但你必须考虑你希望你的角色有多大的不同。如果它们完全不同,那么考虑创建一个“PlayerCharacter”接口,该接口具有所有可能的命令的功能,例如

    public interface IPlayerCharacter
    {
        void DoActionA();
        void DoActionB();
    }
    

    如果你不知道接口是什么,它基本上是一个定义函数的空类,但还没有为它们创建代码。因此,您可以非常轻松地实现非常不同的播放器。因为你可以从这个接口的实例中调用函数。

    然后,将这个组件添加到你的控制器中,如果你现在从播放器 1 切换到播放器 2 大概应该是这样的

    public class PlayerController_Jumper : MonoBehaviour, IPlayerCharacter 
    {
        // Does a jump
        void DoActionA() 
        {
            rigidbody.AddVelocity(Vector3.Up, 100.0f);
        }
    } 
    

    使用接口必须做的事情是你必须定义所有预定义的函数,所以它可能会抱怨这段代码,因为没有 DoActionB()。但我们暂时先不管它。

    然后将“IPlayerController Jumper”之类的内容和您计划制作的任何其他酷角色添加到您的控制器中!

    【讨论】:

    • 我想要的唯一主要区别是对撞机,因为这将是一个简单的游戏,每个不同的角色都是不同的形状
    • 哦,我明白了。然后,您可以简单地使用两个不同的预制件,只需使用 CircleCollider2D、PolygonCollider 或简单的盒子碰撞器制作对象形状中的一个碰撞器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多