лазерный луч в юнити?

Общие вопросы о Unity3D

лазерный луч в юнити?

Сообщение BANNERTM 31 окт 2012, 18:17

как реализовать лазерный луч в юнити? и как его направить в соответствии с raycast?
BANNERTM
UNITрон
 
Сообщения: 241
Зарегистрирован: 26 фев 2012, 00:13

Re: лазерный луч в юнити?

Сообщение Chaz 31 окт 2012, 18:20

BANNERTM писал(а):как реализовать лазерный луч в юнити? и как его направить в соответствии с raycast?

Line renderer юзай. Есть массив из точек, первым элементом указываешь точку из которой выходит луч, а второй - точку столкновения рейкаста с колайдером
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: лазерный луч в юнити?

Сообщение BANNERTM 31 окт 2012, 18:21

Chaz писал(а):
BANNERTM писал(а):как реализовать лазерный луч в юнити? и как его направить в соответствии с raycast?

Line renderer юзай. Есть массив из точек, первым элементом указываешь точку из которой выходит луч, а второй - точку столкновения рейкаста с колайдером


Мне нужен реалистичный) - а там просто линия
BANNERTM
UNITрон
 
Сообщения: 241
Зарегистрирован: 26 фев 2012, 00:13

Re: лазерный луч в юнити?

Сообщение Chaz 31 окт 2012, 18:24

BANNERTM писал(а):
Chaz писал(а):
BANNERTM писал(а):как реализовать лазерный луч в юнити? и как его направить в соответствии с raycast?

Line renderer юзай. Есть массив из точек, первым элементом указываешь точку из которой выходит луч, а второй - точку столкновения рейкаста с колайдером


Мне нужен реалистичный) - а там просто линия

у меня была идея такая. взять цилиндр, и просто менять его длину. так там надо точку центра сместить к одному из краев
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: лазерный луч в юнити?

Сообщение trololoid 31 окт 2012, 18:27

В стандартном проекте есть хороший луч.
Аватара пользователя
trololoid
Старожил
 
Сообщения: 712
Зарегистрирован: 15 сен 2011, 19:18
Откуда: Туапсе, Краснодарский край, Россия

Re: лазерный луч в юнити?

Сообщение Chaz 31 окт 2012, 21:29

trololoid писал(а):В стандартном проекте есть хороший луч.

таки да. идея простая и понятная (но я еще не понял), и выглядит эффектно.
Стоит тот же Line Renderer + скрипт который двигает материал по линии
p.s. уже понял
Синтаксис:
Используется javascript
#pragma strict

@script RequireComponent (PerFrameRaycast)

public var scrollSpeed : float = 0.5;
public var pulseSpeed : float = 1.5;

public var noiseSize : float = 1.0;

public var maxWidth : float = 0.5;
public var minWidth : float = 0.2;

public var pointer : GameObject = null;

private var lRenderer : LineRenderer;
private var aniTime : float = 0.0;
private var aniDir : float = 1.0;

private var raycast : PerFrameRaycast;

function Start() {
        lRenderer = gameObject.GetComponent (LineRenderer) as LineRenderer;    
        aniTime = 0.0;
       
        // Change some animation values here and there
        ChoseNewAnimationTargetCoroutine();
       
        raycast = GetComponent.<PerFrameRaycast> ();
}

function ChoseNewAnimationTargetCoroutine () {
        while (true) {
                aniDir = aniDir * 0.9 + Random.Range (0.5, 1.5) * 0.1;
                yield;
                minWidth = minWidth * 0.8 + Random.Range (0.1, 1.0) * 0.2;
                yield WaitForSeconds (1.0 + Random.value * 2.0 - 1.0); 
        }      
}

function Update () {
        renderer.material.mainTextureOffset.x += Time.deltaTime * aniDir * scrollSpeed;
        renderer.material.SetTextureOffset ("_NoiseTex", Vector2 (-Time.time * aniDir * scrollSpeed, 0.0));

        var aniFactor : float = Mathf.PingPong (Time.time * pulseSpeed, 1.0);
        aniFactor = Mathf.Max (minWidth, aniFactor) * maxWidth;
        lRenderer.SetWidth (aniFactor, aniFactor);
       
        // Cast a ray to find out the end point of the laser
        var hitInfo : RaycastHit = raycast.GetHitInfo ();
        if (hitInfo.transform) {
                lRenderer.SetPosition (1, (hitInfo.distance * Vector3.forward));
                renderer.material.mainTextureScale.x = 0.1 * (hitInfo.distance);
                renderer.material.SetTextureScale ("_NoiseTex", Vector2 (0.1 * hitInfo.distance * noiseSize, noiseSize));              
               
                // Use point and normal to align a nice & rough hit plane
                if (pointer) {
                        pointer.renderer.enabled = true;
                        pointer.transform.position = hitInfo.point + (transform.position - hitInfo.point) * 0.01;
                        pointer.transform.rotation = Quaternion.LookRotation (hitInfo.normal, transform.up);
                        pointer.transform.eulerAngles.x = 90.0;
                }
        }
        else {
                if (pointer)
                        pointer.renderer.enabled = false;              
                var maxDist : float = 200.0;
                lRenderer.SetPosition (1, (maxDist * Vector3.forward));
                renderer.material.mainTextureScale.x = 0.1 * (maxDist);        
                renderer.material.SetTextureScale ("_NoiseTex", Vector2 (0.1 * (maxDist) * noiseSize, noiseSize));             
        }
}
 
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: лазерный луч в юнити?

Сообщение Chaz 31 окт 2012, 21:53

BANNERTM писал(а):
Chaz писал(а):
BANNERTM писал(а):как реализовать лазерный луч в юнити? и как его направить в соответствии с raycast?

Line renderer юзай. Есть массив из точек, первым элементом указываешь точку из которой выходит луч, а второй - точку столкновения рейкаста с колайдером


Мне нужен реалистичный) - а там просто линия

ну вот. пример "не просто линии" с применением "просто линии". Создаешь объект, кидаешь на него компонент Line Renderer, задаешь две точки, запихиваешь в Line Renderer материал "ларезрный" чтоб был, бросаешь на какой-то объект в сцене простющий скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class LaserOffsets : MonoBehaviour {
        public Material mat;
        public float speed=1f;
        private float temp=0;
        // Use this for initialization
        void Start () {
       
        }
       
        // Update is called once per frame
        void Update () {
                temp+=Time.deltaTime*speed;
         mat.mainTextureOffset = new Vector2(temp,0);
        }
}
 

В скрипте указываешь нужную скорость и материал.
Chaz
Адепт
 
Сообщения: 1412
Зарегистрирован: 07 апр 2012, 11:24

Re: лазерный луч в юнити?

Сообщение Syberex 31 окт 2012, 23:35

А что за стандртный проект? Хочу глянуть :)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: лазерный луч в юнити?

Сообщение DbIMok 31 окт 2012, 23:40

AngryBots
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: лазерный луч в юнити?

Сообщение Syberex 01 ноя 2012, 01:46

Клева, спасибо :)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20