Unity3D + C#、またはスクリプトの翻訳方法

画像

私は比較的最近Unity3Dに出会いましたが、それ以前はJava2MEを使用して携帯電話用の独自のエンジンを使用していましたが、それ以外は常習者です。

新しいプラットフォームに移行するとき、私はまず自分用の既製の技術プラットフォームを探しました。私にとっての主な基準は価格(手頃な価格/正当化された)と、可能であればマルチプラットフォームでしたので、一度書かれたコードは何度も変換せずに何度も使用できます。 すぐに、Unityに出会いました。

Unity全体はすでにここで記述されているので、繰り返しません。主なことに注意してください-開発したゲームはC#でスクリプト化できます( Monoのおかげです)。 唯一の制限は、.NET Framework 1.1内で記述する必要があることです。iPhoneでのみサポートされます。 [更新:この記事の執筆中に、.NET 2.1をサポートするiPhone用Unity3Dの新しいバージョンがリリースされました]

したがって、Unity全般、特にC#を使用することで得られる主な利点は次のとおりです。

もちろん、デメリットもありますが、スピーチはそれらのためではありません。利点は最終的には勝っていたからです。

スクリプティングには、 Scintillaに基づいたねじ込み式のUniSciTEエディターが使用されますが 、個人的には好きではありませんでしたが、すぐに古き良きVisual Studioを使用したかったためです。 以下は、C#でスクリプトを作成する方法です。

[upd:ゲーム開発に移植]



Unityの現在のバージョンは2.6.1であり、Visual Studioとの統合に問題はありません。プロジェクトブラウザーウィンドウを右クリックし、適切なメニュー項目を選択するだけです。 その後、Unityはソリューションを作成し、既に作成されている場合は更新します。 プロジェクトには、使用されているUnityEditorおよびUnityEngineライブラリへのリンクが既に含まれており、すべてのスクリプトファイル(言語に関係なく)がプロジェクトに追加されます。
Visualstudio

留意する必要があるもの:


他の微妙な点を説明するために、エンジンに付属し、FPSのようにナビゲートできる単純なスクリプトの例、つまり、wasd +ジャンプ用のスペース+マウスを用意します。 ユーザーのゲームアバターが床から落ちないようにするには、FPSWalkerエンティティを適用するときに自動的にゲームオブジェクトに付着する単純なコライダー-CharacterControllerでラップする必要があります。

// <br/>
var speed = 6.0 ; <br/>
var jumpSpeed = 8.0 ; <br/>
var gravity = 20.0 ; <br/>
<br/>
// <br/>
private var moveDirection = Vector3. zero ; <br/>
private var grounded : boolean = false ; <br/>
<br/>
// <br/>
function FixedUpdate ( ) { <br/>
// <br/>
if ( grounded ) { <br/>
// <br/>
moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>
// <br/>
moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>
// <br/>
moveDirection *= speed ; <br/>
<br/>
// - <br/>
if ( Input. GetButton ( "Jump" ) ) { <br/>
moveDirection. y = jumpSpeed ; <br/>
} <br/>
} <br/>
<br/>
// <br/>
moveDirection. y -= gravity * Time. deltaTime ; <br/>
<br/>
// <br/>
var controller : CharacterController = GetComponent ( CharacterController ) ; <br/>
// <br/>
var flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>
// , <br/>
grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>
} <br/>
// , , CharacterController <br/>
@ script RequireComponent ( CharacterController )
// <br/>
var speed = 6.0 ; <br/>
var jumpSpeed = 8.0 ; <br/>
var gravity = 20.0 ; <br/>
<br/>
// <br/>
private var moveDirection = Vector3. zero ; <br/>
private var grounded : boolean = false ; <br/>
<br/>
// <br/>
function FixedUpdate ( ) { <br/>
// <br/>
if ( grounded ) { <br/>
// <br/>
moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>
// <br/>
moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>
// <br/>
moveDirection *= speed ; <br/>
<br/>
// - <br/>
if ( Input. GetButton ( "Jump" ) ) { <br/>
moveDirection. y = jumpSpeed ; <br/>
} <br/>
} <br/>
<br/>
// <br/>
moveDirection. y -= gravity * Time. deltaTime ; <br/>
<br/>
// <br/>
var controller : CharacterController = GetComponent ( CharacterController ) ; <br/>
// <br/>
var flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>
// , <br/>
grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>
} <br/>
// , , CharacterController <br/>
@ script RequireComponent ( CharacterController )

したがって、上記に加えて、このスクリプトをC#に翻訳するときは、次のことを考慮する必要があります。

これらの単純なルールをすべて適用すると、クラスは次のようになります。

using UnityEngine ; <br/>
<br/>
// <br/>
[ RequireComponent ( typeof ( CharacterController ) ) ] <br/>
// <br/>
public class FPSWalkerInCS : MonoBehaviour { <br/>
// , float <br/>
public float speed = 6.0f ; <br/>
public float jumpSpeed = 8.0f ; <br/>
public float gravity = 20.0f ; <br/>
// - <br/>
private Vector3 moveDirection = Vector3. zero ; <br/>
private bool grounded = false ; <br/>
<br/>
// <br/>
void Start ( ) { <br/>
<br/>
} <br/>
<br/>
void FixedUpdate ( ) { <br/>
if ( grounded ) { <br/>
moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>
moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>
moveDirection *= speed ; <br/>
<br/>
if ( Input. GetButton ( "Jump" ) ) { <br/>
moveDirection. y = jumpSpeed ; <br/>
} <br/>
} <br/>
<br/>
moveDirection. y -= gravity * Time. deltaTime ; <br/>
// <br/>
CharacterController controller = ( CharacterController ) GetComponent ( typeof ( CharacterController ) ) ; <br/>
CollisionFlags flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>
grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>
} <br/>
}
using UnityEngine ; <br/>
<br/>
// <br/>
[ RequireComponent ( typeof ( CharacterController ) ) ] <br/>
// <br/>
public class FPSWalkerInCS : MonoBehaviour { <br/>
// , float <br/>
public float speed = 6.0f ; <br/>
public float jumpSpeed = 8.0f ; <br/>
public float gravity = 20.0f ; <br/>
// - <br/>
private Vector3 moveDirection = Vector3. zero ; <br/>
private bool grounded = false ; <br/>
<br/>
// <br/>
void Start ( ) { <br/>
<br/>
} <br/>
<br/>
void FixedUpdate ( ) { <br/>
if ( grounded ) { <br/>
moveDirection = new Vector3 ( Input. GetAxis ( "Horizontal" ) , 0 , Input. GetAxis ( "Vertical" ) ) ; <br/>
moveDirection = transform. TransformDirection ( moveDirection ) ; <br/>
moveDirection *= speed ; <br/>
<br/>
if ( Input. GetButton ( "Jump" ) ) { <br/>
moveDirection. y = jumpSpeed ; <br/>
} <br/>
} <br/>
<br/>
moveDirection. y -= gravity * Time. deltaTime ; <br/>
// <br/>
CharacterController controller = ( CharacterController ) GetComponent ( typeof ( CharacterController ) ) ; <br/>
CollisionFlags flags = controller. Move ( moveDirection * Time. deltaTime ) ; <br/>
grounded = ( flags & CollisionFlags. CollidedBelow ) != 0 ; <br/>
} <br/>
}

すべて、クラスの準備ができました。

Source: https://habr.com/ru/post/J86456/


All Articles