«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته

بایگانی
پیوندها

منبع:gameover.blog.ir

فرض کنید یک کره یا sphere داریم که شعاع اون 6000 باشه.
حالا فرض کنید بخوایم نقطه ی روی زمین واقعی رو که از GPS خوندیم حالا می خوایم تبدیل به مختصات نقطه ی سه بعدی روی این کره کنیم.

کدش شبیه این میشه:

// this gives you a point on a spehere
 const float kRadiusOfEarth = 6000;
 Vector3 pos = new Quaternion(lat, long, 0) * new Vector3(0, 0, kRadiusOfEarth + altitude);


http://answers.unity3d.com/questions/1011674/gps-coordinates-latlongaltitude-to-unity-3d-coordi.html

۰ نظر موافقین ۰ مخالفین ۰ ۰۱ دی ۹۴ ، ۰۴:۰۰
مدیرکل
منبع :gameover.blog.ir

نکته : گروه ما یونیتی رو توضیه می کنه اما چون مبتدیان گیم میکر کار می کنن بعضی اوقات پاسخ گوی سوالات اونا هستیم.
(البته گیم میکر استادیو هم هنوز برای بازی سازی جایگاهی داره به شرطی که توی کدنویسی لمسی و ... بیشتر تحقق کنید)
با استفاده از این آموزش می تونید با php ارتباط بگیرید:
http://promakers.ir/showthread.php?tid=10070

<?php
//get.php
//Author:Sajjad3011
if (isset($_POST["x"]) && isset($_POST["y"]  )
{
$x=$_POST["x"];
$y=$_POST["y"];
}
   $dbhost = 'اسم هاست مای اس کیو ال';
   $dbuser = 'نام کاربری که برای دیتابیس نسبت دادیم روی هاست';
   $dbpass = 'رمز';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   

   if(! $conn )
   {
      die('Could not connect to host : ' . mysql_error());
   }
   
   $sql = 'INSERT INTO tableName '.
      '(x,y) '.
      'VALUES ( $x, $y )';
      
   mysql_select_db('test_db');
   $result= mysql_query( $sql, $conn );
   
   if(! $result )
   {
      die('Could not enter data: ' . mysql_error());
   }
   
   echo "Entered data successfully\n";
   
   mysql_close($conn);
?>

۰ نظر موافقین ۰ مخالفین ۰ ۲۹ آذر ۹۴ ، ۲۳:۵۵
مدیرکل

منبع :gameover.blog.ir

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Renderer rend;
    void Start() {
        rend = GetComponent<Renderer>();
    }
    void OnMouseEnter() {
        rend.material.color = Color.red;
    }
    void OnMouseOver() {
        rend.material.color -= new Color(0.1F, 0, 0) * Time.deltaTime;
    }
    void OnMouseExit() {
        rend.material.color = Color.white;
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۸ آذر ۹۴ ، ۱۸:۰۶
مدیرکل

C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\AndroidManifest.xml

البته فایل AndroidManifest.xml رو برای کنترل بیشتر پروژه های اندرویدی به مسیر Assets->Plugins->Android از پروژه تون اضافه کنید و کدهای مختلف مثل دستری به اینترنت و غیره رو داخلش تنظیم کنید.

۰ نظر موافقین ۰ مخالفین ۰ ۲۸ آذر ۹۴ ، ۰۲:۴۱
مدیرکل
منبع:gameover.blog.ir
سلام دوستان.

اگه سوالی می پرسید لطفا پیام  رو خصوصی نذارید.

عمومی بذارید تا بتونیم پاسخ بدیم.

یکی از دوستان به نام حمید ش ق پیام گذاشته بود در مورد گیم میکر استادیو.سوالشم این بود :

- نحوه ورود رندوم و خودکار ماهی ها به بازی
2- دادن امتیاز + و - به ماهیا
3- حرکت صفحه بازی
خواهشا کمکم کنین برای پروژمه عجله دارم

--

اما پاسخ:

باید از توابع random یا irandom_range استفاده کنید  یا غیره.

مثال:




Create Event:

CODE
speed=3+random(2)
direction=round(random(360))
alarm[0]=50+random(150)



اینم برای آلارم :
Alarm 0 Event:
CODE
direction=round(random(360))
alarm[0]=50+random(150)




http://z11.invisionfree.com/GameMaker_Central/ar/t20.htm



اما راه دیگه :
برای دشمن این کد رو بذارید :
توی create:
مثال :
v_speed=2

توی step هم اینو :
اگر y>room_height شد x=random(room_width و  y=-50


کد بالا باعث میشه دشمن از بالا ی صحنه حرکت کنه به سمت پایین و وقتی y از ارتفاع روم(اتاق) بیشتر شد دوباره از بالا یعنی -50 شروع کنه.
x هم بین صفر تا حداکثر اندازه ی پهنای روم تنظیم میشه به صورت تصادفی.
سوالی بود بذارید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۷ آذر ۹۴ ، ۰۲:۲۴
مدیرکل


حجم: 23 مگابایت

 

این جزوه نزدیک بیش از 700 صفحه هست. فونت 12 .

دارای تصاویر با متن انگلیسی و زیرنویس فارسی

جملات بسیار کاربردی و مهم که در زندگی عامیانه بکار می ره جمع آوری شده

و یه جزوه ی بسیار عالی هست برای کل مقاطع

700 صفحه خیلی هست دوستان.

اما قیمت این کتاب واقعا پایینه و خودم حتی یکی از این نسخه رو برای یادگیری دارم مطالعه می کنم.

شاید شما بتونید با خوندن این کتاب چیزای بسیار خوبی یاد بگیرید.

ممنون از حمایت شما

--------

مشکلی توی دانلود پیش اومد در وبلاگ gameover.blog.ir مطرح کنید تا لینک سالم فایل رو بهتون ایمیل کنیم یا مشکل شما رو برطرف کنیم.

یا در بخش پشتیبانی پیام بذارید.

لینک محصول

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ آذر ۹۴ ، ۰۷:۰۷
مدیرکل

منبع :gameover.blog.ir

مترجم:گیم اور

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آذر ۹۴ ، ۰۴:۵۴
مدیرکل
منبع :gameover.blog.ir
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
document.getElementById("demo").innerHTML = txt.length;
</script>

۰ نظر موافقین ۰ مخالفین ۰ ۱۷ آذر ۹۴ ، ۱۷:۴۱
مدیرکل
gameover.blog.ir منبع

Dim c As Int = 0
For Each f As String In File.ListFiles(File.DirRootExternal)
   If f.EndsWith(".jpg") Then c = c + 1
Next
Log(c)


روش دوم :
البته خوندم File.ListFiles هم یک لیست بر می گردونه و اسم لیست رو فرض کنیم List باشه List.Size هم تعداد رو برگشت میده.
http://www.b4x.com/android/forum/threads/count-the-number-of-files.32604/


خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
۱ نظر موافقین ۰ مخالفین ۰ ۱۷ آذر ۹۴ ، ۰۳:۳۸
مدیرکل
منبع :gameover.blog.ir
منبع:
http://www.b4x.com/android/forum/threads...rial.8339/
مترجم:
sajjad3011

این آموزش طریقه اتصال بین Android device و remote server رو نشون می ده.
در اینجا قصد اتصال به یک MySQL database رو داریم.
Android به طور مستقیم نمی تونه به database server وصل بشه.
بنابراین نیازه یک simple web service یا سرویس وب ساده بسازیم تا request ما رو به دیتابیس بفرسته و به ما response بده.

مثلا ما یه new database ایجاد کردیم که جمعیت کشور ها رو برامون لیست کنه.
.(در اینجا البته اسم دیتابیس و ... دلخواه هست مثل xxxx یا .... )
دیتابیس ما یه جدول داره به اسم "countries" با سه ستون Name+ID+Population
[تصویر: mysql_1.png]

PHP Script:
web service ما یک اسکریپت php هست که روی سایت سرور قرار میدیم.
روش های ارتباط با این اسکریپت زیاده. مثلا می تونید با ارسال و دریافت پارامترها کار کنید و ... .
می تونیم روی سایت با php یه query بگیریم با دستوای sql و محتوای دیتابیس رو بریزیم بیرون یا واکشی کنیم توی یک فایل دیگه یا یه صفحه که با php درخواست می دیم.(مثلا get.php یا...)
البته این سوریس بهتره public نباشه(تنظیمات chmod روی سایت رو طوری تنظیم کنید که فقط کاربران خاص بتونن بهش دسترسی داشه باشن یا یه سری مسائل ایمنی و رعایت کنید اگه واستون مهمه)
البته یه راهنما هم هست تا افراد نتونن sql رو inject(تزریق) کنن برای باگ یابی از بانک شما:
PHP: mysql_real_escape_string - Manual
http://php.net/manual/en/function.mysql-...string.php


ما در اینجا از روش query استفاده می کنیم.

php script:

<?

$databasehost = "localhost";
$databasename = "xxxx";
$databaseusername ="xxxx";
$databasepassword = "xxxx";

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());
mysql_query("SET CHARACTER SET utf8");
$query = file_get_contents("php://input");
$sth = mysql_query($query);

if (mysql_errno()) {
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error();
}
else
{
    $rows = array();
    while($r = mysql_fetch_assoc($sth)) {
        $rows[] = $r;
    }
    print json_encode($rows);
}
?>

این اسکریپت با استفاده از داده ها یا پارامتری هایی که با متد POST بهش ارسال می کنیم یک query از دیتابیس mysql می گیره.یعنی طبق درخواست ما به بانک وصل میشه و نهایتا نتیجه رو البته با فرمت JSON برگشت میده.

نکته: قسمت مهم کد بالا
$query = file_get_contents("php://input");
هست که محتوای متن ارسالی توسط b4a رو در متغیر $query ذخیره می کنه.
کپی شده از http://gameover.blog.ir



Basic4android code:

[تصویر: SS-2013-01-29_16.42.32.png]
این کد یک query(یک متغیر رشته ای که شامل بازجست و دستورات SQL هست مثل select * from table1 برای انتخاب تمام ستون ها از جدول) رو send می کنه. و نتیجه ی JSON دیافت شده رو parse(تجزیه) می کنه و نمایش میده روی listView .

قسمت اصلی سورس b4a  اینطوری هست :
'Activity module
Sub Process_Globals
	Private COUNTRIES_LIST = "countries_list", COUNTRY_POPULATION = "country_population" As String
End Sub

Sub Globals
	Type TwoLines (First As String, Second As String)
	Dim lblPopulation As Label
	Dim ListView1 As ListView
	Dim lblCountry As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("1")
	FetchCountriesList
End Sub
Sub FetchCountriesList
	ProgressDialogShow("Fetching list of countries")
	'Gets all the available countries
	ExecuteRemoteQuery("SELECT name, id FROM countries ORDER BY id", COUNTRIES_LIST)
End Sub


Sub ListView1_ItemClick (Position As Int, Value As Object)
	Dim tl As TwoLines
	tl = Value
	lblCountry.Text = tl.Second
	lblPopulation.Text = "Calling server..."
	ExecuteRemoteQuery("SELECT population FROM countries WHERE id='" & tl.First & "'", COUNTRY_POPULATION)
End Sub

Sub ExecuteRemoteQuery(Query As String, JobName As String)
	Dim job As HttpJob
	job.Initialize(JobName, Me)
	job.PostString("http://www.basic4ppc.com/android/countries.php", Query)
End Sub

Sub JobDone(Job As HttpJob)
	ProgressDialogHide
	If Job.Success Then
	Dim res As String
		res = Job.GetString
		Log("Response from server: " & res)
		Dim parser As JSONParser
		parser.Initialize(res)
		Select Job.JobName
			Case COUNTRIES_LIST
				Dim COUNTRIES As List
				COUNTRIES = parser.NextArray 'returns a list with maps
				For i = 0 To COUNTRIES.Size - 1
					Dim m As Map
					m = COUNTRIES.Get(i)
					'We are using a custom type named TwoLines (declared in Sub Globals).
					'It allows us to later get the two values when the user presses on an item.
					Dim tl As TwoLines
					tl.First = m.Get("id")
					tl.Second = m.Get("name")
					ListView1.AddTwoLines2(tl.First, tl.Second, tl)
				Next
			Case COUNTRY_POPULATION
				Dim l As List
				l = parser.NextArray
				If l.Size = 0 Then
					lblPopulation.Text = "N/A"
				Else
					Dim m As Map
					m = l.Get(0)
					lblPopulation.Text = NumberFormat2(m.Get("population"),0, 0, 0, True) & " (K)"
				End If
		End Select
	Else
		ToastMessageShow("Error: " & Job.ErrorMessage, True)
	End If
	Job.Release
End Sub

Sub Activity_Resume

End Sub

در کد فوق اطاعات یا query بهcountries.php ارسال میشه (ما فرض کردیم همون فایل get.php که بالا اوردیم هست. اسمشون رو خودتون یکی کنید و ادرس رو به هاست یا سایت خودتون تغییر بدید و لینک دقیق فایل php)
اینم سورس رایگان که خودم هم تست کردم کاملا کار می کنه:
http://www.mediafire.com/download/gb2b3a2ka1dye8p/MySQL.zip




خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
۵ نظر موافقین ۰ مخالفین ۰ ۱۷ آذر ۹۴ ، ۰۲:۵۱
مدیرکل
منبع:gameover.blog.ir
کد حرکت اسپرایت به چپ و راست و بالا و پایین حول لولای خودش(با توجه به زاویه ای نگاه):
using UnityEngine;
using System.Collections;
//Author:Sajjad3011
public class player : MonoBehaviour {
    void Update () 
    {
        //Variables:
        float moveSpeed = 1.5f;
        //Moving codes:
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right * (Time.deltaTime * moveSpeed),Space.Self); //move Right;
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left * (Time.deltaTime * moveSpeed),Space.Self);  //move Left;
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.up * (Time.deltaTime * moveSpeed),Space.Self);    //move Up;
        if(Input.GetKey(KeyCode.DownArrow)) 
            transform.Translate(Vector3.down * (Time.deltaTime * moveSpeed),Space.Self);  //move Down;
        
    }
}

کد حرکت اسپرایت به چپ و راست و بالا و پایین حول دنیای واقعی(بدون توجه به زاویه ای نگاه که پلیر داره بهش رو می کنه):

using UnityEngine;
using System.Collections;

public class player : MonoBehaviour {
    void Update () 
    {
        //Variables:
        float moveSpeed = 1.5f;
        //Moving codes:
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right * (Time.deltaTime * moveSpeed),Space.World); //move Right;
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left * (Time.deltaTime * moveSpeed),Space.World);  //move Left;
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.up * (Time.deltaTime * moveSpeed),Space.World);    //move Up;
        if(Input.GetKey(KeyCode.DownArrow)) 
            transform.Translate(Vector3.down * (Time.deltaTime * moveSpeed),Space.World);  //move Down;
        
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۱۶ آذر ۹۴ ، ۰۳:۳۳
مدیرکل

برای نوشتن object در جاوا اسکریپت از این روش استفاده می کنیم.

var car = {type:"Fiat", model:"500", color:"white"};



در روش بالا برای هر خصوصیت یک نام داده می شود که برای استفاده کردن از محتوای آن کافیست نام متغیر را نوشته و پس از درج نقطه نام خصوصیت را وارد کنیم.

استفاده کردن از اشیا:

car.type
<!DOCTYPE html>
<html>
<body>

<p>Creating a JavaScript Object.</p>

<p id="demo"></p>

<script>
var car = {type:"Fiat", model:"500", color:"white"};
document.getElementById("demo").innerHTML = car.type;
</script>

</body>
</html>


مثال:

خروجی مثال بالا به صورت زیر می باشد.

Creating a JavaScript Object.
Fiat
۰ نظر موافقین ۰ مخالفین ۰ ۱۵ آذر ۹۴ ، ۱۵:۳۷
مدیرکل
منبع :gameover.blog.ir

http://www.mediafire.com/download/njb3v1oy0tyv2ah/Rope+Physics+Tutorial.gmz


کپی:
https://www.dropbox.com/s/s18r2ecq8ueqlb4/Rope%20Physics%20Tutorial.gmz
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۲۲:۵۰
مدیرکل

منبع:gameover.blog.ir

http://s3.picofile.com/file/8226499542/targetFace.jpg

اسکریپت سیشارپ face2face زیر رو بدید به هر دو اسپرایت دلخواهتون.
سپس در inspector اسپرایت دشمن یا اسپرایتی که می خواید بهش نگاه بشه رو بکشید روی متغیر target .

//Author:Sajjad3011
//face2face.cs
using UnityEngine;
using System.Collections;

public class face2face: MonoBehaviour {

	public Transform target;
	private Vector3 v_diff;
	private float atan2;
	
	void Update()
	{
		v_diff = (target.position - transform.position);    
		atan2 = Mathf.Atan2 ( v_diff.y, v_diff.x );
		transform.rotation = Quaternion.Euler(0f, 0f, atan2 * Mathf.Rad2Deg -90);
	}
}


مثال بالا برای حالت top-down بود.



اما مثال(توضیح) زیر برای حالت platform یا از پهلو هست.

فرض کنید دو گیم ابجکت دو بعدی داریم می خوایم به هم نگاه کنن در هر حالتی.


هر شی اگه در سمت چپ بود به سمت راست وگرنه به چپ نگاه کنه.(به هر شی یک اسکریپت مشترک میدیم).


روش کار:

اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت


ببینید

شما x دو گیم ابجکت رو نسبت به هم مقایسه کنید

اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت

این کار رو برای هر دو گیم ابجکت  دو بعدی تکرار می کنیم

private float xScale,yScale;

void Start(){
xScale = transform.localScale.x;
yScale = transform.localScale.y;
}


سپس در FixedUpdate  یا Update یا OnGUI  کد زیر رو می ذاریم:( هر کدوم راحت ترید، فرقشون اینه که OnGUI بیشتر از FixedUpdate و FixedUpdate بیشتر از Update فراخوانی میشه تو هر فریم زمان و خب دقت اونی که بیشتر فراخانی میشه بیشتری اما از اونطرف هم سربار محاسبات داریم به خاطر اینکه هی پردازنده باید سیگنال بفرسته برای اجرای تابع یا رویدادی که بیشتر باید چک بشه)


signX = (x1<x2)? +1 : -1 ;
توضیح:

علامت سوال، عملگر شرطی هست، اگه x1 از x2 کمتر بود، علامت مثبت یک میره توش ویلا منفی یک.


علامت بدست اومده ضرب می شه در این فرمول:

_transform.localScale = new Vector2(signX * xScale,yScale);

۱ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۱۷:۵۰
مدیرکل
منبع :gameover.blog.ir
<?php
// example of how to use basic selector to retrieve HTML contents
include('../simple_html_dom.php');

// get DOM from URL or file
$html = file_get_html('http://example.com/#1:7');

// find all link
foreach($html->find('a') as $e) 
    echo $e->href . '<br>';

// find all image
foreach($html->find('img') as $e)
    echo $e->src . '<br>';

// find all image with full tag
foreach($html->find('img') as $e)
    echo $e->outertext . '<br>';

// find all div tags with id=gbar
foreach($html->find('div#content') as $e)
    echo $e->innertext . '<br>';

// find all span tags with class=gb1
foreach($html->find('span.gb1') as $e)
    echo $e->outertext . '<br>';

// find all td tags with attribite align=center
foreach($html->find('td[align=center]') as $e)
    echo $e->innertext . '<br>';

// extract text from table
echo $html->find('td[align="center"]', 1)->plaintext.'<br><hr>';

// extract text from HTML
echo $html->plaintext;
?>

منبع اصلی:
http://stackoverflow.com/questions/26966919/how-to-get-ajax-response-text-from-div-using-php-domdocument
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۰۹:۳۱
مدیرکل

مشکل از build-tools هست. باید ورژن v21.0.2 رو کپی کنید داخل پوشه.
http://answers.unity3d.com/questions/834744/building-android-application-failed-re-package-res.html

یه آموزش هم قبلا گذاشته بودیم ببینید:

http://gameover.blog.ir/1394/09/13/%D8%B1%D9%81%D8%B9-%D9%85%D8%B4%DA%A9%D9%84-android-sdk-windows-%D8%AF%D8%B1-unity

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۹:۴۷
مدیرکل
منبع:gameover.blog.ir
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';

منبع اصلی:
http://simplehtmldom.sourceforge.net/
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۸:۲۰
مدیرکل

منبع :gameover.blog.ir

اولا واسه خروجی apk گرفتن توی یونیتی هیچی نمی خواد به جز نصب همون چیزایی که واسه apk گرفتن توی game maer studio یادتون دادیم.
سپس:
یونیتی رو باز کنید(ورژن من 4 هست)
از منوی edit گزینه ی preferences رو برید و سپس External Tools و سپس روی دکمه ی جلو android sdk location بزنید و اونجا ازتون android sdk windows رو میخواد ولی شما به جاش آدرس sdk manager رو کپی paste کنید(واسه من اینه : C:\Users\user1\AppData\Local\Android\android-sdk و واسه شما به جای user1 ادرس یوزر خودتون رو بدید. اگه هم بلد نیستید کافیه روی sdk manager که یک ایک سبز داره راست کلیک کنید و از طریق open file location مسیر رو بدست بیارید)

بعدش روی select folder بزنید و پنجره رو ببندید .

[تصویر: preferences.jpg]

حالا از منوی file گزینه ی build settings رو برید(کلید میانبر ctrl+shift+B) و در قسمت android رفته و دکمه ی build رو بزنید تا پنجره ای باز بشه واسه ذخیره فایل apk در مسیر دلخواه شما.
در همین لحظه ممکنه خطا بده که اسم شرکت(کمپانی) و اسم محصول(productName) رو وارد کنید.
[تصویر: Bundle_identifier.jpg]

برای اینکار روی player settings کلیک کنید . و در قسمت bundle intentifier یک اسم به صورت gameover.Company.test وارد کنید. که اینجا اسم محصول رو من test دادم و اسم کمپانی رو gameover دادم و بینش کلمه ی Company بذارید باشه که چپ و راستش نقطه(.) می گیره
همه چی حله پروژه apk رو build کنید و حالشو ببرید:

[تصویر: apk.jpg]

هر چی واسه گیم میکر استادیو واسه خروجی گرفتن apk نصب کردید هموناست. (اگه واسه game maker studio همه چیز رو درست نصب کردید و موفق شدید apk بگیرید واسه یونیتی هم چیز جدیدی نمی خواد فقط این تنظیماتی که بالا گفتم رو انجام بدین حله)(چیز سختی نیست(


مشکل aip level 21 هم اینجا گفته شده :

http://gameover.blog.ir/tag/%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7%DB%8C%20%D9%84%D8%A7%D8%B2%D9%85%20%D8%A8%D8%B1%D8%A7%DB%8C%20%D8%AE%D8%B1%D9%88%D8%AC%DB%8C%20%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%20%D8%AF%D8%B1%20%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C


۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۷:۲۱
مدیرکل

منبع :gameover.blog.ir
Vector3 vectorToTarget = targetTransform.position - transform.position;
 float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;
 Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
 transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * speed);

منبع اصلی:
http://answers.unity3d.com/questions/650460/rotating-a-2d-sprite-to-face-a-target-on-a-single.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۰۴:۲۱
مدیرکل
منبع:gameover.blog.ir
// Disable screen dimming
	Screen.sleepTimeout = SleepTimeout.NeverSleep;

۱ نظر موافقین ۰ مخالفین ۰ ۱۱ آذر ۹۴ ، ۲۳:۲۷
مدیرکل

منبع:gameover.blog.ir


Culling Mask

فرض کنید بعضی اوقات در کنار player اشیای دیگه ای داریم که نمی خوایم دوربین پشت player اونا رو رندر کنه.

برای اینکار کافیه به اون اشیا یه لایه نسبت بدیم و سپس دوربین رو انتخاب کرده و لایه ای رو که نمی خوایم رندر بشه از لیست Culling Mask غیر فعال یا unCheck کنیم.

http://s3.picofile.com/file/8225947618/cullingMask.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ آذر ۹۴ ، ۱۶:۳۷
مدیرکل

منبع:gameover.blog.ir

تعداد راس ها و face های مدل رو کم کن(مل رو low polygon بساز. به زبون خودمونی همون لو پلی)
Material ها رو minimize کن.
حجم تکستچرها و UV ها رو کم کن.
فضای خالی تکستچرها رو با تکنیک های Overlapping تا می تونی حذف ن(overlapping یعنی همپوشانی)
از Per-Platform Texture Settings استفاده کن.(یه سری تنظیمات برای فشرده سازی تکستچر در خود یونیتی تعبیه شده.وقتی تکستچر رو توی کادر پروژه انتخاب می کنیم تنظیمات و خصوصیاتی توی inspector میاد حالا دقیق یادم نیست کدومش هست برای تنظیم فشرده سازی که برای تنظیم و فشرده سازی تگستچر برای اجرا روی هر پلتفرمی مثل اندروید یا مک و ویندوز و ... تعبیه شده)
--
نکته ی دیگه ای برای بهینه سازی و بالارفتن performance(کارایی پردازنده):
وقتی از کلاس transform استفاده می کنیم یک سری کارها به صورت فانکشنال(functionality) یا تابعی باید اجرا بشن که نیاز به پردازش بیشتر داره. بهتره که از کش یا ارجاع استفاه بشه. یعنی یه اشاره گر یا متغیر از اون بسازیم. مثل این کد :

void Awake()
{
//Cache Transform (MyTransform is a class variable)
MyTransform = transform;
}
void Update(){
//Update position using cached transform
MyTransform.localPosition = MyPosition;
}

نکته ی بعدی برای افزایش کارایی اینه که تا می تونیم از تابع Update کمتر استفاده کنیم و همینطور توابع مثل LateUpdate و FixedUpdate . این توابع برای رویدادها و رفتارهایی بکار می رن که باید طی زمان تغییر کنن. پس بهتره اونا رو کمتر استفاده کنیم.
مثلا نازی نیست سلامتی دشمن(Enemy) رو توی هر فریم چک کنیم. بلکه کافیه فقط زمانی متغیر health رو چک کنیم که حمله ای صورت بگیره(رویدادهای برخورد OnCollisionEnter و OnCollisionEnter2D و یا ....) به طور خلاصه با بهینه سازی کد می تونیم زمان CPU و GPU رو بهبود بدیم.

نکته ی بعدی: Collider ها رو در حد امکان کاهش بدید.

نکته ی بعد برای افزاریش کارایی: از کلاس GUI و OnGUI کمتر استفاده کنید چون چند بار در هر فریم اجرا میشه و بهتره فقط برای منوهای ساده استفاده بشه نه complex و پیچیده.

نکته ی بعدی: از تکستچرهای اطلس استفاده کنید(تکستچرهای اطلس به تکستچرهایی می گن که ابعادشون توانی از 2 باشه.مثل 8 یا 16 یا 32 یا 64 یا 128 یا 256 یا 512 و ....)(چون اگه نباشه یونیتی مجبوره خودش تبدیلات رو انجام بده.)

مبحث بعدی استفاده از Object Pooling و Static Batching هست.
object pooling یه مبحث برنامه نویسی پیشرفته تری هست . مثلا وقتی اسلحه شلیک می کنه داریم به صورت runtime و داینامیک پریفب گلوله(bullet) رو instantiate می کنیم. به جاش می تونیم قبلا چند گلوله رو ایجاد و در بافر پشت صحنه ی جاری مخفی کنیم(offscreen buffer) و وقتی لازم شد این گلوله های از پیش تولید شده رو از حالت hide در بیاریم و نمایش بدیم.این عملیات باعث افزایش کارایی و پردازش کمتر برای اختصاص حافظه در حین اجرا میشه(dynamic memory allocation) و مخصوصا روی سیستم های موبایل کاربرد ویژه ای داره که بحث برنامه نویسیش کمی پیچیده هست.

Static batching هم یک گزینه هست. برای اون دسته از ابجکت هایی که در حین بازی به هیچ وجه حرکت نمیکنن تیک گزینه ی Static check box رو می زنیم.که در بالا و راست خصوصیات ابجکت در inspector میتونیم تنظیمش کنیم که باعث optimizations(بهینه سازی) میشه.

نکته ی بعدی Skyboxes هست که باید یه سری تنظیمات رو برای آسمان های پانورما و ... در بازی انجام بدیم که به جای اینکه realtime همه چیز تولید بشه یه سری شبیه سازی های از قبل برای ایجاد ستاره ها و غیره از قبل بسازیم و استفاده از تکنیک های parallax effects و .... .

نکته ی بعدی : از نورهای پویا و سایه ها( Dynamic Lights and Shadows) کمتر استفاده کنید.(میشه از Light mapping و تکنیک نورپردازی از قبل رندر شده ی Beast استفاده کرد که در خود یونیتی تعبیه شده و می تونیم نورهای نامحدود بذاریم و bake کنیم)

بقیه هم خودتون برید دنبالش....
۰ نظر موافقین ۰ مخالفین ۱ ۰۲ آذر ۹۴ ، ۱۳:۴۲
مدیرکل
یک برنامه نویس دو بعدی یونیتی برای کار گروهی لطفا پیام بذاره.زبان سیشارپ.
ما داریم یه بازی دو بعدی میسازیم و برنامه نویس سیشارپ مسل به یونیتی برای نوشتن گیم پلی نیاز هست.
۱ نظر موافقین ۰ مخالفین ۰ ۲۵ آبان ۹۴ ، ۰۲:۴۴
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
 using System.Collections;
 //sajjad3011
 public class Indiana2 : MonoBehaviour {
     
     public Vector3 target; // The point user picks for the character to follow
     public bool facingRight = false; // Check where the character is facing
     private int move=0; // Movement direction
     private float maxSpeed = 5f; // Speed of character movement
     private Animator anim; // Reference to the animator
     
     
     // Use this for initialization
     void Start () 
     {
         anim = GetComponent<Animator> ();
     }
 
     void FixedUpdate()
     {
         // Obtaining target point user clicked on screen
         if (Input.GetMouseButton (0))     
         {
             // After user has clicked left mouse button recording mouse position
             Vector3 mousePos = Input.mousePosition;
             // Converting mouse position into coordinate system connected to the camera.
             target = Camera.main.ScreenToWorldPoint (new Vector3 (mousePos.x, mousePos.y, 1f));
 
             // Set movement direction depending on target point
             if (target.x < transform.position.x)
                 move = -1;
             else if (target.x> transform.position.x)
                 move = 1;
             Debug.Log (move);
         }
                 
         // Flip the character if nessessary
         if (move ==1 && ! facingRight)
             Flip ();
         if (move == -1 && facingRight)
             Flip();
         
         // check if arrived to target point
         if (Mathf.Abs (target.x - transform.position.x) < 0.2f)     
         {
             move = 0;
         }
         
         anim.SetInteger ("Movement", Mathf.Abs(move));
         
         // apply velocity to actually make character move
         rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
         
         
     }
     
     
     void Flip()
     {
         Debug.Log ("In Flip");
         facingRight = !facingRight;
         Vector3 theScale = transform.localScale;
         theScale.x *= -1;
         transform.localScale = theScale;
     }
 }
کد بالا چیز خاصی نداره نقطه ی کلیک رو چک می کنیم اگه x اش بیشتر از پلیر بود move رو مثبت ویلا منفی می کنه.
بعد طبق این mov حرکت به چپ و راست می کنیم خیلی ساده.
تابع Flip() هم بر حسب این mov میاد و localscale رو برای x مثبت منفی می کنه که باعث میشه پلیر به چپ و راست نیگاه کنه.
خط          anim.SetInteger ("Movement", Mathf.Abs(move)); می گه برو تو انیماتور ببین اگه متغیر Movement بود اونو با 1 تنظیم کن که اونجا باس شرط بذارید روی خط انتقال انیمیشن ایستاده به انیمیشن راه رفتن، که اگه مثلا پارامتر Movement یک شد سوئیچ انجام بشه.
Mathf.Abs(move) قدر مطلش متغیر move رو می ده.
حالا چرا قدر مطلق گرفتیم،چون فرقی نداره پلیر به راست یا چپ بخواد بره. در هر دو حالت انیمیشن راه رفتن اجرا می کنیم. فقط localscale رو با کد اومدیم منفی کردیم جایی که حرکت به چپ هست.(یعنی move رو فقط موقع ارسال به انیماتور اومدیم با تابع قدر مطلق Abs مثبت ارسال کردیم)

همه چیزم تر و تمیز نوشتم حالیتون بشه.


واسه درک انیماتور هم اینو بخونید:
http://gameover.blog.ir/1394/04/05/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%DA%A9%D8%A7%D9%86%DB%8C%D9%85-%DB%8C%D8%A7-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%D8%A7%D9%86%DB%8C%D9%85%D8%A7%D8%AA%D9%88%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-animator
منبع اصلی:
http://answers.unity3d.com/questions/895411/2d-character-controller-for-platformer-with-touch.html
۲ نظر موافقین ۰ مخالفین ۰ ۲۳ آبان ۹۴ ، ۲۳:۲۰
مدیرکل
منبع:GAMEOVER.BLOG.IR

using UnityEngine;
using System.Collections;
//csharp code
//Author:Sajjad3011
public class timer1 : MonoBehaviour {
    public Sprite[] sprArr=new Sprite[4];//set it in the inspector
    SpriteRenderer sprRndr1;
    private int i=0;
    // Use this for initialization
    void Start () {
        sprRndr1=this.gameObject.GetComponent<SpriteRenderer> ();//access to component SpriteRenderer
        InvokeRepeating("f1", 1.0f,1.0f);//call function f1() after 1 second


    }

    void  f1()
    {
        Debug.Log (i);
                sprRndr1.sprite = sprArr[i];
        i++;
        if (i > 3) i = 0;

    }//f1

}

بعد از اختصاص اسکریپت به یک 2d object->new sprite باید چهار تا عکس رو بندازید روی متغیرهای public که توی کد ساختیم(در inspector ظاهر میشه که به صورت ورودی مقدار می گیرن)
۰ نظر موافقین ۰ مخالفین ۰ ۲۳ آبان ۹۴ ، ۱۵:۱۹
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۳ آبان ۹۴ ، ۱۳:۵۸
مدیرکل

منبع :gameover.blog.ir

مثال 1:

بررسی برخورد گیم ابجکت با تگ p2 به گیم ابجکت با تگ p1:

در اینجا اسکریپت رو میدیم به شی ای که تگ p1 داره.
بعدش به شی دوم تگ p2 می دیم.
یک تابع هم توش تعریف می کنیم مثلا برای صدمه خوردن به اسم ApplyDamage که عدد صدمه خوردن رو از ورودی می گیره و از میزان متغیر خون که نیاز به تعریفش هست کم می کنه و حالا روی ui text یا نوار خون نمایش میدیم با کد نویسی:


using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnCollisionEnter2D(Collision2D coll) {
        if (coll.gameObject.tag == "p2")
            coll.gameObject.SendMessage("ApplyDamage", 10);
        
    }
}



مثال2:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnCollisionEnter2D(Collision2D coll) {
        if (coll.gameObject.tag == "Enemy")
            coll.gameObject.SendMessage("ApplyDamage", 10);
        
    }
}

یه دونه هم اینجا گذاشته بودم قبلا :(بررسی برخورد اشیا در فاصله دلخواه روبرو)

http://gameover.blog.ir/1394/07/22/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A8%D8%B1%D8%AE%D9%88%D8%B1%D8%AF-%D8%A8%D8%A7-%D8%A7%D8%B4%DB%8C%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%AF%D8%B1-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%D9%85%D8%A7-%D9%82%D8%B1%D8%A7%D8%B1-%D8%AF%D8%A7%D8%B1%D9%86%D8%AF-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آبان ۹۴ ، ۲۳:۰۷
مدیرکل

منبع :gameover.blog.ir

برای اینکار ابتدا یک دوربین توی صحنه داریم.
یک فایل تصویری به اسم screenShot.png در مسیر جاری داریم.
یک اسکریپت csharp برای ایجاد دکمه ی آپلود می سازیم به اسم test.cs می سازیم و ربطش می دیم به دوربین:
[تصویر: unity_design_script_upload.jpg]
سورس اسکریپت سیشارپ test.cs :

//test.cs
using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
    
    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        
    }
    
    void OnGUI()
    {
        GUI.Label(new Rect(100, 0, 500, 20), Application.dataPath);
        if (GUI.Button(new Rect(100, 100, 150, 20), "Upload"))
        {
            UploadFile("http://yourSiteName.pergig.ir/upload/upload_file.php");
        }
    }
    
    IEnumerator UploadFileCo(string uploadURL)
    {
        print ("file://" + Application.dataPath + "/screenShot.png");
        WWW localFile = new WWW("file://" + Application.dataPath + "/screenShot.png");
        yield return localFile;
        WWWForm postForm = new WWWForm();
        postForm.AddBinaryData("file", localFile.bytes, "screenShot.png", "image/png");
        WWW upload = new WWW(uploadURL, postForm);
        yield return upload;
        if (upload.error == null)
        {
            Debug.Log(upload.text);
        }
        else
        {
            Debug.Log("Error during upload: " + upload.error);
        }
    }
    
    void UploadFile(string uploadURL)
    {
        StartCoroutine(UploadFileCo(uploadURL));
    }
}

کد بالا رو ذخیره کنید و بکشید روی دوربین رها کنید.

به جای "http://yourSiteName.pergig.ir/upload/upload_file.php" آدرس فایل upload_file.php رو بدید.
اینم سورس upload_file.php که باید روی یک هاست php بذاریدش:

//upload_file.php
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)) {
  if ($_FILES["file"]["error"] > 0) {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  } else {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
    if (file_exists("upload/" . $_FILES["file"]["name"])) {
      echo $_FILES["file"]["name"] . " already exists. ";
    } else {
      move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);//move uploaded file into "upload" folder in current dir
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
    }
  }
} else {
  echo "Invalid file";
}
?>

نکته: کد

<?php
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
?>

باعث میشه فایل یا عکس آپلود شده move بشه به پوشه ی دیگه ای به نام upload که روی سایت باید در مسیر upload_file.php ایجادش کرده باشید(علت این کار اینه که هر فایلی بعد از آپلود ابتدا توی یه پوشه ی موقتی روی سایت ذخیره میشه و حتما باید از تو پوشه ی temporary یا پوشه ی فایل های موقت ، انتقالش بدیم به جای دیگه وگرنه توسط موتورهای امنیتی سایت به طور خودکار حذف میشه. علتش هم سیاست های هر سایت هست که از درک این بحث خارجه)
[تصویر: upload_file.jpg]

شما می تونید روی pergig.ir یه هاست رایگان php بگیرید و توی پوشه ی htdocs یه پوشه به اسم upload بسازید و فایل upload_file.php و همچنین یک پوشه ی upload رو داخلش ایجاد کنید و آدرس رو به اسکریپت یونیتی بدید.
---
هرکی مشکل داشت بپرسه ازم
اینم یک شات از صحنه ی بعد از آپلود :
[تصویر: after_upload.jpg]
۱ نظر موافقین ۰ مخالفین ۰ ۲۲ آبان ۹۴ ، ۲۲:۳۹
مدیرکل

منبع :gameover.blog.ir

شکل کلی :

public void InvokeRepeating(string methodName, float time, float repeatRate);

توضیح :

اولین پارامتر اسم تابعی هست که می خوایم مدام اجراش کنیم.

دومین پارامتر زمان انتظار برای اولین شروع بر حسب ثانیه هست.

سومین پارامتر هم زمان تاخیر بین هر فراخوانی هست.

مثال: کد زیر بلافاصله(بعد از صفر ثانیه انتظار) تابع دلخواه رو اجرا می کنه و هر 1 ثانیه دوباره اونو اجرا می کنه:

InvokeRepeating("YOUR FUNCTION NAME", 0, 1.0f);

دقت کنید که حتما باید توی Start بذاریدش نه update. مثال :
void Start () {
InvokeRepeating("f1", 1.0f,1.0f);//call function f1() every 1 second
}
در مثال فوق تابع f1 هر ثانیه یکبار فراخوانی میشه.

تابع Invoke هم هست . این تابع برای اجرای یک تابع دیگه فقط یکبار بدون تکرار بکار می ره.
مثال:
 اگه بخوایم 2  ثانیه صبر کنیم بعدش تابعی رو اجرا کنیم این کد رو اجرا می کنیم:
Invoke("YOUR FUNCTION NAME", 2);

به جای YOUR FUNCTION NAME اسم تابعی که ساختیم رو می ذاریم.
دقت کنید که حتما باید توی Start بذاریدش نه update.

یه مثال دیگه میزنم:
اسکریپت سیشارپ زیر باعث میشه هر ثانیه یکی از 4 اسپرایت ورودی روی اسپرایت شما تنظیم بشه(یادتون نره 4 متغیر public که تعریف می کنیم در زیر، در inspector ظاهر خواهند شد و باید عکس اسپرایت ها رو بکشیم بندازیم روشون. بعد از اختصاص اسکریپت به new sprite ساخته شده در یونیتی 5):
using UnityEngine;
using System.Collections;
//Author:Sajjad3011
public class timer1 : MonoBehaviour {
	public Sprite[] sprArr=new Sprite[4];//set it in the inspector
	SpriteRenderer sprRndr1;
	private int i=0;
	// Use this for initialization
	void Start () {
		sprRndr1=this.gameObject.GetComponent<SpriteRenderer> ();//access to component SpriteRenderer
		InvokeRepeating("f1", 1.0f,1.0f);//call function f1() after 1 second


	}
	// Update is called once per frame
	void   Update () {

	}
	void  f1()
	{
		Debug.Log (i);
		sprRndr1.sprite = sprArr[i];
		i++;
		if (i > 3) i = 0;

	}//f1

}


سوالی بود بپرسید.
۳ نظر موافقین ۰ مخالفین ۰ ۲۲ آبان ۹۴ ، ۲۲:۳۳
مدیرکل

منبع:gameover.blog.ir
کد سیشارپ:
public class PostURL : MonoBehaviour {
 
     void Start () {
         string url = "http://example.com/script.php";
         WWWForm form = new WWWForm();
         form.AddField("var1", "value1");
         form.AddField("var2", "value2");
         WWW www = new WWW(url, form);
         StartCoroutine(WaitForRequest(www));
     }
     IEnumerator WaitForRequest(WWW www)
     {
         yield return www
         // check for errors
         if (www.error == null)
         {
             Debug.Log("WWW Ok!: " + www.data);
         } else {
             Debug.Log("WWW Error: "+ www.error);
         }    
     }

۰ نظر موافقین ۰ مخالفین ۰ ۲۱ آبان ۹۴ ، ۰۰:۴۰
مدیرکل

منبع:gameover.blog.ir


shift+A بزنید تا پنجره Add باز بشه.
یک سیلندر انتخاب کنید تا ایجاد بشه.
Tab بزنید تا به Edit mode بریم.
Z بزنید تا به مد سیمی wire بریم.
1 بزنید تا به نمای روبرو بریم.
5 بزنید تا به نمای دو بعدی(ارتوگرافیک بریم)(برای بازگشت به حالت پرسپکتیو بازم 5 می زنیم)
چند بار + رو بزنید تا zoom بشه.
A رو بزنید تا همه چیز از حالت انتخاب خارج بشه.
ctrl+tab زده و سپس روی حالت انتخاب راس ها بذارید.(vertex)
B بزنید و نصف سیلندر رو انتخاب و حذف کنید.(Delete و سپس vertices).
[تصویر: ctrl_B.jpg]
دوباره Z می زنیم و به حالت غیر سیمی بر می گردیم.
5 می زنیم و از حالت ارتوگرافیک به حالت پرسپکتیو بازگشت می کنیم.
tab می زنیم و از Edit mode به Object mode سوئیچ می کنیم.
با راست کلیک ابجکت رو انتخاب می کنیم.
R و سپس Y زده و عدد منفی نود(-90) رو تایپ و enter می کنیم تا حول محور Y به اندازه ی زاویه ی 90 درجه به چپ بچرخه.
با کلید 4 و 6 و 8 و 2 می تونیم و همینطور اگه نیاز بود کلید ctrl می تونیم مدل رو بچرخونیم و از زاویه های مختلف صحنه بهش نگاه کنیم.
برای اینکه تونل بهتری بسازید می تونید با shift+D یک کپی از مدل ساخته شده بگیرید(D به معنی Duplicate هست) و با کلید S و حرکت ماوس مدل رو Scale کنید.
سپس در نمای wireframe (کلید Z) و همون کلید هایی که گفتم از زوایای مختلف بهش نگاه کنید و S و سپس X زده و طول تونل رو حول محور X با ماوس کوچک یا زیاد کنید تا دقیقا طول هر دو یکی باشه.
سپس با کلید shift و راست کلیک می تونید هر دو تا رو انتخاب کنید و با کلید ctrl+J اونا رو join و تبدیل به یک مش برای ویرایش کنید.
بعد از اون می تونید طبق آموزش های قبلی قسمت های لازم رو به هم متصل و پر کنید

با کلید F بینشون پر میشه.
[تصویر: select_and_Full_between_vertices.jpg]
(سوالی بود پ.خ)موفق باشید.

(سوالی بود پ.خ)موفق باشید.

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ آبان ۹۴ ، ۱۶:۴۳
مدیرکل

منبع :gameover.blog.ir

متناسب کردن بازی با صفحات مختلف اندروید

داخل unity 5 در کادر هایرارکی(hierarchy یا کادر اجزای صحنه) دکمه ی create->ui رو بزنید و سپس یک button رو ایجاد کنید.
به صورت پیشفرض خودش یک کادر canvas ایجاد می کنه که باعث میشه همیشه دکمه یا اشیا ی واسط کاربری شما روی اون قرار بگیره.
بعدش حالت شناور بودن رو باید تنظیم کنید . مثل چپ چین،راست چین افقی یا عمودی و ....(در inspector قسمت rect transform ):
[تصویر: shenavar_ui_unity5.jpg]

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ آبان ۹۴ ، ۱۲:۴۰
مدیرکل

مثلا << یا >> یا غیره :


https://msdn.microsoft.com/en-us/library/6a71f45d.aspx

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ آبان ۹۴ ، ۱۲:۳۸
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        
    }
}

۰ نظر موافقین ۰ مخالفین ۰ ۱۸ آبان ۹۴ ، ۱۰:۴۰
مدیرکل

منبع:

gameover.blog.ir

این PDF رو از zip در آورده و با برنامه ی Adobe Reader بخونید

منبع : http://www.unity3d.com
به لینک pdf زیر برید چند ثنیه صبر کرده و سپس رد تبلیغ بزنید:

http://opizo.com/wSVgB8


نمی دونم چرا دوستان فقط چند نفر دانلود کردن.
توی این اموزش انواع فراخوانی تابع rayCast رو با مثال آوردم و کامل توضیح دادم. توی سایت اصلی unity3d.com هم برید وبسایت نویسان unity3d.com اشتباهاتی رو دارن که ممکنه جبران ناپذیر باشه. واسه همین اقدام به ترجمه و تغییر نوع آموزش سایت unity3d.com کردم.

توی این آموزش سعی کردم کاربران زیادی رو از گیجی در بیارم تا بدونن وقتی تابع Physics.Raycast یکبار به سه پارامتر و یکبار با دو پارامتر و یک بار با 4 پارامتر فراخوانی میشه یعنی چی و چه ورودی هایی رو باید بده.

کاربرد:

مثلا اشعه پرت می کنه تا موانع رو detect کنه.

به هر جهت می خوای تا فاصله مشخص ray می اندازی

برای باز شدنانیمیشن درب در صورت اینکه دوربین از روبرو ببینه.

شرط می ذاری اگه tag  مانع با تگ ما یکی بود کد بعدی رو اجرا کنه

بعدش انیمیشن اجرا کن(window=->Animation درب رو  رو انیمیت کن)

loop Time =false بذارید تا انیمیشن تکرار نشه و فقط یه بار درب باز شه.


مثال :تشخیص مانع روبرو با استفاده از تگ:


bool isOpen=false;
float distance=3f;
 void myRaycast(){
RaycastHit hit;
Ray myRay = new Ray(transform.position, Vector3.forward);
if(Physics.Raycast (myRay, out hit, distance)){
if(hit.collider.tag == "door" && isOpen==false){
Animation.Play("openDoor");
isOpen=true;
}//if internal
}//if external
}//myRaycast()
۶ نظر موافقین ۰ مخالفین ۰ ۱۸ آبان ۹۴ ، ۱۰:۲۷
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۱۸ آبان ۹۴ ، ۱۰:۱۴
مدیرکل

gameover.blog.ir

سازنده:sajjad3011

http://s8.picofile.com/file/8271848476/blenderBookGameover.jpg

https://zarinp.al/574351

هر مشکلی در دانلود بود بهم زنگ بزنید یا توی وبلاگ پیام بدید

یا پیامک بذارید

09358077198

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ آبان ۹۴ ، ۲۲:۲۳
مدیرکل
منبع:gameover.blog.ir

یک 2d object->sprite ایجاد و اسکریپت سیشارپ با نام changeSprite  (حتما باید همنام با کلاس داخل اسکریپت باشه) بسازید و بدید بهش:
//changeSprite runTime
//lang:csharp
//author:sajjad3011
//attach this script to your 2dobject sprite
using UnityEngine;
using System.Collections;

public class changeSprite : MonoBehaviour {
	public Sprite spr1;//set it in the inspector
	public Sprite spr2;//set it in the inspector
	SpriteRenderer sprRndr1;
	// Use this for initialization

	void Start(){
		sprRndr1=this.gameObject.GetComponent<SpriteRenderer> ();//access to component SpriteRenderer
	}
	// Update is called once per frame
	void Update () {
		if (Input.GetKey (KeyCode.Keypad1)||Input.GetKey (KeyCode.Alpha1)) {
			sprRndr1.sprite = spr1;
		}
		else
		if (Input.GetKey (KeyCode.Keypad2)||Input.GetKey (KeyCode.Alpha2)) {
			sprRndr1.sprite = spr2;
		}
	}
}
یادتون نره دو تا عکس بندازید روی پارامترهای spr1 و spr2 در ورودی اسکریپت(در inspector)
سپس اجرا کنید. با کلید 1 و 2 اسپرایت ها تعویض میشه.

روش دوم بدون متغیر public و با استفاده از مسیر فایل png :

نکته ی بسیار مهم :

ابتدا حتما باید پوشه ای به مسیر Assets/Resources ایجاد  کنید.


سپس پوشه ای که حاوی اسپرایت ها هست بریزید توش. مثل spritesFolder به مسیر Assets/Resources/spritesFolder

حال داخل پوشه ی Assets/Resources/spritesFolder یک فایل به اسم mySprite.png داریم که می خوایم با کد اونو در لحظه ی اجرا لود کنیم.

به زبان سیشارپ اینطوری می شه :

GetComponent<SpriteRenderer>().sprite = 
    Resources.Load<Sprite>("spritesFolder/mySprite");

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ آبان ۹۴ ، ۱۳:۵۸
مدیرکل
منبع:gameover.blog.ir

روش یک:
دو متغیر از نوع Camera تعریف کنید که public باشن.
بعدش دو دوربین بذارید توی صحنه و هر دو رو درگ کنید روی متغیرهای cam1 و cam2 مثالمون.
بعدش کد مثل این رو داریم که اگه 1 یا 2 زدیم سوئیچ کنه بین دو دوربین:
public GameObject cam1,cam2;
void Update () {
    
     if(Input.GetKey("1")){
       Debug.Log("Using Camera 1");
      cam1.SetActive(true);
      cam2.SetActive(false);
      }
  if(Input.GetKey("2")){
       Debug.Log("Using Camera 2");
      cam2.SetActive(true);
      cam1.SetActive(false);
      }
     }


روش دو:
نکته: کد به زبان js هست. هرچند کد سیشارپ رو توصیه می کنم اما به علت کمبود وقت سرعتی کپی کردم.
شما سعی کنید حتما کد رو به سیشارپ تغییر بدید چون ساختار سیشارپ خیلی بهتر و استاندارد تر هست و م کلا js(جاوااسکریپت) رو توصیه نمی کنم.(اکثر حرفه ای ها هم بعد از مدتی به سیشارپ روی می آرن . شاید فکر کنید سخته اما من قول میدم بعدا می فهمید سیشارپ حتی از js آسونترم هست و لذت می برید)

اگه به مشکلی برخوردید بپرسید.

Switching Cameras at runtime
[تصویر: camera_switch_runTime.jpg]
برای تغییر دوربین در بازی میخوام الگوریتم یا راهکاری رو برای حل این مسئله یاد بدم با توجه به تحقیقاتم.

اصل کار اینطوری هست :

کد js:
function Update(){
       if(Input.GetKey("1")){
      Debug.Log("Using Camera One");
      camSwap(1);
       }
    }
    function camSwap(currentCam : int){
     
    }
کد بالا یه کار تمیز هست فعلا کامل نیست . فقط اومده صورت مسئله رو ساده کرده و می گه اگه "1" زدیم عدد 1 رو بده به ورودی تابعی به نام camSwap که جلوتر کدهاشو میاریم واسه سوئیچ دوربین روی ابجکت دلخواه.

کد js:
function camSwap(currentCam : int){
     var cameras = GameObject.FindGameObjectsWithTag("cam");
     
     for (var cams : GameObject in cameras){
      cams.GetComponent(Camera).enabled = false;
     }
    }
ما فرض کردیم توی پروژه خودمون سه تا دوربین به اسم "cam" داریم و توی اسکریپت فوق با استفاده از GetComponent دوربین ها رو موقتا غیر فعال می کنیم.

حالا دوربین دلخواه رو کدی که در ادامه میاریم به عنوان دوربین جاری فعال می کنیم :
کد js:
var oneToUse : String = "Camera"+currentCam;
     gameObject.Find(oneToUse).GetComponent(Camera).enabled = true;
یادتون نره اسم دوربین ها رو Camera1, Camera2, Camera3 بذارید.

اینک اسکریپت کامل به دو زبان :
کد js:(توصیه نمی کنم)
//js


    function Update () {
     if(Input.GetKey("1")){
      Debug.Log("Using Camera One");
      camSwap(1);
     }
     if(Input.GetKey("2")){
      Debug.Log("Using Camera Two");
      camSwap(2);
     }
     if(Input.GetKey("3")){
      Debug.Log("Using Camera Three");
      camSwap(3);
     }
    }
     
    function camSwap(currentCam : int){
     var cameras = GameObject.FindGameObjectsWithTag("cam");
     
     for (var cams : GameObject in cameras){
      cams.GetComponent(Camera).enabled = false;
     }  
     
     var oneToUse : String = "Camera"+currentCam;
     gameObject.Find(oneToUse).GetComponent(Camera).enabled = true;
    }
کد csharp:

//csharp

    using UnityEngine;
    using System.Collections;
     
    public class camControl : MonoBehaviour {
     
     void Update () {
      if(Input.GetKey("1")){
       Debug.Log("Using Camera One");
       camSwap(1);
      }
      if(Input.GetKey("2")){
       Debug.Log("Using Camera Two");
       camSwap(2);
      }
      if(Input.GetKey("3")){
       Debug.Log("Using Camera Three");
       camSwap(3);
      }
     }
     
     void camSwap(int currentCam){
      GameObject[] cameras = GameObject.FindGameObjectsWithTag("cam");
     
      foreach (GameObject cams in cameras){
       Camera theCam = cams.GetComponent<Camera>() as Camera;
       theCam.enabled = false;
      }  
     
      string oneToUse = "Camera"+currentCam;
      Camera usedCam = GameObject.Find(oneToUse).GetComponent<Camera>() as Camera;
      usedCam.enabled = true;
     }
    }
منبع اصلی:
http://promakers.ir/showthread.php?tid=8769
www.unity3dstudent.com/2010/12/switching-cameras-at-runtime/
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آبان ۹۴ ، ۱۹:۱۶
مدیرکل
منبع:gameover.blog.ir
در کادر اجزای صحنه(hierarchy)(هایرارکی) راست کلیک و create->ui->text بزنید تا یک کادر متنی ایجاد بشه. خصوصیات عمودی و افقی (horizontal+vertical)رو در inspector روی overflow(سرریز چند خطی) تنظیم کنید بقیه خصوصیات مثل اندازه و نوع و رنگ فونت رو هم می تونید همونجا دستکاری کنید به علاوه ی چپ چین و راست چین و وسط چین افقی و عموی و...
http://s3.picofile.com/file/8220935542/ui_text_unity5.jpg
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آبان ۹۴ ، ۱۸:۰۷
مدیرکل
منبع:gameover.blog.ir
این کد سیشارپ رو بدید به هر اسپرایتی که می خواید(مثلا تک تک اسپرایت های player مثل دست و پا و .... . دقت کنید نباید به والد بدید و به تک تکشون باید بدید):
(با کلید R و A و G و B  مقدار Red و green و blue و alpha رو زیاد می کنید و نتیجه رو می بینید. رنک رو هم توی پارامتر color در inspector می تونید تنظیم کنید):
نظر یادتون نره:
using UnityEngine;
using System.Collections;

public class alpha : MonoBehaviour {
	
	public Color altColor = Color.black;
	public Renderer rend; 
	
	//I do not know why you need this?
	void Example() {         
		altColor.g = 0f;         
		altColor.r = 0f;        
		altColor.b = 0f;         
		altColor.a = 0f;     
	}      
	
	void Start ()
	{       
		//Call Example to set all color values to zero.
		Example();
		//Get the renderer of the object so we can access the color
		rend = GetComponent<Renderer>();
		//Set the initial color (0f,0f,0f,0f)
		rend.material.color = altColor;
	}      
	
	void Update() 
	{
		if (Input.GetKey (KeyCode.G)){  
			//Alter the color          
			altColor.g += 0.1f;
			//Assign the changed color to the material.
			rend.material.color = altColor;
		}
		if (Input.GetKey (KeyCode.R)){  
			//Alter the color           
			altColor.r += 0.1f;
			//Assign the changed color to the material. 
			rend.material.color = altColor;
		}
		if (Input.GetKey (KeyCode.B)){  
			//Alter the color            
			altColor.b += 0.1f;
			//Assign the changed color to the material. 
			rend.material.color = altColor;
		}
		if (Input.GetKey (KeyCode.A)){ 
			//Alter the color          
			altColor.a += 0.1f;
			//Assign the changed color to the material. 
			rend.material.color = altColor;
		}
	}         
}
منبع اصلی که از روش ویرایش هایی رو انجام دادیم:
http://answers.unity3d.com/questions/60453/fading-out-using-rendermaterialcolora-doesnt-work.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۲ آبان ۹۴ ، ۱۳:۵۲
مدیرکل

منبع:gameover.blog.ir


[تصویر: water_unity.jpg]
[تصویر: water2.jpg]
دو تا کلیپ از کار خودم توی یونیتی رو ببینید.(حجم هر کدوم نزدیک 1 مگ هست/زیاد نیست دان کنیدsmiley)
http://opizo.com/GQxLKX

http://opizo.com/GNXhGJ


نکته: باید به لینک های فوق بردی و چند صانیه صبر کنید بعدش رد تبلیغ رو بزنید.

Unity.Pro.v4.3.4f1 رو باز کنید و یک پروژه جدید رو ایجاد کنید و یک صحنه ی جدیدبسازید.
در PROJECT روی گزینه ی assets کلیک کنید و سپس در پنل راست، راست کلیک کرده و import package و سپس Water pro only رو بزنید.
[تصویر: importpackagewaterproonly.gif]
http://s5.picofile.com/file/8117441492/i...roonly.gif
در پنجره ی باز شده همه ی پکیج ها رو انتخاب کنید(دکمه ی All) و سپس import .
[تصویر: importPackage.gif]
http://s5.picofile.com/file/8117441942/i...ackage.gif
حالا در پنل project روی گزینه assets و سپس standart assets و سپس water pro only کلیک کنید.
سپس یک نمونه Daylight Water رو با ماوس بگیرید و بکشید توی صحنه و موقعیت اون رو در بخش position از inspector بذارید روی (0و0و0)
[تصویر: drag_water.jpg]
سپس روی دکمه ی play کلیک کنید(برای خروج دوباره روی Play بزنید و با هیچ کدوم از دکمه های pause و بقیه کار نکنید چون قاطی می کنه صحنه رو و کارتون موقع ذخیره به هم میریزه و undo میشه)
صحنه باید شبیه زیر بشه :
[تصویر: render1_water.jpg]
http://s5.picofile.com/file/8117444334/r..._water.jpg
البته من یه نور مستقیم(directional light) هم گذاشتم و یک cube با تکستچر خزه/چمنی(با R و E و W به ترتیب Scale و Rotate و Move کردم)
برای اینکه صحنه یا آب بهتری داشته باشید وارد پوشه ی Water4 بشید و Water4Example (Advanced) رو بکشید توی صحنه و مختصات position رو بذارید روی (0و0و0)
و دوباره Render بگیرید:
[تصویر: render2_water.jpg]
http://s5.picofile.com/file/8117444850/r..._water.jpg
البته بازم اگه می خواید بهتر بشه می تونید در Hierarchy ابجکت Daylight Water قبلی رو delete کنید:
و پس Play کنید:
[تصویر: water_lastRender.jpg]
http://s5.picofile.com/file/8117445250/water_lastRender.jpg
سوالی بود بپرسید.

رنگ آب و رنگ انعکاس(Reflection) رو هم می تونید در بخش Main color در inspector تغییر بدید.
[تصویر: green_water.jpg]
http://s5.picofile.com/file/8117450934/green_water.jpg
داخل یونیتی باشه یا نباشه بعضیا بلد نیستن.من خودم هم بلد نبودم اینو.حالا که یاد گرفتم بد کردم دارم یاد میدم ؟ شاید بعضیا مبتدی باشن بلد نباشن. بعدش یاد می گیرن خیلی خوشحال میشن.
اینم کل آموزش این صفحه که HTML رو save و zip کردم یه جا دانلود کنید:
http://s5.picofile.com/file/8117459218/water_unity_html_sajjad3011.zip.html

۳ نظر موافقین ۰ مخالفین ۰ ۱۲ آبان ۹۴ ، ۱۲:۰۲
مدیرکل

منبع:gameover.blog.ir

http://s6.picofile.com/file/8245131750/easyT.jpg

حرکت دو بعدی پلیر در یونیتی به وسیله ی easy touch version 3
حرکت دو بعدی player
ویرایش:1/26/2016:


۹ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۹:۲۶
مدیرکل
منبع:gameover.blog.ir
سازنده این آموزش:سجاد
http://s5.picofile.com/file/8114475226/flag_in_wind_blender.pdf.html
با این آموزش ساخت پرچم متحرک در باد رو یاد می گیرید و رندر کردن.
می تونید زاویه ی دوربین رو با انتخاب دوربین و فشردن کلید R و سپس z و تایپ زاویه در بلندر تغییر بدید(R به معنی rotate یا چرخش و z منظورش چرخیدن حول محور z هست)
۱ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۸:۳۶
مدیرکل
منبع:gameover.blog.ir
بعد از unzip فایل html رو با مروگر فایرفاکس باز بفرمایید.(نکته:کدنویسی گفته نشده اما سوالی بود پیام بذارید):
http://www.mediafire.com/download/58g2v6oj4xfw46o/level+selection+menu+unity5.zip
۰ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۷:۴۳
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
using System.Collections;

public class DrawLine : MonoBehaviour
{
 //reference to LineRenderer component
 private LineRenderer line; 
 //car to store mouse position on the screen
 private Vector3 mousePos;
 //assign a material to the Line Renderer in the Inspector
 public Material material;
 //number of lines drawn
 private int currLines = 0;

 void Update ()
 {
  //Create new Line on left mouse click(down)
  if(Input.GetMouseButtonDown(0))
  {
   //check if there is no line renderer created
   if(line == null){
    //create the line
    createLine();
   }
   //get the mouse position
   mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   //set the z co ordinate to 0 as we are only interested in the xy axes
   mousePos.z = 0;
   //set the start point and end point of the line renderer
   line.SetPosition(0,mousePos);
   line.SetPosition(1,mousePos);
  }
  //if line renderer exists and left mouse button is click exited (up)
  else if(Input.GetMouseButtonUp(0) && line)
  {
   mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   mousePos.z = 0;
   //set the end point of the line renderer to current mouse position
   line.SetPosition(1,mousePos);
   //set line as null once the line is created
   line = null;
   currLines++;
  }
  //if mouse button is held clicked and line exists
  else if(Input.GetMouseButton(0) && line)
  {
   mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
   mousePos.z = 0;
   //set the end position as current position but dont set line as null as the mouse click is not exited
   line.SetPosition(1, mousePos);
  }
 }
 
 //method to create line
 private void createLine()
 {
  //create a new empty gameobject and line renderer component
  line = new GameObject("Line"+currLines).AddComponent<LineRenderer>();
  //assign the material to the line
  line.material =  material;
  //set the number of points to the line
  line.SetVertexCount(2);
  //set the width
  line.SetWidth(0.15f,0.15f);
  //render line to the world origin and not to the object's position
  line.useWorldSpace = true;  

 }
}
منبع اصلی:
http://www.thegamecontriver.com/2015/05/how-to-draw-line-on-screen-in-unity-csharp.html
۲ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۷:۲۲
مدیرکل
منبع:gameover.blog.ir

http://opizo.com/AmxLMN


این ورژن از ورژن های 4 و ... هم بهتر هست و اگه توی کدنویسی و حرکت کاراکتر و پرش و ... با استفاده از این پلاگین مشکلی داشتید سوال کنید.

نکته: اگه  در uinity 5.1.0.f3 کار می کنید پکیج رو که import کردید پیام میده حتما yes بزنید یا go ahead
اگه no زدید منوی tool اضافه نمیشه باید asset ایمپورت شده رو انتخاب و حذف کنید و دوباره ایمپورت کنید.

برای افزودن هم منوی Tools->HedgehogTeam->EasyTouch->Extensions->Add a new joystick رو برید:http://s7.picofile.com/file/8245131284/EasyTouch.jpg
بعد از اجرا جوی استیک خودش اضافه میشه.

http://s6.picofile.com/file/8245131750/easyT.jpg



نمونه کد هم اینجاست :
http://gameover.blog.ir/1394/08/11/%DA%A9%D8%AF-%D8%AD%D8%B1%DA%A9%D8%AA-%D9%BE%D8%B1%D8%B4-%D8%AF%D8%A7%D8%A8%D9%84-%D8%AC%D8%A7%D9%85%D9%BE-%D8%B1%D8%A7%D9%87-%D8%B1%D9%81%D8%AA%D9%86-%D8%AF%D9%88-%D8%A8%D8%B9%D8%AF%DB%8C-player-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-Easy-touch-version-3-%D8%B3%DB%8C%D8%B4%D8%A7%D8%B1%D9%BE


دانلود پکیج کامل و تست شده ی کنترل فریک برای تاچ کامل اندروید به همراه آموزش PDF فارسی:
http://gameover.blog.ir/1395/08/07/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%BE%DA%A9%DB%8C%D8%AC-%DA%A9%D8%A7%D9%85%D9%84-%D9%88-%D8%AA%D8%B3%D8%AA-%D8%B4%D8%AF%D9%87-%DB%8C-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%81%D8%B1%DB%8C%DA%A9-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%A7%DA%86-%DA%A9%D8%A7%D9%85%D9%84-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-PDF-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C

۴ نظر موافقین ۰ مخالفین ۰ ۱۱ آبان ۹۴ ، ۰۶:۵۶
مدیرکل
منبع:gameover.blog.ir
استخوان رو انتخاب کنید.
سپس در قسمت armature و display گزینه x-Ray رو فعال کنید.(برای عدم نمایش دوباره غیرفعالش می کنیم):
http://s3.picofile.com/file/8219750200/x_ran_display_bone_with_modelj.jpg
۰ نظر موافقین ۰ مخالفین ۰ ۰۷ آبان ۹۴ ، ۰۲:۳۳
مدیرکل
۱ نظر موافقین ۰ مخالفین ۰ ۰۴ آبان ۹۴ ، ۱۲:۵۱
مدیرکل
منبع:gameover.blog.ir

با تشکر از سجاد
با این کد می تونید با کلید shift چپ و راست رنگ پس زمینه دوربین رو عوض کنید.(در اینجا زرد. چون red=1 و green=1 و blue=0 است. بر حسب سیستم RGBA . یعنی اول شدت رنگ قرمز و سپس سبز و سپس آبی رو میدیم و بعدش اگه اشتباه نکنم آلفا یا شدت)


//change camera Background Color
// press Left or Rihgt shift
//csharp language
//unity 5.1final
//Author:Sajjad3011
using UnityEngine;
using System.Collections;

public class cameraBackgroundColor : MonoBehaviour {
    private Camera cam;
    private     Vector4 color1;
    // Use this for initialization
    void Start () {
    
        color1= Camera.main.backgroundColor;
    }
    
    // Update is called once per frame
    void Update () {
        if (Input.GetKey (KeyCode.LeftShift) || Input.GetKey (KeyCode.RightShift)) 
        {
            Camera.main.backgroundColor=new Vector4(1F, 1f, 0, 0.1f);//Red,Green,Blue,Alpha
        }
        else
            Camera.main.backgroundColor=color1;
    }
}

۱ نظر موافقین ۰ مخالفین ۰ ۰۳ آبان ۹۴ ، ۱۲:۵۳
مدیرکل

منبع:gameover.blog.ir

--

how to check animation is compelete in unity

how to check animation finihed in unity5

-

کد cs:

private IEnumerator WaitForAnimation ( Animation animation )
    {
        do
        {
            yield return null;
        } while ( animation.isPlaying );
    }

کد js:

function WaitForAnimation ( Animation animation )
    {
        yield; while ( animation.isPlaying ) yield;
    }

منبع:

http://answers.unity3d.com/questions/37411/how-can-i-wait-for-an-animation-to-complete.html

مثال بعدی:

function Die ()
 {
 animation.Play("die");
 yield WaitForSeconds (animation["die"].length);
 Destroy(this.gameObject); //destroys the object after animation ended
 }
animation["die"].length   میاد طول زمانی انیمیشنی به اسم die(مردن) رو بر حسب ثانیه در میاره.
yield WaitForSeconds می گه به تعداد ثانیه های ورودی صبر کن.
دستور بعدی هم میاد گیم ابجکت رو نابود می کنه.
-
حالا کل اون کد رو گذاشتیم توی یک تابع که به زبون سیشارپ اینطوری میشه:
کد :
void Die ()
 {
 
animation.Play("die");
 
yield WaitForSeconds (animation["die"].length);
ادامه ی کد

 

شرط می ذاریم مثلا وقتی تیر برخورد کرد به هدف، تابع Die() اجرا بشه.
والسلام.
۱ نظر موافقین ۰ مخالفین ۰ ۰۲ آبان ۹۴ ، ۲۰:۲۵
مدیرکل

منبع:gameover.blog.ir

این یک کلیپ آموزشی که برای شما ساختیم:

http://www.mediafire.com/file/jdywgx70f07s3nh/mp4_ui_button_click_go_level.zip


توی یونیتی 5.1 در hierarchy راست کلیک کن و create->ui->canvas رو بزن تا یک مستطیل ایجاد بشه. جابجاشم کنی فرقی نداره به جای صفحه ی اصلی موبایل جاساز میشه.

حالا می تونی button رو به همون طریق ایجاد کنی و بذاری روش: create->ui->button
بعدش تکستچر دکمه رو توی inspector عوض کن . خصوصیت شناور بودن هم می تونی تنظیم کنی (چپ چین و راست چین و ....)
اگه می خوای واسه کلیکش هم کد بنویسی ابتدا انتخابش کن بعدش توی inspector یک دکمه ی + مثبت هست اونو بزن یک فیلد اضافه میشه. گیم ابجکتی که می خوای رو بکش بنداز روش.
حالا می تونی تابع دلخواهی که داخل اسکریپت های اون گیم ابجکت وجود داره رو از لیست انتخاب کنی برای اجرا.
اینم ببینید:
http://answers.unity3d.com/questions/922045/unity-5-ui-button-onclick.html

+

http://answers.unity3d.com/questions/942622/how-do-you-call-a-function-with-a-button-unity-5-u.html




چند نکته :(زبان سیشارپ)

* برای کد نویسی هم می تونید public Button رو تعریف کنید و دکمه ها رو بکشید بندازید روشون.

* ضمنا باید فاضی نام using UnityEngine.UI رو هم در قسمت بالایی بیارید.

* کد نویسی هم توی تابع Start() باید باشه.

مثال :

یک دکمه برای خروج بسازید و اسکریپت زیر رو بدید به یک گیم ابجکت (مثال canvas) سپس دکمه رو بکشید بندازید روی متغیر btnExit :
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Move : MonoBehaviour {
	public Button btnExit;

	void Start ()
	{

		btnExit.onClick.AddListener(()=>{
			Application.Quit();

		});

}


نکته:
کامپوننت event system هم اگه نیاز شد باید اختصاص بدید بهش(با زدن دکمه Add component و تایپ event system و انتخاب از لیست)
برای کدنویسی رویداد ها(مثل نگه داشتن کلیک یا .....) باید اسکریپتی بنویسید که یک تابع از نوع public void مثلا داشته باشه.

 سپس یک Event Trigger component به دکمه اضافه کنیم (با زدن دکمه ی component در inspector بعد از انتخاب دکمه در hierarchy)، و add new event type رو می زنیم و نوع رویدادی که می خوایم کد رو اختصاص بدیم بهش از لیست انتخاب می کنیم مثل pointerClick ، مثل Drag یا غیره.

مثلا ما Drag رو انتخاب می کنیم.

 بعدش روی + می زنیم و دکمه رو می کشیم روی None(object) تا معرفی کنیم می خوایم از اسکریپت اختصاص داده بهش استفاده کنیم.



سپس از لیست no function ابتدا اسکریپتی که ساخته بودیم رو پیدا و از زیرشاخش تابعی که به صورت void public توی اسکریپت خودمون تعریف کرده بودیم انتخاب می کنیم(یادتون نره حتما نوع تابع باید از نوع public باشه ویلا توی لیست نمیاد)

http://s6.picofile.com/file/8219224792/ui_trigger_eventj.jpg
-
مثلا می تونید رویداد drag رو انتخاب کنید و یک اسکریپت برای حرکت بسازید و بهش اختصاص بدید:
using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

	// Use this for initialization
public void move(){
		transform.position = Input.mousePosition;
	}
}


سوالی بود بپرسید.
۱۵ نظر موافقین ۰ مخالفین ۰ ۰۲ آبان ۹۴ ، ۲۰:۱۸
مدیرکل

منبع:gameover.blog.ir

http://s6.picofile.com/file/8218825350/2.gif


به لینک زیر برید و چند ثانیه صبر کنید سپس رد تبلیغ رو بزنید:

http://opizo.com/ID6SKq

۳ نظر موافقین ۰ مخالفین ۰ ۰۲ آبان ۹۴ ، ۰۳:۵۵
مدیرکل

منبع:gameover.blog.ir

با تشکر از سجاد به خاطر ارسال مطلب

موقعی که دارم خروجی apk می گیرم خطای زیر رو میده.این خطا برای چیه ؟

UnityException: Minimum platform required is Android 5.0 (API level 21)
[تصویر: android5_0_api_level_21.jpg]




اون خطاهایی رو که تو داری رو من قبلا با دانلود بعضی ابزارها از اینجا رفع کردم:
http://downloads.puresoftware.org/files/android/
--
الان نمی دوم دقیقا اندروید 5.0 (نه 5.01 نه 5.1 نه ...) رو می خواد api level 21
---
چند تا هم دانلود کردم یکی android-21_r02.zip بود بازش کردم دیدم توش یک پوشه هست به اسم android-5.0.1 و اونم کپی کردم توی پوشه platforms حل نشد.
تو لینکی که دادم پوشه ی platform-tools داره ولی platforms نداره.کلا گیج شدم دارم بازم پوشه ها رو می بینم.
پوشه هایی که توی \android-sdk\platforms می ریزیم داخلشون پوشه های data و images و skins داره یادتون نره.
پوشه هایی هم که توی android-sdk\build-tools می ریزیم داخلشون پوشه های libو renderscript داره .
--
من فکر کنم توی پوشه ی platform باید یه پوشه بریزیم به اسم android-5.0 که توش اون مشخصات که گفتم رو داشته باشه ولی android-5.0 (نه 5.1 نه 5.01 نه ...) رو که مشخصات گفته شده از لحاظ محتوا رو داشته باشه نمی دونم از کجا دانلود کنم.
یه سایتی هم هست اینه :
http://kaopu.so/pan/WINDOWS_TOOLS
روی platform-tools-21-windows.zip رفتم این باز شد :
http://pan.baidu.com/s/1o66xKuu#render-t...Fplatforms
زبونش چینی هست . با گوگل ترجمش کردم اینطوری میشه معنی دانلودش:
کد:
加速下载(推荐)=Acceleration Download (recommended)
---------------------
普通下载=Normal download  این گزینه رو بزنید واسه دانلود
---------------------
买会员享提速特权,下载速度最高 提升200%=Members enjoy the privilege to buy speed, download speeds of up to 200% lift
---------------------
立即提速= Now Speed

حالا فعلا دارم android-21.rar رو از لینک تولید شده می گیرم کپیش کنم توی پوشه platforms ببینم مشکل رفع میشه یا نه.

big grinبالاخره من موفق شدم تمام خطاها رو با اعتماد به خودم رفع کنم خروجی apk بگیرمlaugh

[تصویر: solved_2_android5_0_api_level_21.jpg]

http://promakers.ir/showthread.php?tid=12009

اینم یه آموزش دیگه برای رفع مشکل خروجی اندروید در یونیتی:
http://gameover.blog.ir/1394/09/13/%D8%B1%D9%81%D8%B9-%D9%85%D8%B4%DA%A9%D9%84-android-sdk-windows-%D8%AF%D8%B1-unity
۴ نظر موافقین ۰ مخالفین ۰ ۰۱ آبان ۹۴ ، ۱۸:۱۶
مدیرکل

gameover.blog.ir

دانلود پکیج های طناب دو بعدی و سه بعدی(UltimateRopeEditor+RopeScriptPackage)

(رایگان شد)

به لینک یر برید و پس از چند لحظه انتظار،دکمه رد تبلیغ رو بزنید

http://opizo.com/1GpDCL




RopeScriptPackage برای دو بعدی هست.


اینم آموزش سه بعدی UltimateRope برای ایجاد طاب سه بعدی:
http://s5.picofile.com/file/8284783992/rope3d.jpg

http://s8.picofile.com/file/8274543834/tut_Ultimate_Rope_Editor_1_10_sajjad.rar.html


اینم آموزش دو بعدی پکیج 2d rope system:(حجم:30 مگ کیفیت عالی. زبان اصلی):


http://s9.picofile.com/file/8274528600/ultimateRope.jpg

http://opizo.com/Qhn8Lo



۳ نظر موافقین ۰ مخالفین ۰ ۰۱ آبان ۹۴ ، ۰۵:۱۵
مدیرکل
۱ نظر موافقین ۰ مخالفین ۰ ۳۰ مهر ۹۴ ، ۰۷:۵۴
مدیرکل
این کد رو بدید به تیر:
//move to click point
//Author:Sajjad3011
//unity 5.1.final
using UnityEngine;
using System.Collections;
public class bullet_move_2d : MonoBehaviour {
	public float speed=10f;
	private Vector3 clickPos;
	float DeathTime=2f;
	Vector3 diff;
	void Start()
	{

		clickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
		clickPos.z = transform.position.z;
		Destroy(gameObject,DeathTime);
		//
		diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
		diff.Normalize();
	}
	void  Update  (){
		transform.position = Vector3.MoveTowards(transform.position, clickPos, speed * Time.deltaTime);
		//Lookat 2d Equivalent		
		float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
		transform.rotation = Quaternion.Euler(0f, 0f, rot_z );
	}
}

این کد رو بدید به جوی استیک مجازی ای که با پکیج easy touch version 3 ساختید.(اگه لینک پکیج رو ندارید بگید بذاریم)
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class joyStick_over_sajjad : MonoBehaviour {
	public GameObject pref_bullet;
	public GameObject player;
	private Vector3 clickPos;
	private bool over=false;

	void Update () {
		if (Input.GetMouseButtonDown(0)) 
		{
			EventSystem eventSystem = EventSystem.current;
			if (! (eventSystem.IsPointerOverGameObject ())){
				//over = true;
		Instantiate (pref_bullet, player.gameObject.transform.position, pref_bullet.transform.rotation);//ijdade tir
			}//if

		} //if
}//update
}//mono


۲ نظر موافقین ۰ مخالفین ۰ ۳۰ مهر ۹۴ ، ۰۷:۱۱
مدیرکل
منبع:gameover.blog.ir

در یونیتی 5 مسیر window->animation رو رفته و سپس کاراکتر رو انتخاب کرده و بعدش create animation بزنید و انیمیشن رو در مسیر گفته شده با اسم دلخواه ذخیره کنید . سپس دکمه ی قرمز record animation رو بزنید و بعد توی timeline نوار انیمیشن رو جابجا و تغییرات بدید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۸ مهر ۹۴ ، ۱۸:۲۰
مدیرکل

منبع:gameover.blog.ir

برای اینکار روی یکی از راس ها راست کلیک کنید تا انتخاب بشه و سپس Alt رو نگه دارید و روی راس مجار کلیک کنید تا کل راس های مجاور انتخاب بشه(با ctrl+Tab روی حالت vertice بذارید و اگه میخواید روی Face یا Edge هم می تونید تنظیم کنید برای انتخاب وجه ها یا یال ها)

[تصویر: select_Adjacent_Vertices_blender.jpg]


۰ نظر موافقین ۰ مخالفین ۰ ۲۸ مهر ۹۴ ، ۱۸:۰۴
مدیرکل

منبع:gameover.blog.ir

وقتی یک شی رو انتخاب می کنیم و سپس شی دوم رو انتخاب می کنیم و ctrl+P و object رو می زنیم شی اول فرزند شی دم میشه و یک خط ارتباط نقطه چین نشون میده. برای اینکه این خط نشون داده نشه کلید N رو بزنید تا کادر خصوصیات(properties ) باز بشه و سپس از بخش display گزینه ی Relationship Lines رو انتخاب کنید.

[تصویر: relationship_Lines.jpg]


۰ نظر موافقین ۰ مخالفین ۰ ۲۸ مهر ۹۴ ، ۱۸:۰۳
مدیرکل

منبع:gameover.blog.ir

یک cube ایجاد کنید.
یک cycender ایجاد و داخل cube جاسازی کنید به طوری که دو سر آن بیرون باشد.
سیلندر را انتخاب و یک اصلاحگر Boolean Modifier به آن اضافه کنید.
در بخش object از مدیفایر اضافه شده به سیلندر،آبجکت cube را انتخاب و apply کنید.
cube را انتخاب و حذف کنید.

[تصویر: booleanModifier.jpg]


۰ نظر موافقین ۰ مخالفین ۰ ۲۸ مهر ۹۴ ، ۱۸:۰۳
مدیرکل

منبع:gameover.blog.ir

با تشکر از سجاد

http://s6.uplod.ir/i/00540/ityqp1epg2p1.jpg


۰ نظر موافقین ۰ مخالفین ۰ ۲۸ مهر ۹۴ ، ۱۸:۰۲
مدیرکل

توی sprite editor می تونیم لوله ی مکزی اسپرایت ها رو تنظیم کنیم.این لوله همون محور چرخش هست.

با وجو تنظیم ، وقتی E می زنیم تا rotate کنیم می بینیم حول لوله نمیچرخه بلکه حول مرکز خودش(center) می چرحخه.

برای عملکرد صحیح باید دکمه ی pivot به جای center فعال باشه:

http://answers.unity3d.com/storage/temp/41146-pivot.png

۰ نظر موافقین ۰ مخالفین ۰ ۲۷ مهر ۹۴ ، ۱۱:۴۱
مدیرکل
منبع:gameover.blog.ir
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        Application.OpenURL("http://example.com/get.php?Scrore=9");
    }
}

متغیر Score و مقداری که دادیم دلخواه هست. اگه بخوایم متغیرهای دیگه هم ارسال کنیم می تونیم با علامت & از هم جدا کنیم مثل
Score=9&x=5

ضمنا باید اجازه دسترسی به اینترنت هم در مانیفست بدید.
مانیفست مسیرش اینجا گفتیم:
https://gameover.blog.ir/tag/%D8%AA%D9%86%D8%B8%DB%8C%D9%85%20%D9%85%D8%A7%D9%86%DB%8C%D9%81%D8%B3%D8%AA%20%D8%AF%D8%B1%20%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C
۳ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۲۳:۰۵
مدیرکل

منبع:gameover.blog.ir

public class PostURL : MonoBehaviour {

     void Start () {
         string url = "http://example.com/script.php";
         WWWForm form = new WWWForm();
         form.AddField("var1", "value1");
         form.AddField("var2", "value2");
         WWW www = new WWW(url, form);
         StartCoroutine(WaitForRequest(www));
     }
     IEnumerator WaitForRequest(WWW www)
     {
         yield return www
         // check for errors
         if (www.error == null)
         {
             Debug.Log("WWW Ok!: " + www.data);
         } else {
             Debug.Log("WWW Error: "+ www.error);
         }    
     }

منبع خارجی:

http://answers.unity3d.com/questions/11021/how-can-i-send-and-receive-data-to-and-from-a-url.html

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۱۹:۳۸
مدیرکل

منبع:gameover.blog.ir

کد زیر،محتوای فایل testFile.txt رو می خونه و نمایش می ده و اینکار رو تا پایان خواندن همه ی سطرهای فایل ادامه میده.

<?php 
header('Content-type: text/html; charset=utf-8'); 
//==============
$myFile="testFile.txt";
$fh=fopen($myFile, 'r') or die("");//read file
while(! feof($fh))
  {
  echo fgets($fh). "<br />";
  }

fclose($fh);
//==============
?>
۰ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۱۸:۳۵
مدیرکل

منبع:gameover.blog.ir

<?php 
header('Content-type: text/html; charset=utf-8'); 
$stringIP=$_SERVER['REMOTE_ADDR'];
//==============
$myFile="testFile.txt";
$fh=fopen($myFile, 'a') or die("can't open file");//'a' : append
fputs($fh,$stringIP ."\r\n");
fclose($fh);
//==============
?>
۰ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۱۸:۳۱
مدیرکل
ابتدا اختلاف مختصات نقطه ی کلیک را از نقطه ی مرکزی دایره بدست می آوریم
dx = abs(x-center_x)
dy = abs(y-center_y)
R = radius
در کد فوق به جای x , y مختصات ماوس را بدهید.

سپس اختلاف هر یک را با شعاع دایره مقایسه می کنیم.اگر کمتر از آن بود یعنی در دایره نیست.
if dx>R then 
    return false.
if dy>R then 
    return false.


۰ نظر موافقین ۰ مخالفین ۰ ۲۵ مهر ۹۴ ، ۰۳:۱۹
مدیرکل

توی سیشارپ و js هر دو از var استفاده میشه. توی js برای تعریف تمام متغیرها. در csharp برای تعریف متغیرهای variant یا متغیرهایی که نوعشون در لحظه ی اجرا تعریف میشه بعد از دریافت ورودی، از var استفاده می کنیم.

۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۲۳:۳۷
مدیرکل

منبع :gameover.blog.ir

using UnityEngine;
using System.Collections;

public class WWWFormImage : MonoBehaviour {

    public string screenShotURL= "http://www.my-server.com/cgi-bin/screenshot.pl";

    // Use this for initialization
    void Start () {
        StartCoroutine(UploadPNG());
    }
    
    IEnumerator UploadPNG() {
        // We should only read the screen after all rendering is complete
        yield return new WaitForEndOfFrame();

        // Create a texture the size of the screen, RGB24 format
        int width = Screen.width;
        int height = Screen.height;
        var tex = new Texture2D( width, height, TextureFormat.RGB24, false );

        // Read screen contents into the texture
        tex.ReadPixels( new Rect(0, 0, width, height), 0, 0 );
        tex.Apply();

        // Encode texture into PNG
        byte[] bytes = tex.EncodeToPNG();
        Destroy( tex );

        // Create a Web Form
        WWWForm form = new WWWForm();
        form.AddField("frameCount", Time.frameCount.ToString());
        form.AddBinaryData("fileUpload", bytes, "screenShot.png", "image/png");

        // Upload to a cgi script
        WWW w = new WWW(screenShotURL, form);
        yield return w;
        if (!string.IsNullOrEmpty(w.error)) {
            print(w.error);
        }
        else {
            print("Finished Uploading Screenshot");
        }
    }
}

به متغیر screenShotURL آدرس صفحه ی دریافت کننده php یا ... رو بدید.(اون پیشفرض pl داده که یه سایت رو معرفی کرده به زبان تحت سرور perl ساخته شده.پسوند فایل های پرل pl هستش)


۱ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۲۳:۳۶
مدیرکل
منبع:gameover.blog.ir
var USERNAME : String;
     var PASSWORD : String;
     
     function Start () {
     
     var form = new WWWForm();
     
     form.AddField("Username", USERNAME);
     form.AddField("Password", PASSWORD);
     
     var headers = form.headers;
     var rawData = form.data;
     var url = "your:url-goes-here";
     var secretKey : String = USERNAME + ":" + PASSWORD;
     headers["Authorization"]="Basic " + System.Convert.ToBase64String(
         System.Text.Encoding.ASCII.GetBytes(secretKey));
     var www = new WWW(url, rawData, headers);
     yield www;
     
         if(www.error) {
             print("There was an error: " + www.error);
         }else{
             print(www.text);
         }
     
     }

کد به زبان js هست و برای بررسی صحت یوزرنیم و پسود بکار می ره و بعدش محتوای وب رو به صورت متنی دریافت می کنه و نمایش میده.
با اندکی فکر روی کد می تونید به سیشارپ convert کنید اگه سیشارپ رو دوست دارید.


۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۲۳:۳۵
مدیرکل
منبع:gameover.blog.ir
نویسنده این مطلب:سجاد
اسکریپت زیر باعث میشه وقتی به پارتیکلی برخورد کردیم نیرویی در جهت direction به ما وارد بشه:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void OnParticleCollision(GameObject other) {
        Rigidbody body = other.GetComponent<Rigidbody>();
        if (body) {
            Vector3 direction = other.transform.position - transform.position;
            direction = direction.normalized;
            body.AddForce(direction * 5);
        }
    }
}

پارتیکل سیستم شوریکن( Shuriken particle system):
این message به اسکریپت اتچ(وصل) شده به پارتیکل سیستم و collider ای که با آن برخورد کرده ارسال می شود.
وقتی تابع OnParticleCollision  از یک اسکریپت وصل شده به gameobject دارای collider  فراخوانی(invoke) می شود پارامتر GameObject ، پارتیکل(ParticleSystem) سیستم را نمایش می دهد. Collider حداکثر یک پیام(message) را در پارتیکل سیستم دریافت می کند که در هر فریم با آن برخورد کرده است( حتی وقتی که پارتیکل سیستم با collider با چند پارتیکل سیستم در فریم جاری برخورد کند.)
برای اطلاعات بیشتر در مورد تمام کالیژن های رخ داده با پارتیکل سیستم، می توان از  ParticleSystem.GetCollisionEvents استفاده کرد تا آرایه ای از ParticleSystem.CollisionEvent را دریافت نماییم.(نکته : Collision event یعنی رویداد برخورد. یا تابعی که در لحظه ی برخورد صدا زده میشه)

نکته:
پیام های فقط زمانی ارسال می شن که توی پنل inspector گزینه ی /Send Collision Messages/ رو برای particle system collision module فعال کنیم.

OnParticleCollision می تونه یک co-routine باشه و خیلی ساده می تونید دستور yield رو برای انتظار اتمام کار تابع بکار بگیرم:
در مورد coroutine قبلا اینجا توضیح دادیم:
http://gameover.blog.ir/1394/07/04/%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-StartCoroutine-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C

مثال:
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public ParticleSystem part;
    public ParticleCollisionEvent[] collisionEvents;
    void Start() {
        part = GetComponent<ParticleSystem>();
        collisionEvents = new ParticleCollisionEvent[16];
    }
    void OnParticleCollision(GameObject other) {
        int safeLength = part.safeCollisionEventSize;
        if (collisionEvents.Length < safeLength)
            collisionEvents = new ParticleCollisionEvent[safeLength];
        
        int numCollisionEvents = part.GetCollisionEvents(other, collisionEvents);
        Rigidbody rb = other.GetComponent<Rigidbody>();
        int i = 0;
        while (i < numCollisionEvents) {
            if (rb) {
                Vector3 pos = collisionEvents[i].intersection;
                Vector3 force = collisionEvents[i].velocity * 10;
                rb.AddForce(force);
            }
            i++;
        }
    }
}

منبع اصلی: سایت سازنده یونیتی
۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۰۹:۰۵
مدیرکل
منبع:gameover.blog.ir
جلوگیری از ثبت نام کاربرد جدید در مای بی بی mybb

پیکر بندی->تنظیمات ثبت نام و پروفایل کاربر


۰ نظر موافقین ۰ مخالفین ۰ ۲۴ مهر ۹۴ ، ۰۱:۵۶
مدیرکل

منبع :gameover.blog.ir

انجمن و ارسال ها->مدیریت انجمن-> نممایش انجمن->سطوح دسترسی

Guests (پیش فرض)

تنظیم دسترسی‌های اختیاری

۰ نظر موافقین ۰ مخالفین ۰ ۲۳ مهر ۹۴ ، ۰۴:۴۶
مدیرکل

منبع:gameover.blog.ir

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public float duration = 1.0F;
    public Light lt;
    void Start() {
        lt = GetComponent<Light>();
    }
    void Update() {
        float phi = Time.time / duration * 2 * Mathf.PI;
        float amplitude = Mathf.Cos(phi) * 0.5F + 0.5F;
        lt.intensity = amplitude;
    }
}

روی اسکریپت فکر کنید متوجه نمیشید سوال کنید . سوال رو خصوصی نپرسید چون پاسخ نمیشه داد.
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۱۸:۵۵
مدیرکل

منبع :gameover.blog.ir

بررسی برخورد با اشیایی که در مقابل ما قرار دارند

sing UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۳:۲۱
مدیرکل

منبع :gameover.blog.ir

شکل کلی

public Vector3 TransformDirection(Vector3 direction);

برای تبدیل direction از فضای محلی(local space) به فضای جهانی(world space) بکار می رود.


مثال:

بررسی برخورد با اشیایی که در مقابل ما قرار دارند

sing UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        Vector3 fwd = transform.TransformDirection(Vector3.forward);
        if (Physics.Raycast(transform.position, fwd, 10))
            print("There is something in front of the object!");
        
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۳:۲۱
مدیرکل

prefab چیست؟

 

پریفب یا prefab هم اگه نمی دونید بپرسید.

 

مثلا یک عکس یا asset یا مجموعه ای از چند گیم ابجکت(جسم بازی مثل مکعب،استوانه وغیره) یا هر چیزی رو خواستیم با ماوس می گیریم می کشیم می اندازیم روی یک جسم در کادر hierarchy(هایرارکی=کادر اجزای صحنه ی بازی ) و زیر شاخه ی یک ابجکت (تهی=empty )قرار می دیم.(نکته برای ایجاد یک جسم تهی یا امپتی،راست کلیک کنید تو کادر هایرارکی و یک جسم empty game object از همون قسمتا ایجاد کنید)

بعدش اون گیم ابجکت empty رو با تمام چیزایی که انداختیم روش و زیر شاخش شده (فقط همون جسم رو )می کشیم توی کادر پروژه تا یک prefab ازش ساخته بشه و تمام چیزایی که زیرشاخش بود هم یه نمونه زیر شاخش میسازه. بعدش می تونیم از کادر هایرارکی یا از صحنه حذفش کنیم. مثل تیر و اشیایی که می خوایم توی صحنه نباشن و با استفاده از کد اونا رو ایجاد کنیم.یا یک نمونه از این پریفب رو بکشیم توی صحنه یا هر چند تا ازش می خوایم بکشیم با ماوس بندازیم تو صحنه و فقط یکی رو از تو کادر پروژه تغییر بدیم تا رنگ همه عوض بشه یا خصوصیات دیگش رو بعد از انتخابش در کادر پروژه ،از طریق کادر inspector که بهش می گیم کادر خصوصیات جسم انتخابی،تغییر بدیم )

 

به همین سادگی. :| :| :|

۱ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۲:۴۵
مدیرکل
منبع:gameover.blog.ir

get name of  the other object name after collision with it,in game maker/studio


Collision Event :

در رویداد برخورد (collision) این کد رو بذارید:

with other
{
show_message(object_get_name(object_index)); }

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۲:۲۱
مدیرکل

منبع :gameover.blog.ir

هر چند game maker  و construct و ..... منسوخ هستن از نظر ما اما به علت درخواست دوستان فقط بعضی سوالات گیم میکر/استادیو رو پاسخ میدیم. و بیشتر تاکید ما روی یونیتی هست.

اما پاسخ:

فرض کنید هلیکپتر یک alarm داره هر چند ثانیه تیر ایجاد می کنه و می خوایم تیر بره سمت سرباز دشمن.

مثال می زنم باقیش با خودتون :

واسه هلی کوپتر یه الارم بذار هر چند ثانیه تیر ایجاد کنه(instance_create که احتمالا همینکار رو می کنی)
توی رویداد ایجاد(create) از ابجکت تیر هم کدی بنویس که حرکت کنه به سمت سرباز دشمن مثال:

کد :

if(instance_exists(sarbaz_obj))
{
move_towards_point(sarbaz_obj.x,sarbaz_obj.y,sarbaz_obj)
direction=point_direction(x,y,sarbaz_obj.x,sarbaz_obj.y)
speed =7
}
۰ نظر موافقین ۰ مخالفین ۱ ۲۲ مهر ۹۴ ، ۰۱:۵۲
مدیرکل
منبع:gameover.blog.ir
یه آرایه تعریف می کنیم و کل گیم ابجکت هایی که تگ(برچسب/tag)  دشمن(enemy) دارن رو لیست می کنیم.
اگه هیچ دشمنی وجود نداشته باشه پس هیچی لیست نمی شه و طبعا طول آرایه باید صفر باشه. دستور یا تابع رفتن به مرحله ی بعدی رو اجرا می کنیم. مثال:
GameObject[] enemyArray = GameObject.FindGameObjectsWithTag("enemy");
if(enemyArray .Length == 0) boroBeMarhaleBadi()

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ مهر ۹۴ ، ۰۱:۳۴
مدیرکل

منبع:gameover.blog.ir

با تشکر از سجاد

یه تابع یا رویداد به اسم void OnCollisionEnter(Collision col){  داریم باهاش می تونید چک کنید با چیزی که تگ nardeban  داره برخورد داریم یا نه. بعدش کلید فلش بالا رو توش چک می کنید اگه فلش بالا زده شد یه آسانسور نامرعی زیرش هست میره بالا و پایین. در حقیقت یه plane یا کلایدر روی یک گیم ابجکت نامرعی میذارید. فلش پایین هم زده شد می یاد پایین . به همین سادگی. همچنین انیمیشن بالا رفتن و پایین رفتن رو می تونیم اجرا کنیم.

البته یادتون نره postion آسانسور نامرعی رو باید به طور اتوماتیک وقتی که player در نقطه بالا یا پایین نردبان هست تنظیم کنید تا وقتی player مثلا از یه نردبان دیگه می ره روی یه سقف و از نردبان دیگه بخواد بیاد پایین آسانسور بالا نباشه.

همچنین بهتره از توابع raycast استفاده کنید زیرا می تونید رودر رو  یا face to face بودن player در مقابل نردبان رو چک کنید و وقتی کاراکتر پشت کرده نتونه بره بالا و بقیه به عهده ی خودتون هست که باگ های احتمالی رو رفع کنید.

۱ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۱۰:۲۷
مدیرکل
منبع:gameover.blog.ir
با شیلتر باز کنید:

http://unity3d.com/unity/download/archive

بعدش اسم رو در کنار ورژن تو گوگل بزنید و سایت های آزاد رو باز کنید.
مثال: یونیتی 5.2.1 فاینال:
http://soft98.ir/software/3d-tools/14494-Unity-3D.html

اینم لیست تغییرات در یونیتی ورژن 5.2:
https://unity3d.com/unity/whats-new/unity-5.2
اینم واسه 5.2.1:
https://unity3d.com/unity/whats-new/unity-5.2.1
تغییرات هر ورژنی رو خواستید آخرش عدد ورژن رو دستکاری کنید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۹:۱۱
مدیرکل

منبع:gameover.blog.ir
کد به زبان سیشارپ در یونیتی 5.1 فاینال تست شده(حالت دو بعدی)

//shellik be jayi ke click kardim 2d mode
using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {
    
    public GameObject pref_Bullet;
    public int bulletSpeed=1000;
    float distance= 10.0f;
    
    void  Update (){
        if (Input.GetMouseButtonDown(0)) {            
            Vector3 position=new Vector2(Input.mousePosition.x, Input.mousePosition.y);
            position = Camera.main.ScreenToWorldPoint(position);
            GameObject go= Instantiate(pref_Bullet, transform.position, Quaternion.identity) as GameObject ;
            go.transform.LookAt(position);    
            Debug.Log(position);
            go.AddComponent<Rigidbody2D>();
            go.gameObject.GetComponent<Rigidbody2D>().AddForce(go.transform.forward*bulletSpeed);
        }
    }
}

نکته: متغیر pref_Bullet از نوع public هست.پریفب نارنجک رو بدید بهش.

پریفب رو اگه نمی دونید بگم:

هر گیم ابجکت یا جسم بازی که می سازیم می ذاریم توی صحنه رنگش و متریال وخصوصیات دیگه رو تغییر می دید هر جور دوس دارید. یا زیر شاخش هر چی می خواید می ذارید(مثل ماشین با چرخ و درب و غیره)، سپس با ماوس  از کادر هایرارکی یا کادر اجزای صحنه ی بازی(hierarchy) می کشید توی کادر project یه نمونه ازش می سازه بهش می گیم prefab یا پریفب . حالا هر چی دلمون بخواد می تونیم ازش با ماوس بندازیم تو صحنه و فقط کافیه تغییر رو روی پریفب اصلی اعمال کنیم تا روی همشون اعمال بشه.

۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۴:۱۸
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۳:۱۵
مدیرکل

منبع:gameover.blog.ir

http://uupload.ir/files/27l_untitled.png

برای Animator Component تیک گزینه ی apply root motion رو غیر فعال کنید.

۱ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۳:۱۲
مدیرکل
منبع:gameover.blog.ir
با تشکر از سجاد
ایجاد سیستم ragdoll برای ولو شدن کاراکتر.
در یونیتی 5 مسیر gameobject->3d object->Ragdoll رو طی می کنیم تا پنجره ی Create Ragdoll باز بشه :
نکته : در یونیتی ورژن قدیمی مسیر game object->Create other->Ragdoll رو باید طی کنید.
سپس اجزای مختلف مدل رو می کشیم می اندازیم در فیلدهای مربوطه:
[تصویر: unity4_5_ragdoll.jpg]
کارکتر رو در قسمتی بالا تر بذارید و اجرا کنید تا کاراکتر ولو بشه:
[تصویر: ragdoll.jpg]
بیشتر توضیح نمی دم این کلیپ رو دانلود کنید:
http://www.mediafire.com/download/qnuor7xtbd7os3o/Ragdoll_unity_Tutorial.mp4

کیفیت عالی هست و زبان خارجی ولی مفهومه.
سیستم کد نویسی هم بعدا توضیح میدم چون باید خوب تحقیق کنم همینجوری مطلب بذارم کیفیت میاد پایین.

کاربرد : برخورد با موتور یا ماشین و پرتاب شدن. مشت زدن به حریف و ولو شدن. روی موتور سوار بودن و پس از برخورد با مانع پرتاب شدن از روی موتور و جدا شدن و .... . همش با کد و تکنیک می شه پیاده سازی کرد. مثلا فلان کامپوننت رو اضاف می کنید. فلان سیستم رو حذف می کنید. کاراکتر رو از زیرشاخه والد حذف می کنید . مثلا موتور والد کاراکتر ماست و کاراکتر ما فرزند اون هست و روش سواره . برای کارهای پیشرفته باید تکنیک های زیادی زد که می تونید در کنارش ragdoll رو بکار ببرید برای ولو شدن و بقیه رو خودتون پیاده سازی کنید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۰:۵۹
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۱ مهر ۹۴ ، ۰۰:۴۷
مدیرکل

منبع: gameover.blog.ir

نویسنده ی این مطلب:سجاد

web player+PC/Mac+LinUx+iOS+ANDRoid+BlackBerry+Windows Store+Windows Phone+Web GL+Xbox 360+ps3+ps4+samsung TV

http://s6.picofile.com/file/8216598492/unity5_platform_publish_formats.jpg


۰ نظر موافقین ۰ مخالفین ۰ ۱۹ مهر ۹۴ ، ۰۰:۰۱
مدیرکل
منبع:gameover.blog.ir
public var cameraObj : GameObject;
     public var specificVector : Vector3;
     public var smoothSpeed : float;
     
     function Start () { 
       cameraObj = GameObject.FindGameObjectWithTag("MainCam");
     }
     
     function Update () {
       specificVector = Vector3(transform.position.x, transform.position.y, cameraObj.transform.position.z);
       cameraObj.transform.position = Vector3.Lerp(cameraObj.transform.position, specificVector, smooth * Time.deltaTime);
     }

کد به زبان js هست و خیلی ساده. کد رو به دوربین بدید و یادتون نره تگ MainCam رو به دوربین اصلی بدید.
ابچکت player رو هم بندازید روی متغیر specificVector که قراره دوربین دنبالش کنه.

کد معادل برای مد سه بعدی:

var target : Transform;
var distance = 3.0;
var height = 3.0;
var damping = 5.0;
var smoothRotation = true;
var rotationDamping = 10.0;

function Update () {
var wantedPosition = target.TransformPoint(0, height, -distance);
transform.position = Vector3.Lerp (transform.position, wantedPosition, Time.deltaTime * damping);

if (smoothRotation) {
var wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);
transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);
}

else transform.LookAt (target, target.up);
}


http://answers.unity3d.com/questions/897409/smooth-camera-follow-for-2d-platformer-game.html

http://imdaunity.blogspot.com/2011/02/camera-follow-script.html


۰ نظر موافقین ۰ مخالفین ۰ ۱۸ مهر ۹۴ ، ۰۲:۰۶
مدیرکل

منبع:gameover.blog.ir


فرض اسکریپتی به نام class1.cs داریم:

using UnityEngine;
using System.Collections;

public class class1: MonoBehaviour {
  public void hello(){
    Debug.Log ("hello world");
  }
}
حال اسکریپت دیگری به نامclass2.cs داریم.
برای دسترسی به اسکریپت بالا و تابع  hello() به این صورت عمل می کنیم:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class class2 : MonoBehaviour {
  void Start () {
    test t1 = new test ();
    t1.hello ();
  }

}


سوالی بود مطرح کنید. بی زحمت رو تبلیغاتی که میذاریم کلیک کنید بالای وبلاگ یا جاهای دیگه. ممنون از همه دوستان
۱ نظر موافقین ۰ مخالفین ۰ ۱۷ مهر ۹۴ ، ۰۹:۰۷
مدیرکل
منبع:gameover.blog.ir

حرکت گلوله/حرکت تیر/حرکت گیم ابجکت/از محل ایجاد/از محل وجود به نقطه ای که با ماوس کلیک شود در یونیتی 5:
اسکریپت زیر باعث میشه گلوله به سمت نقطه ای که کلیک کنیم حرکت کنه و زیر 2 ثانیه نابود بشه.همچنین به سمت نقطه ی کلیک شونده نگاه کنه.اما وقتی به نقطه رسید حرکت متوقف می شه.



//move to click point and lookat2d Equivalent
//Author:Sajjad3011
//unity 5.1.final
using UnityEngine;
using System.Collections;
public class bullet_move_2d : MonoBehaviour {
    public float speed=10f;
    private Vector3 clickPos;
    float DeathTime=2f;
    Vector3 diff;
    void Start()
    {

        clickPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        clickPos.z = transform.position.z;
        Destroy(gameObject,DeathTime);
        //
        diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        diff.Normalize();
    }
    void  Update  (){
        transform.position = Vector3.MoveTowards(transform.position, clickPos, speed * Time.deltaTime);
        //Lookat 2d Equivalent        
        float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, rot_z );
    }
}
اسکریپت فوق بسیار کمیاب هست و خودم با تحقیق زیاد نوشتمش و باگ های زیادی داشت که برای یونیتی 5 حل کردم.
در روش فوق با استفاده از تابع آرک تانژانت(Atan) از کلاس ریاضی(Mathf) ، زاویه را بر حسب رادیان برای y/x بدست آوردیم.

یک باگ هم اسکریپت فوق داره و اون اینه که حرکت فقط تا نقطه کلیک ادامه دار هست و از اون به بعد متوقف می شه. برای ادامه دادن باید از تابع lerp استفاده کنید که اونم با خودتون. یکی از کاربردهای این کد برای ساخت بازی ماروپله هست و یا حرکت یک بازیکن در بازی های استراتژیک از نمای بالا. یا بازی های تیرو کمان دار و همینطور ایده های زیاد.

نکته مهم:
یادتون نره لولای اسپرایت رو بذارید روی نوک گلوله از طریق sprite editor
یا توی inspector می تونید بذارید روی right بستگی داره به شکل گلوله. گلوله ی من به سمت راست بود.
[تصویر: sprite_center.jpg]
نکته: اسکریپت رو باید به گلوله بدید. و خود گلوله هم باید پریفب کنید یعنی توی صحنه نباشه بکشید بندازید توی پروژه. بعدش توی کد کلیک player کد ایجاد پریفب گلوله رو بدید.

۲ نظر موافقین ۰ مخالفین ۰ ۱۷ مهر ۹۴ ، ۰۶:۵۳
مدیرکل
منبع : gameover.blog.ir

Vector3 diff Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
diff.Normalize();
float rot_z Mathf.Atan2(diff.ydiff.x) * Mathf.Rad2Deg;
transform.rotation Quaternion.Euler(0f0frot_z );

۰ نظر موافقین ۰ مخالفین ۰ ۱۷ مهر ۹۴ ، ۰۶:۲۰
مدیرکل

نویسنده مقاله :
وھاب احمدوند
Vahab Ahmadvand

www.Persian-Designers.com

-

Bending Stiffness: که مقداری بین ٠ و ١ می باشد که میزان خمیدگی چند ضلعی ھای پارچه رو مشخص می کند.

اگر این مقدار بیشتر باشد پارچه خشک تر می شود و به آسانی خم نمی شود و اگر
مقدار آن کمتر باشد پارچه نرم تر می شود.


Stretching Stiffness :این پارامتر میزان کش دار بودن و کشیدگی چند ضلعی ھای پارچه را تعیین می کند. مقدار کم باعش شل بودن پارچه می شود.

Damping: تاثیر فشار ھوا بر حرکت جسم.


Thickness: میزان ضخامت و کلفتی پارچه را مشخص می کند.برای جلوگیری از تو رفتگی زیاد می توان مقدار آن را زیاد کرد ولی معمولا بین ٠.٣ تا ٠.۶ مقدار مناسبی است.


Use Gravity : با فعال کردن آن جاذبه زمین روی پارچه تاثیر دارد.


Self Collision: با فعال کردن آن پارچه با خودش برخورد دارد و توی ھم نمی رود.


Friction: میزان اصطحکاک سطح پارچه را تعیین می کند.


کامپوننت  Cloth Renderer
Materials :که بافت سطح رو مشخص می کنه .
Pause When Not Visible : با فعال کردن این گزینه وقتی پارچه در معرض دید دوربین نباشد غیر فعال است و محاسباتی روی آن انجام نمی شود.

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ مهر ۹۴ ، ۰۷:۱۵
مدیرکل

منبع:gameover.blog.ir

روی کادر پروژه راست کلیک و Create->Avatar Mask رو بزنید.

یه ماسک آواتار ایجاد میشه. می تونید برید گزینه ی Humanoid(ساختار انسانی) رو انتخاب کنید. بعدش هر جا رو خواستید ماسک کنید تا انیمیشن روش تاثیر بذاره.مثلا همه قسمت ها جز دست چپ.:

http://s6.picofile.com/file/8215595150/avatarMask.jpg

این فیلم رو ریختیم روی مدیافایر ببینید:

http://www.mediafire.com/download/onpdsvsab0gs4ca/Unity__tweaking_animations_using_Layers_in_Mecanim_%5BYT-f22%5D%5BrX9Trne1obs%5D.rar

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ مهر ۹۴ ، ۰۲:۴۰
مدیرکل

منبع:gameover.blog.ir

کلمه ی global و بعدش یه نقطه (.) و سپس اسم متغیر رو بنویس تمام.
مثال:
دو ابجکت ساز به نام های obj1 و obj2 .
دو روم بساز به اسم room1 و room2 .
obj1 رو بذار روی room1
obj2 رو بذار روی room2
--
obj1:
create:

کد :

global.My_cash=56 
mouse global left pressed:
کد :

room_goto(room2);
Draw:
کد :

draw_text(10,20,"room1" + "          :"+ string(global.My_cash));

obj2:
mouse global left pressed:
کد :

room_goto(room1);
draw:
کد :
draw_text(10,20,"room2" + "          :"+ string(global.My_cash));

اجرا بگیر و روی یک جای روم کلیک کن تا بین روم ها حرکت کنی و نتیجه رو ببینی.
اینم سورس با گیم میکر 8.1 (البته سورس مهم نیست چون توضیحات کامل بود و توی گیم میکر استادیو و ... هم می تونید استفاده کنید احتمالا اگه منسوخ نباشه)
http://s6.picofile.com/file/8215594726/globalVars.gm81.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ مهر ۹۴ ، ۰۲:۰۸
مدیرکل

روش های زیای هست مثل raycast و oncollsionenter و .... اما اینم یکیش با تریگر.

using UnityEngine;
using System.Collections;

public class DoorActivator : MonoBehaviour {

    public Animator[] lights; 

    private Animator animator;

    void Awake () {
        animator = GetComponent <Animator>();
    }

    void OnTriggerEnter (Collider other) {
        if (other.gameObject.tag == "Player") {
            animator.SetBool ("Open", true);
            foreach (var light in lights) {
                light.SetTrigger ("Activate");
            }
        }
    }

    void OnTriggerExit (Collider other) {
        if (other.gameObject.tag == "Player") {
            animator.SetBool ("Open", false);
        }
    }
}


سوال :اصلا انیمیشن درب چیه ؟ چطوری انیمیشن ایجاد کنم؟


خیلی ساده توضیح میدم .

یونیتی 5 خودش ابزاری برای ساخت انیمیشن داره.به مسیر Window->Animation برید تا پنجره ای باز بشه.دکمه Create رو بزنید و انیمیشن رو با نام دلخواه ذخیره کنید.

روی دکمه ها برید یک توضیح میاد واسه هر دکمه. یکی از دکمه ها دایره قرمز هست اونو بزنید تا خودکار انیمیشن رو record کنه. روی نوار زمانی timeline روی صفر برید و توی صحنه کاراکتر رو روی یک position تنظیم کنید. سپس تایم لاین رو ببرید جلو و دوباره توی صحنه کاراکتر رو موقعیتش رو تغییر بدید.اینطوری انیمیشن ایجاد می شه و حرکت ذخیره میشه.

عدش می تونید انیمیشن رو بندازید روی پنجره animator cotroller که با راست کلیک توی پنجره ی پروژه ایجاد میشه و سپس انیماتور کنترلر رو بکشید بندازید روی کامپوننت Animator component که با دکمه ی add component به مدل دادید.

۱ نظر موافقین ۰ مخالفین ۰ ۱۳ مهر ۹۴ ، ۰۰:۱۶
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۱۲ مهر ۹۴ ، ۱۴:۲۷
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۱۱ مهر ۹۴ ، ۰۷:۵۱
مدیرکل

منبع:gameover.blog.ir

با تشکر از سجاد

یک تکنیک مدلسازی یک شهر بزرگ در بلندر از روی نقشه ی اصلی:
مراحل کار :

1. آخرین ورژن اسکریپت Open Street Map (یا OSM) رو از اینجا دانلود کنید:
http://s2.picofile.com/file/8288927776/io_import_scene_osm.py.html
این اسکریپت مثل خود بلندر به زبون paython برنامه نویسی شده.

2. اسکریپت رو در پوشه ی Add-ons مسیر نصب بلندر کپی کنید(برای من در این مسیر: C:\Program Files\Blender Foundation\Blender\2.73\scripts\addons هست) بعدش برید توی بلندر و از منوی File->User Preferences و گزینه ی Street رو جستجو کنید و وقتی اورد تیک بزنید.

3. به سایت http://openstreetmap.org/ برید و در کادر جستجو اسم مکان مورد نظر رو بنویسید. مثلا : اهواز. سپس جستجو رو بزنید تا نقشه بیاد و اگه خواستید zoom کنید.
نکته: اگه صفحه تغییر کرده بود می تونید history مرورگر رو پاک کنید تا به حالت اولیه بره.

[تصویر: osm1.jpg]


4. سپس Export بزنید و برای انتخاب یک ناحیه ی محدود می تونید گزینه ی Manually select a different area رو بزنید و به صورت مستطیلی انتخاب کنید. و سپس Export رو می زنید تا فایل map.osm دانلود بشه. (سرعت اینترنت شما باید کمی بالا باشه و یادتون نره اگه خودکار خواست دانلود کنه آدرس رو کپی کنید و ببرید توی Internet download manager و با اون دانلود کنید. معمولا حدود 2 مگ برای نقشه های متوسط هست)

5. حالا برید فایل map.osm رو در blender ایمپورت کنید(حتما گزینه ی import roads and pathsرو تیک بزنید تا جاده ها و مسیرها رو لود کنه)

6.ممکنه چیزی نبینید و کمی zoom کنید و صحنه رو بچرخونید و از همه ی زوایا بررسی کنید.(اگه فایل رو با IDM دانلود کنید بهتره)

7. بعدش می تونید خطوط رو انتخاب کنید و از منحنی(curve) تبدیل کنید به مش(Alt+C در مد Object برای Covert to Mesh) تا بشه ویرایش کرد.

8. بعدش می تونید انتخاب کنید قسمت های دلخواه رو و به هم وصل کنید یا پر کنید(با کلید F در Edit mode) و سپس E بزنید و Extrude کنید در محور Z بیاریدش بالا.
۲ نظر موافقین ۰ مخالفین ۰ ۱۱ مهر ۹۴ ، ۰۳:۱۳
مدیرکل