您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页unity入门——实现一个简单的跑酷游戏(人物控制)

unity入门——实现一个简单的跑酷游戏(人物控制)

来源:爱站旅游

unity入门——实现一个简单的跑酷游戏

场景搭建

将人物放置于世界坐标的(0,0.1,0),初始道路放置于人物脚下,坐标设置为(0,0,0),水面初始位置设置为(0,-2,-100),可以自行调整,道路与人物在y轴上不要 重合即可,当然这些操作也可以放在Awake函数中动态进行,但直接摆放显然是最快捷的方法。



这时候点击运行游戏大概率什么也看不到,我们需要将摄像机放置于人物面前,按照如下设置其transform组件的属性。
这时点击运行会看到如下画面:
如果上一篇的动画状态机设置正确的话,人物应该会处于待机动画,而需要这个动画循环的话,只需要将该动画的Loop Time和其子属性Loop Pose勾选即可,如下。
那么,到现在场景的摆放基本完成,ui方面会在下篇说明。

人物控制

一款简单的跑酷游戏的人物需要有前进,跳跃,下滑和左右移动的动作,而人物在前进的同时需要摄像头跟随,这里就需要脚本实现了。

/*CameraPosition.cs,挂载于main camera*/
public GameObject character;
public float beh=4;//相机距离
public float ups=7;//相机高度
void LateUpdate()
    {
   
        if (start)
        {
   
            transform.position = character.transform.position - Vector3.forward * beh + Vector3.up * ups;
            transform.LookAt(character.transform);
        }
    }

正如第一篇所说,相机的跟随需要 在人物位置改变之后,因此在LateUpdate中进行。
人物进入游戏后设置为奔跑状态。

public Animator playerAnimator;
public int framerate=30;
CharacterController ctrl;	
bool isjumping = false;
bool issliding = false;
bool ismoving = false;
bool isleft = false;
bool isright = false;
public float speed = 5f;
public GameObject hard;//难度
public Vector2 screenaixY = new Vector2(0, 1);
public Vector2 screenaixX = new Vector2(1, 0);
Vector2 startpos;
Vector2 endpos;
bool isinput = false;
float angle;
void Start()
    {
   
        Transform pos;
        pos=GetComponent<Transform>();
        pos.position = new Vector3(0, 0.1f, 0);
        ctrl = GetComponent<CharacterController>();
        playerAnimator = GetComponent<Animator>();
        playerAnimator.SetBool("MOVE", true);
    }

接下来在Update函数中完成其他动作及其音效的触发。

#if UNITY_STANDALONE_WIN//如果是windows平台
        if (Input.GetKeyDown(KeyCode.UpArrow) && (isjumping == false) && (issliding == false))
        {
   
            GetComponent<AudioSource>().clip = Resources.Load<AudioClip>("jump");
            GetComponent<AudioSource>().PlayOneShot(GetComponent<AudioSource>().clip);
            isjumping = true;
            playerAnimator.SetBool("ISJUMP", true);
        }
        if (Input.GetKeyDown(KeyCode.DownArrow) && (isjumping == false) && (issliding == false))
        {
   
            GetComponent<AudioSource>().clip = Resources.Load<AudioClip>("slide");
            GetComponent<AudioSource>().PlayOneShot(GetComponent<AudioSource>().clip);
            issliding = true;
            playerAnimator.SetBool("ISSLIDE", true);
        }


        if (Input.GetKeyDown(KeyCode.LeftArrow) && (!isright) && (!isleft))
        {
   
            isleft = true;
            StartCoroutine(turnleft());

        }
        /*while(transform.position.x >= -f)
         transform.position += new Vector3(-1, 0, 0)*Time.deltaTime*5;*/
        if (Input.GetKeyDown(KeyCode.RightArrow) && (!isleft) && (!isright

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务