2D. Песочница. Подскажите "новичку".

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Re: 2D. Песочница. Подскажите "новичку".

Сообщение Raspad 26 июл 2017, 13:41

waruiyume писал(а):Какой подсказки вы ожидали, если нет кода, зато есть утверждение невозможного?
Ну особо и показать нечего в плане.. Весь код взят из той серии уроков.
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerPlatformerController : PhysicsObject {

        public float maxSpeed = 7;
        public float jumpTakeOffSpeed = 7;

        private SpriteRenderer layerBody;
        private Animator animator;
        private CapsuleCollider2D capsuleCollider;

        public GameObject layers;
        public bool sideMove; //false-спрайт направлен на право,true-на лево

        public float velocityY;

        // Use this for initialization
        void Awake ()
        {
                layerBody = layers.transform.GetChild(1).GetComponent<SpriteRenderer> ();
                animator = GetComponent<Animator> ();
                capsuleCollider = GetComponent<CapsuleCollider2D>();
                sideMove = false;
        }

        protected override void ComputeVelocity()
        {
                Vector2 move = Vector2.zero;

                move.x = Input.GetAxis ("Horizontal");

                velocityY = velocity.y;

                if (Input.GetButtonDown ("Jump") && grounded) {
                        velocity.y = jumpTakeOffSpeed;
                } else if (Input.GetButtonUp ("Jump"))
                {
                        if (velocity.y > 0) {
                                velocity.y = velocity.y * 0.5f;
                        }
                }

                bool flipSprite = (layerBody.flipX ? (move.x > 0.01f) : (move.x < 0.01f));
                if (flipSprite)
                {
                        //layerBody.flipX = !layerBody.flipX;
                        //sideMove=!sideMove;
                        //layers.transform.GetChild(0).localPosition -= layers.transform.GetChild(0).localPosition*2;

                }
                if(sideMove){layerBody.flipX=true;}
                else{layerBody.flipX=false;}

                if(move.x > 0.01){sideMove=false;}
                else if (move.x < -0.01){sideMove=true;}

                //animator.SetBool ("grounded", grounded);
                layerBody.GetComponent<Animator>().SetFloat ("Run", Mathf.Abs (move.x));

                if(velocity.y>0){
                        layerBody.GetComponent<Animator>().SetBool("Jump",true);
                }
                else if(velocity.y<0){
                        layerBody.GetComponent<Animator>().SetBool("Jump",false);
                }

                Debug.DrawLine(transform.position,new Vector2(transform.position.x,velocity.y),Color.red);
                //Debug.Log("velocity.y: "+velocity.y);

                targetVelocity = move * maxSpeed;
        }
}

Еще небольшой вопрос.. У персонажа скажем 100 хп и он может поднять до 500хп. До 400 все отображается одной шкалой, после перехода за этот порог (в 400хп), поверх первой шкалы начинает расти вторая. Но как это сделать адекватно?
Вычисление размера "шкалы" идет так
Синтаксис:
Используется csharp
var life_scale = (float)there/((float)max/100);
Но такая тема рассчитана изначально на то что бы делать шкалу которая работает с любым размером хп,маны и тп. для чего нужна шкала..
Пробовал сделать так:
Синтаксис:
Используется csharp
var life_scale = (float)life.there/((float)life.max/100);      
                var lifePro_scale = (float)(life.there-400)/((float)(life.max-400)/100);       

                if(life.there<=400){
                        scaleLife.transform.GetComponent<Image>().fillAmount = life_scale/100;  //определяем "процент" растянутости шкалы
                        scaleLifePro.transform.GetComponent<Image>().fillAmount = 0;
                }else{
                        scaleLife.transform.GetComponent<Image>().fillAmount = 1;
                        scaleLifePro.transform.GetComponent<Image>().fillAmount = lifePro_scale/100;
                }
В некоторой степени все работает, но "первая шкала" начинает отсчитывать себя уже не как для 400, а как 500, то есть при переходе за 400 у шкалы откатывается кусок в 100 едениц, так как просчет идет для 500, а не как для 400.
Аватара пользователя
Raspad
UNITрон
 
Сообщения: 221
Зарегистрирован: 28 мар 2013, 13:12

Re: 2D. Песочница. Подскажите "новичку".

Сообщение waruiyume 26 июл 2017, 18:37

Нужно поставить значение Kinematic в параметре Body type у Rigidbody.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: 2D. Песочница. Подскажите "новичку".

Сообщение Raspad 28 июл 2017, 14:30

Как бы и так это стояло
Аватара пользователя
Raspad
UNITрон
 
Сообщения: 221
Зарегистрирован: 28 мар 2013, 13:12

Re: 2D. Песочница. Подскажите "новичку".

Сообщение waruiyume 28 июл 2017, 14:37

Не может такого быть, давайте тестовый проект.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Пред.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 19