и действительно шар полетел как надо.... немного косячно когда целевой моб за спиной у персонажа(перс пока не поворачивается к цели) шар бьется об коллайдер перса и летит куда попало... Два дня я колдовал с этим выстрелом а оказалось что коллайдер беспощадная ты ****....убейте меня :)) seaman спасибо за помощ
Работает он только тогда, когда персонаж войдет в специальную зону и нажмет "E", как сделать что бы скрипт работал сразу, когда персонаж войдет в эту зону? (скрипт висит на противнике) Если я убираю строчку " if(Input.GetKeyDown(KeyCode.E))" - то при входе в зону ничего не происходит...
Мне тут подсказали вот что:
сделай локальную переменную bool pathEnter - и в Update проверяй - если она ложная, то: 1 - строй путь до таргета, 2 - устанавливай pathEnter в истину. В этом случае придется добавить еще одну проверку - точка предыдущего (при построении пути) таргета достигнута? Если да - то pathEnter = false; (это вызовет построение пути заново на следующем цикле Update).
Спасибо KamiRonin'у за это
Но как это можно сделать? А точней построить путь до таргета. Через Vector2.Distance? Если да, то как проверить вот это - точка предыдущего (при построении пути) таргета достигнута?
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq;
public class MyPlayerShoot : MonoBehaviour { public GameObject bulletPrefab;//префаб патрона public float bulletSpeed = 30;//скорость патрона public float shootPause = 1;//таймер private float timeLastShoot = 0;//таймер public float shootRadius = 10;//радиус стрельбы private GameObject currentTarget;
// Use this for initialization void Start () {
}
// Update is called once per frame void Update () { if (Input.GetMouseButtonDown (1)) { currentTarget = findTargets();//ближайший моб transform.LookAt(currentTarget.transform.position);//поворот к мобу float distance = Vector3.Distance (transform.position, currentTarget.transform.position); if(distance> shootRadius){ Debug.Log("Моб слишком далеко"); }else{ if(Time.time> timeLastShoot + shootPause){ Vector3 shoot = currentTarget.transform.position - transform.position; Vector3 shootNormal = shoot.normalized; GameObject newBullet = (GameObject) Instantiate(bulletPrefab,transform.position + Vector3.one , Quaternion.identity); Rigidbody newBulletRigidbody = newBullet.GetComponent<Rigidbody>(); newBulletRigidbody.AddForce(shootNormal * bulletSpeed, ForceMode.VelocityChange); timeLastShoot = Time.time;
Нет, не годится. Задача такая, что игра в 2d, но изометрии - и игрок управляет персонажем. Клавишами, разумеется. Потому необходимо, что-бы по нажатию клавиш влево\вправо, персонаж поворачивался, но методом Rigidbody2d.MoveRotation. Проще было-бы использовать transform.rotation, но не подходит он тут. #Хийвэл бүү ай, айвал бүү хий.
Vector3.MoveTowards и Vector3.RotateTowards не подойдут? И попробуйте не кидаться патронами, а то напоминает Чарли Шина в "Горячих головах". Без обид А точно пуля должна быть видна или это стрела или снаряд большой? Может , просто через рейкаст? http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
UnassignedReferenceException: The variable tar_2 of Interface has not been assigned. You probably need to assign the tar_2 variable of the Interface script in the inspector. UnityEngine.Transform.get_position () (at C:/BuildAgent/work/d63dfc6385190b60/artifacts/EditorGenerated/UnityEngineTransform.cs:28) Interface.OnGUI () (at Assets/Scripts/Interface.cs:29)
Так понимаю, при запуске не может найти нужный скрипт (хотя он добавлен в инспекторе), и все функции, с ним повязанные - работают. #Хийвэл бүү ай, айвал бүү хий.
Почему скрипт дает такую вот ошибку? UnassignedReferenceException: The variable tar_2 of Interface has not been assigned. You probably need to assign the tar_2 variable of the Interface script in the inspector. UnityEngine.Transform.get_position () (at C:/BuildAgent/work/d63dfc6385190b60/artifacts/EditorGenerated/UnityEngineTransform.cs:28) Interface.OnGUI () (at Assets/Scripts/Interface.cs:29)
Так понимаю, при запуске не может найти нужный скрипт (хотя он добавлен в инспекторе), и все функции, с ним повязанные - работают.
Может кто объяснить что за параметры нужно передавать в эти методы MoveTowards(vector current, vector target, float maxDistanceDelta) RotateTowards(vector current, vector target, float radianDeklta, float MagnitudeDelta) С таргетами понятно, а вот что за параметр в первом методе идет третим, во втором методе третий и четвнртый. Или есть у кого туториалы на русском по вот таким всяким методам...буду признателен за подсказки
Что тут не понятно 1- это то что ты будешь двигать вращать, координаты которые будут меняться с данной функцией 2- это цель, позиция или поворот в который будет преобразовываться наш 1 3- это скорость с которой будет двигаться вращаться
Добавлено (30 июля 2015, 18:49) --------------------------------------------- Может кто сказать как узнать угол под каким наш рейкаст попадает в поверхность коллайдер, к примеру нужно спавнить под нужным углом объект
Какой скайбокс лучше использовать? И что делать со стыками между текстур? Когда все было сделано по примеру из документации появились артефакты. Как программно привязать скайбокс? Может тогда не будет этих навязчивых стыков?
Код индийский (или даже индейский), но простой. Показывает счет забитых голов:
Код
using UnityEngine; using System.Collections;
public class Interface : MonoBehaviour { public Vector3 screenPos; public Vector3 screenPos_2; public Texture2D Gol_0; public Texture2D Gol_1; public Texture2D Gol_2; public Texture2D Gol_3; public Texture2D Gol_4; public Texture2D Gol_5; public Texture2D Gol_6; public Texture2D Gol_7; public Texture2D Gol_8; public Texture2D Gol_9; public Texture2D Gol_10; public Transform tar; public Transform tar_2;
public Trig_1 gol; public Trig_2 gol_2; //public _2PC_Char CharHp;